z_mirror/hare-fmm
git clone https://git.raiguard.me/z_mirror/hare-fmm
74b341b
trunk
1@test fn dependency_parse() void = { 2 const tests: [_](str, str, (version | void), dependency_kind, version_cmpres) = [ 3 // Versionless 4 ("flib", "flib", void, dependency_kind::REQUIRED, version_cmpres::ANY), 5 ("! flib", "flib", void, dependency_kind::INCOMPATIBLE, version_cmpres::ANY), 6 ("? flib", "flib", void, dependency_kind::OPTIONAL, version_cmpres::ANY), 7 ("(?) flib", "flib", void, dependency_kind::HIDDEN_OPTIONAL, version_cmpres::ANY), 8 ("~ flib", "flib", void, dependency_kind::NO_LOAD_ORDER, version_cmpres::ANY), 9 // Versioned 10 ("flib < 0.11.0", "flib", version_parse("0.11.0")!, dependency_kind::REQUIRED, version_cmpres::LT), 11 ("flib <= 0.11.0", "flib", version_parse("0.11.0")!, dependency_kind::REQUIRED, version_cmpres::LTEQ), 12 ("? flib = 0.11.0", "flib", version_parse("0.11.0")!, dependency_kind::OPTIONAL, version_cmpres::EQ), 13 ("(?) flib >= 0.11.0", "flib", version_parse("0.11.0")!, dependency_kind::HIDDEN_OPTIONAL, version_cmpres::GTEQ), 14 ("~ flib > 0.11.0", "flib", version_parse("0.11.0")!, dependency_kind::NO_LOAD_ORDER, version_cmpres::GT), 15 // Whitespace 16 ("~ flib > 0.11.0", "flib", version_parse("0.11.0")!, dependency_kind::NO_LOAD_ORDER, version_cmpres::GT), 17 ("~flib<=0.11.0", "flib", version_parse("0.11.0")!, dependency_kind::NO_LOAD_ORDER, version_cmpres::LTEQ), 18 (" ~flib <= 0.11.0 ", "flib", version_parse("0.11.0")!, dependency_kind::NO_LOAD_ORDER, version_cmpres::LTEQ), 19 // Legacy mods can have spaces in their name 20 ("Squeak Through <= 0.11.0 ", "Squeak Through", version_parse("0.11.0")!, dependency_kind::REQUIRED, version_cmpres::LTEQ), 21 ("Squeak Through", "Squeak Through", void, dependency_kind::REQUIRED, version_cmpres::ANY), 22 ]; 23 24 for (let testset &.. tests) { 25 const dep = dependency_parse(testset.0); 26 assert(dep is dependency); 27 const dep = dep as dependency; 28 defer dependency_free(&dep); 29 30 assert(dep.ident.0 == testset.1); 31 if (testset.2 is void) { 32 assert(dep.ident.1 is void); 33 } else { 34 const ver = dep.ident.1; 35 assert(ver is version); 36 const ver = ver as version; 37 assert(version_cmp(ver, testset.2 as version) 38 == version_cmpres::EQ); 39 }; 40 41 assert(dep.kind == testset.3); 42 assert(dep.req == testset.4); 43 }; 44}; 45 46@test fn dependency_str() void = { 47 const tests: [_](str, str) = [ 48 ("flib", "flib"), 49 ("flib>0.11.0", "flib > 0.11.0"), 50 (" ! Squeak Through < 1.0", "! Squeak Through < 1.0.0"), 51 ]; 52 53 for (let testset &.. tests) { 54 const dep = dependency_parse(testset.0)!; 55 const depstr = dependency_str(&dep); 56 defer free(depstr); 57 assert(depstr == testset.1); 58 }; 59}; 60 61@test fn dependency_test() void = { 62 const tests: [_](str, str, bool) = [ 63 ("flib", "flib_0.1.1", true), 64 ("! flib", "flib_0.1.1", false), 65 ("flib >= 0.10", "flib_0.1.1", false), 66 ("flib >= 0.10", "flib_0.10.0", true), 67 ("flib >= 0.10.0", "flib_0.10.0", true), 68 ("flib > 0.10", "flib_0.10.0", false), 69 ]; 70 71 for (let testset &.. tests) { 72 const dep = dependency_parse(testset.0)!; 73 defer dependency_free(&dep); 74 const ident = modident_parse(testset.1); 75 defer modident_free(&ident); 76 assert(dependency_test(&dep, &ident) == testset.2); 77 }; 78};