1 /******************************************************************************* 2 3 Contains tests for dub-specific extensions 4 5 Whenever integrating changes from upstream configy, most conflicts tend 6 to be on `configy.Test`, and as the structure is very similar, 7 the default diff algorithms are useless. Having a separate module simplify 8 this greatly. 9 10 License: 11 MIT License. See LICENSE for details. 12 13 *******************************************************************************/ 14 15 module configy.DubTest; 16 17 import configy.Attributes; 18 import configy.Read; 19 20 import dyaml.node; 21 22 /// Test name pattern matching 23 unittest 24 { 25 static struct Config 26 { 27 @StartsWith("names") 28 string[][string] names_; 29 } 30 31 auto c = parseConfigString!Config("names-x86:\n - John\n - Luca\nnames:\n - Marie", "/dev/null"); 32 assert(c.names_[null] == [ "Marie" ]); 33 assert(c.names_["x86"] == [ "John", "Luca" ]); 34 } 35 36 /// Test our `fromYAML` extension 37 unittest 38 { 39 static struct PackageDef 40 { 41 string name; 42 @Optional string target; 43 int build = 42; 44 } 45 46 static struct Package 47 { 48 string path; 49 PackageDef def; 50 51 public static Package fromYAML (scope ConfigParser!Package parser) 52 { 53 if (parser.node.nodeID == NodeID.mapping) 54 return Package(null, parser.parseAs!PackageDef); 55 else 56 return Package(parser.parseAs!string); 57 } 58 } 59 60 static struct Config 61 { 62 string name; 63 Package[] deps; 64 } 65 66 auto c = parseConfigString!Config( 67 ` 68 name: myPkg 69 deps: 70 - /foo/bar 71 - name: foo 72 target: bar 73 build: 24 74 - name: fur 75 - /one/last/path 76 `, "/dev/null"); 77 assert(c.name == "myPkg"); 78 assert(c.deps.length == 4); 79 assert(c.deps[0] == Package("/foo/bar")); 80 assert(c.deps[1] == Package(null, PackageDef("foo", "bar", 24))); 81 assert(c.deps[2] == Package(null, PackageDef("fur", null, 42))); 82 assert(c.deps[3] == Package("/one/last/path")); 83 }