1 module tests.ut.drules;
2 
3 
4 import reggae;
5 import reggae.options;
6 import unit_threaded;
7 import std.algorithm;
8 import std.array;
9 
10 
11 void testDCompileNoIncludePathsNinja() {
12     auto build = Build(objectFile(SourceFile("path/to/src/foo.d")));
13     auto ninja = Ninja(build, "/tmp/myproject");
14     ninja.buildEntries.shouldEqual(
15         [NinjaEntry("build path/to/src/foo.o: _dcompile /tmp/myproject/path/to/src/foo.d",
16                     ["DEPFILE = path/to/src/foo.o.dep"])]);
17 }
18 
19 
20 void testDCompileIncludePathsNinja() {
21     auto build = Build(objectFile(SourceFile("path/to/src/foo.d"),
22                                    Flags("-O"),
23                                    ImportPaths(["path/to/src", "other/path"])));
24     auto ninja = Ninja(build, "/tmp/myproject");
25     ninja.buildEntries.shouldEqual(
26         [NinjaEntry("build path/to/src/foo.o: _dcompile /tmp/myproject/path/to/src/foo.d",
27                     ["includes = -I/tmp/myproject/path/to/src -I/tmp/myproject/other/path",
28                      "flags = -O",
29                      "DEPFILE = path/to/src/foo.o.dep"])]);
30 }
31 
32 void testDCompileIncludePathsMake() {
33     import reggae.config: gDefaultOptions;
34 
35     auto build = Build(objectFile(SourceFile("path/to/src/foo.d"),
36                                    Flags("-O"),
37                                    ImportPaths(["path/to/src", "other/path"])));
38     build.targets.array[0].shellCommand(gDefaultOptions.withProjectPath("/tmp/myproject")).shouldEqual(".reggae/dcompile --objFile=path/to/src/foo.o --depFile=path/to/src/foo.o.dep dmd -O -I/tmp/myproject/path/to/src -I/tmp/myproject/other/path  /tmp/myproject/path/to/src/foo.d");
39 }
40 
41 
42 @ShouldFail
43 @("dlangObjectFilesPerPackage")
44 unittest {
45     auto build = Build(dlangObjectFilesPerPackage(["path/to/src/foo.d",
46                                                    "path/to/src/bar.d",
47                                                    "other/weird.d"],
48                                                   "-O", ["path/to/src", "other/path"]));
49     build.shouldEqual(Build(Target("path/to/src.o",
50                                    compileCommand("path/to/src.d",
51                                                   "-O",
52                                                   ["path/to/src", "other/path"]),
53                                    [Target("path/to/src/foo.d"), Target("path/to/src/bar.d")]),
54                             Target("other.o",
55                                    compileCommand("other.d",
56                                                   "-O",
57                                                   ["path/to/src", "other/path"]),
58                                    [Target("other/weird.d")]),
59                           ));
60 }
61 
62 @("dlangObjectFilesPerPackage ..")
63 unittest {
64     auto build = Build(dlangObjectFilesPerModule(["/project/source/main.d",
65                                                   "/project/../../common/source/foo.d",
66                                                   "/project/../../common/source/bar.d",
67                                                  ]));
68     build.shouldEqual(Build(Target("project/source/main.o",
69                                    compileCommand("/project/source/main.d"),
70                                    Target("/project/source/main.d")),
71                             Target("project/__/__/common/source/foo.o",
72                                    compileCommand("/project/../../common/source/foo.d"),
73                                    Target("/project/../../common/source/foo.d")),
74                             Target("project/__/__/common/source/bar.o",
75                                    compileCommand("/project/../../common/source/bar.d"),
76                                    Target("/project/../../common/source/bar.d")),
77                           ));
78 }
79 
80 
81 void testObjectFilesEmpty() {
82     dlangObjectFilesPerPackage([]).shouldEqual([]);
83     dlangObjectFilesPerModule([]).shouldEqual([]);
84 }
85 
86 void testObjectFilesImplicitTargets() {
87     auto build = Build(dlangObjectFilesPerPackage(["foo.d"],
88                                                   "-O",
89                                                   ["include"],
90                                                   [],
91                                                   [Target("f.json")]));
92 
93     build.shouldEqual(Build(Target("foo.o",
94                                    compileCommand("foo.d",
95                                                   "-O",
96                                                   ["include"]),
97                                    [Target("path/to/src/foo.d")],
98                                    [Target("f.json")])));
99 }