@test fn dependency_parse() void = { const tests: [_](str, str, (version | void), dependency_kind, version_cmpres) = [ // Versionless ("flib", "flib", void, dependency_kind::REQUIRED, version_cmpres::ANY), ("! flib", "flib", void, dependency_kind::INCOMPATIBLE, version_cmpres::ANY), ("? flib", "flib", void, dependency_kind::OPTIONAL, version_cmpres::ANY), ("(?) flib", "flib", void, dependency_kind::HIDDEN_OPTIONAL, version_cmpres::ANY), ("~ flib", "flib", void, dependency_kind::NO_LOAD_ORDER, version_cmpres::ANY), // Versioned ("flib < 0.11.0", "flib", version_parse("0.11.0")!, dependency_kind::REQUIRED, version_cmpres::LT), ("flib <= 0.11.0", "flib", version_parse("0.11.0")!, dependency_kind::REQUIRED, version_cmpres::LTEQ), ("? flib = 0.11.0", "flib", version_parse("0.11.0")!, dependency_kind::OPTIONAL, version_cmpres::EQ), ("(?) flib >= 0.11.0", "flib", version_parse("0.11.0")!, dependency_kind::HIDDEN_OPTIONAL, version_cmpres::GTEQ), ("~ flib > 0.11.0", "flib", version_parse("0.11.0")!, dependency_kind::NO_LOAD_ORDER, version_cmpres::GT), // Whitespace ("~ flib > 0.11.0", "flib", version_parse("0.11.0")!, dependency_kind::NO_LOAD_ORDER, version_cmpres::GT), ("~flib<=0.11.0", "flib", version_parse("0.11.0")!, dependency_kind::NO_LOAD_ORDER, version_cmpres::LTEQ), (" ~flib <= 0.11.0 ", "flib", version_parse("0.11.0")!, dependency_kind::NO_LOAD_ORDER, version_cmpres::LTEQ), // Legacy mods can have spaces in their name ("Squeak Through <= 0.11.0 ", "Squeak Through", version_parse("0.11.0")!, dependency_kind::REQUIRED, version_cmpres::LTEQ), ("Squeak Through", "Squeak Through", void, dependency_kind::REQUIRED, version_cmpres::ANY), ]; for (let testset &.. tests) { const dep = dependency_parse(testset.0); assert(dep is dependency); const dep = dep as dependency; defer dependency_free(&dep); assert(dep.ident.0 == testset.1); if (testset.2 is void) { assert(dep.ident.1 is void); } else { const ver = dep.ident.1; assert(ver is version); const ver = ver as version; assert(version_cmp(ver, testset.2 as version) == version_cmpres::EQ); }; assert(dep.kind == testset.3); assert(dep.req == testset.4); }; }; @test fn dependency_str() void = { const tests: [_](str, str) = [ ("flib", "flib"), ("flib>0.11.0", "flib > 0.11.0"), (" ! Squeak Through < 1.0", "! Squeak Through < 1.0.0"), ]; for (let testset &.. tests) { const dep = dependency_parse(testset.0)!; const depstr = dependency_str(&dep); defer free(depstr); assert(depstr == testset.1); }; }; @test fn dependency_test() void = { const tests: [_](str, str, bool) = [ ("flib", "flib_0.1.1", true), ("! flib", "flib_0.1.1", false), ("flib >= 0.10", "flib_0.1.1", false), ("flib >= 0.10", "flib_0.10.0", true), ("flib >= 0.10.0", "flib_0.10.0", true), ("flib > 0.10", "flib_0.10.0", false), ]; for (let testset &.. tests) { const dep = dependency_parse(testset.0)!; defer dependency_free(&dep); const ident = modident_parse(testset.1); defer modident_free(&ident); assert(dependency_test(&dep, &ident) == testset.2); }; };