/******************************************************************************* Contains tests for dub-specific extensions Whenever integrating changes from upstream configy, most conflicts tend to be on `configy.Test`, and as the structure is very similar, the default diff algorithms are useless. Having a separate module simplify this greatly. License: MIT License. See LICENSE for details. *******************************************************************************/ module dub.internal.configy.DubTest; import dub.internal.configy.Attributes; import dub.internal.configy.Read; import dub.internal.dyaml.node; /// Test name pattern matching unittest { static struct Config { @StartsWith("names") string[][string] names_; } auto c = parseConfigString!Config("names-x86:\n - John\n - Luca\nnames:\n - Marie", "/dev/null"); assert(c.names_[null] == [ "Marie" ]); assert(c.names_["x86"] == [ "John", "Luca" ]); } /// Test our `fromYAML` extension unittest { static struct PackageDef { string name; @Optional string target; int build = 42; } static struct Package { string path; PackageDef def; public static Package fromYAML (scope ConfigParser!Package parser) { if (parser.node.nodeID == NodeID.mapping) return Package(null, parser.parseAs!PackageDef); else return Package(parser.parseAs!string); } } static struct Config { string name; Package[] deps; } auto c = parseConfigString!Config( ` name: myPkg deps: - /foo/bar - name: foo target: bar build: 24 - name: fur - /one/last/path `, "/dev/null"); assert(c.name == "myPkg"); assert(c.deps.length == 4); assert(c.deps[0] == Package("/foo/bar")); assert(c.deps[1] == Package(null, PackageDef("foo", "bar", 24))); assert(c.deps[2] == Package(null, PackageDef("fur", null, 42))); assert(c.deps[3] == Package("/one/last/path")); }