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 }