Fix size sorting and add regressive test
This commit is contained in:
314
test/mod_list_regressive_test.dart
Normal file
314
test/mod_list_regressive_test.dart
Normal file
@@ -0,0 +1,314 @@
|
||||
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.anomaly',
|
||||
'ludeon.rimworld.biotech',
|
||||
'ludeon.rimworld.ideology',
|
||||
'ludeon.rimworld.royalty',
|
||||
'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));
|
||||
});
|
||||
}
|
@@ -1,3 +1,4 @@
|
||||
import 'package:rimworld_modman/logger.dart';
|
||||
import 'package:rimworld_modman/mod.dart';
|
||||
import 'package:rimworld_modman/mod_list.dart';
|
||||
import 'package:test/test.dart';
|
||||
@@ -147,6 +148,46 @@ void main() {
|
||||
expect(result.errors.any((e) => e.contains('incompatible')), isTrue);
|
||||
expect(result.errors.any((e) => e.contains('harmony')), isTrue);
|
||||
});
|
||||
test('Base game should load before other mods', () {
|
||||
final list = ModList();
|
||||
list.mods = {
|
||||
'dummy': makeDummy().copyWith(size: 10000),
|
||||
'ludeon.rimworld': makeDummy().copyWith(
|
||||
name: 'RimWorld',
|
||||
id: 'ludeon.rimworld',
|
||||
isBaseGame: true,
|
||||
),
|
||||
};
|
||||
list.enableAll();
|
||||
final result = list.generateLoadOrder();
|
||||
|
||||
final expected = ['ludeon.rimworld', 'dummy'];
|
||||
expect(result.errors, isEmpty);
|
||||
expect(result.loadOrder, equals(expected));
|
||||
});
|
||||
test('Base game and expansions should load before other mods', () {
|
||||
final list = ModList();
|
||||
list.mods = {
|
||||
'dummy': makeDummy().copyWith(size: 10000),
|
||||
'ludeon.rimworld': makeDummy().copyWith(
|
||||
name: 'RimWorld',
|
||||
id: 'ludeon.rimworld',
|
||||
isBaseGame: true,
|
||||
),
|
||||
'ludeon.rimworld.anomaly': makeDummy().copyWith(
|
||||
name: 'RimWorld Anomaly',
|
||||
id: 'ludeon.rimworld.anomaly',
|
||||
dependencies: ['ludeon.rimworld'],
|
||||
isExpansion: true,
|
||||
),
|
||||
};
|
||||
list.enableAll();
|
||||
final result = list.generateLoadOrder();
|
||||
|
||||
final expected = ['ludeon.rimworld', 'ludeon.rimworld.anomaly', 'dummy'];
|
||||
expect(result.errors, isEmpty);
|
||||
expect(result.loadOrder, equals(expected));
|
||||
});
|
||||
});
|
||||
|
||||
group('Test loadRequired', () {
|
||||
|
Reference in New Issue
Block a user