315 lines
8.5 KiB
Dart
315 lines
8.5 KiB
Dart
import 'package:rimworld_modman/mod.dart';
|
|
import 'package:rimworld_modman/mod_list.dart';
|
|
import 'package:test/test.dart';
|
|
|
|
Mod makeDummy() {
|
|
return Mod(
|
|
name: 'Dummy Mod',
|
|
id: 'dummy',
|
|
path: '',
|
|
versions: ["1.5"],
|
|
description: '',
|
|
dependencies: [],
|
|
loadAfter: [],
|
|
loadBefore: [],
|
|
incompatibilities: [],
|
|
size: 0,
|
|
isBaseGame: false,
|
|
isExpansion: false,
|
|
enabled: false,
|
|
);
|
|
}
|
|
|
|
void main() {
|
|
test('Mods should be sorted by size while respecting constraints', () {
|
|
final list = ModList();
|
|
list.mods = {
|
|
'dubwise.rimatomics': makeDummy().copyWith(
|
|
id: 'dubwise.rimatomics',
|
|
name: 'Dubs Rimatomics',
|
|
enabled: true,
|
|
size: 1563,
|
|
dependencies: [],
|
|
loadAfter: [],
|
|
loadBefore: [],
|
|
incompatibilities: [],
|
|
),
|
|
'brrainz.justignoremepassing': makeDummy().copyWith(
|
|
id: 'brrainz.justignoremepassing',
|
|
name: 'Just Ignore Me Passing',
|
|
enabled: true,
|
|
size: 28,
|
|
dependencies: [],
|
|
loadAfter: [],
|
|
loadBefore: [],
|
|
incompatibilities: [],
|
|
),
|
|
'brrainz.harmony': makeDummy().copyWith(
|
|
id: 'brrainz.harmony',
|
|
name: 'Harmony',
|
|
enabled: true,
|
|
size: 17,
|
|
dependencies: [],
|
|
loadAfter: [],
|
|
loadBefore: ['ludeon.rimworld'],
|
|
incompatibilities: [],
|
|
),
|
|
'jecrell.doorsexpanded': makeDummy().copyWith(
|
|
id: 'jecrell.doorsexpanded',
|
|
name: 'Doors Expanded',
|
|
enabled: true,
|
|
size: 765,
|
|
dependencies: [],
|
|
loadAfter: [],
|
|
loadBefore: [],
|
|
incompatibilities: [],
|
|
),
|
|
'dubwise.rimefeller': makeDummy().copyWith(
|
|
id: 'dubwise.rimefeller',
|
|
name: 'Rimefeller',
|
|
enabled: true,
|
|
size: 744,
|
|
dependencies: [],
|
|
loadAfter: [],
|
|
loadBefore: [],
|
|
incompatibilities: [],
|
|
),
|
|
'neronix17.toolbox': makeDummy().copyWith(
|
|
id: 'neronix17.toolbox',
|
|
name: 'Tabula Rasa',
|
|
enabled: true,
|
|
size: 415,
|
|
dependencies: [],
|
|
loadAfter: [
|
|
'brrainz.harmony',
|
|
'ludeon.rimworld',
|
|
'ludeon.rimworld.royalty',
|
|
'ludeon.rimworld.ideology',
|
|
'ludeon.rimworld.biotech',
|
|
'ludeon.rimworld.anomaly',
|
|
'unlimitedhugs.hugslib',
|
|
'erdelf.humanoidalienraces',
|
|
],
|
|
loadBefore: [],
|
|
incompatibilities: [],
|
|
),
|
|
'automatic.bionicicons': makeDummy().copyWith(
|
|
id: 'automatic.bionicicons',
|
|
name: 'Bionic icons',
|
|
enabled: true,
|
|
size: 365,
|
|
dependencies: [],
|
|
loadAfter: [],
|
|
loadBefore: [],
|
|
incompatibilities: [],
|
|
),
|
|
'lwm.deepstorage': makeDummy().copyWith(
|
|
id: 'lwm.deepstorage',
|
|
name: "LWM's Deep Storage",
|
|
enabled: true,
|
|
size: 256,
|
|
dependencies: [],
|
|
loadAfter: [
|
|
'brrainz.harmony',
|
|
'ludeon.rimworld.core',
|
|
'rimfridge.kv.rw',
|
|
'mlie.cannibalmeals',
|
|
],
|
|
loadBefore: ['com.github.alandariva.moreplanning'],
|
|
incompatibilities: [],
|
|
),
|
|
'dubwise.dubsmintmenus': makeDummy().copyWith(
|
|
id: 'dubwise.dubsmintmenus',
|
|
name: 'Dubs Mint Menus',
|
|
enabled: true,
|
|
size: 190,
|
|
dependencies: [],
|
|
loadAfter: [],
|
|
loadBefore: [],
|
|
incompatibilities: [],
|
|
),
|
|
'dubwise.dubsmintminimap': makeDummy().copyWith(
|
|
id: 'dubwise.dubsmintminimap',
|
|
name: 'Dubs Mint Minimap',
|
|
enabled: true,
|
|
size: 190,
|
|
dependencies: [],
|
|
loadAfter: [],
|
|
loadBefore: [],
|
|
incompatibilities: [],
|
|
),
|
|
'ludeon.rimworld': makeDummy().copyWith(
|
|
id: 'ludeon.rimworld',
|
|
name: 'RimWorld',
|
|
enabled: true,
|
|
size: 0,
|
|
dependencies: [],
|
|
loadAfter: [],
|
|
loadBefore: [],
|
|
incompatibilities: [],
|
|
isBaseGame: true,
|
|
),
|
|
'ludeon.rimworld.royalty': makeDummy().copyWith(
|
|
id: 'ludeon.rimworld.royalty',
|
|
name: 'RimWorld Royalty',
|
|
enabled: true,
|
|
size: 0,
|
|
dependencies: [],
|
|
loadAfter: ['ludeon.rimworld'],
|
|
loadBefore: [],
|
|
incompatibilities: [],
|
|
isExpansion: true,
|
|
),
|
|
'ludeon.rimworld.ideology': makeDummy().copyWith(
|
|
id: 'ludeon.rimworld.ideology',
|
|
name: 'RimWorld Ideology',
|
|
enabled: true,
|
|
size: 0,
|
|
dependencies: [],
|
|
loadAfter: ['ludeon.rimworld'],
|
|
loadBefore: [],
|
|
incompatibilities: [],
|
|
isExpansion: true,
|
|
),
|
|
'ludeon.rimworld.biotech': makeDummy().copyWith(
|
|
id: 'ludeon.rimworld.biotech',
|
|
name: 'RimWorld Biotech',
|
|
enabled: true,
|
|
size: 0,
|
|
dependencies: [],
|
|
loadAfter: ['ludeon.rimworld'],
|
|
loadBefore: [],
|
|
incompatibilities: [],
|
|
isExpansion: true,
|
|
),
|
|
'ludeon.rimworld.anomaly': makeDummy().copyWith(
|
|
id: 'ludeon.rimworld.anomaly',
|
|
name: 'RimWorld Anomaly',
|
|
enabled: true,
|
|
size: 0,
|
|
dependencies: [],
|
|
loadAfter: ['ludeon.rimworld'],
|
|
loadBefore: [],
|
|
incompatibilities: [],
|
|
isExpansion: true,
|
|
),
|
|
};
|
|
list.enableAll();
|
|
final result = list.generateLoadOrder();
|
|
|
|
final expected = [
|
|
'brrainz.harmony',
|
|
'ludeon.rimworld',
|
|
'ludeon.rimworld.royalty',
|
|
'ludeon.rimworld.ideology',
|
|
'ludeon.rimworld.biotech',
|
|
'ludeon.rimworld.anomaly',
|
|
'dubwise.rimatomics',
|
|
'jecrell.doorsexpanded',
|
|
'dubwise.rimefeller',
|
|
'neronix17.toolbox',
|
|
'automatic.bionicicons',
|
|
'lwm.deepstorage',
|
|
'dubwise.dubsmintmenus',
|
|
'dubwise.dubsmintminimap',
|
|
'brrainz.justignoremepassing',
|
|
];
|
|
expect(result.errors, isEmpty);
|
|
expect(result.loadOrder, equals(expected));
|
|
});
|
|
test('Prepatcher should load before Harmony', () {
|
|
final list = ModList();
|
|
list.mods = {
|
|
'bs.betterlog': makeDummy().copyWith(
|
|
id: 'bs.betterlog',
|
|
name: 'Better Log - Fix your errors',
|
|
enabled: true,
|
|
size: 69,
|
|
dependencies: [],
|
|
loadAfter: [
|
|
'brrainz.harmony',
|
|
'me.samboycoding.betterloading',
|
|
'zetrith.prepatcher',
|
|
'ludeon.rimworld',
|
|
],
|
|
loadBefore: [
|
|
'ludeon.rimworld.royalty',
|
|
'ludeon.rimworld.ideology',
|
|
'ludeon.rimworld.biotech',
|
|
'ludeon.rimworld.anomaly',
|
|
'bs.performance',
|
|
'unlimitedhugs.hugslib',
|
|
],
|
|
incompatibilities: [],
|
|
),
|
|
'zetrith.prepatcher': makeDummy().copyWith(
|
|
id: 'zetrith.prepatcher',
|
|
name: 'Prepatcher',
|
|
enabled: true,
|
|
size: 21,
|
|
loadBefore: ['ludeon.rimworld', 'brrainz.harmony'],
|
|
),
|
|
'brrainz.harmony': makeDummy().copyWith(
|
|
id: 'brrainz.harmony',
|
|
name: 'Harmony',
|
|
enabled: true,
|
|
size: 17,
|
|
loadBefore: ['ludeon.rimworld'],
|
|
),
|
|
'ludeon.rimworld': makeDummy().copyWith(
|
|
id: 'ludeon.rimworld',
|
|
name: 'RimWorld',
|
|
enabled: true,
|
|
size: 0,
|
|
isBaseGame: true,
|
|
),
|
|
'ludeon.rimworld.anomaly': makeDummy().copyWith(
|
|
id: 'ludeon.rimworld.anomaly',
|
|
name: 'RimWorld Anomaly',
|
|
enabled: true,
|
|
size: 0,
|
|
loadAfter: ['ludeon.rimworld'],
|
|
isExpansion: true,
|
|
),
|
|
'ludeon.rimworld.biotech': makeDummy().copyWith(
|
|
id: 'ludeon.rimworld.biotech',
|
|
name: 'RimWorld Biotech',
|
|
enabled: true,
|
|
size: 0,
|
|
loadAfter: ['ludeon.rimworld'],
|
|
isExpansion: true,
|
|
),
|
|
'ludeon.rimworld.ideology': makeDummy().copyWith(
|
|
id: 'ludeon.rimworld.ideology',
|
|
name: 'RimWorld Ideology',
|
|
enabled: true,
|
|
size: 0,
|
|
loadAfter: ['ludeon.rimworld'],
|
|
isExpansion: true,
|
|
),
|
|
'ludeon.rimworld.royalty': makeDummy().copyWith(
|
|
id: 'ludeon.rimworld.royalty',
|
|
name: 'RimWorld Royalty',
|
|
enabled: true,
|
|
size: 0,
|
|
loadAfter: ['ludeon.rimworld'],
|
|
isExpansion: true,
|
|
),
|
|
};
|
|
list.enableAll();
|
|
final order = list.generateLoadOrder();
|
|
|
|
final expected = [
|
|
'zetrith.prepatcher',
|
|
'brrainz.harmony',
|
|
'ludeon.rimworld',
|
|
'bs.betterlog',
|
|
'ludeon.rimworld.anomaly',
|
|
'ludeon.rimworld.biotech',
|
|
'ludeon.rimworld.ideology',
|
|
'ludeon.rimworld.royalty',
|
|
];
|
|
expect(order.loadOrder, equals(expected));
|
|
});
|
|
}
|