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