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 @("dlangPackageObjectFilesPerPackage")
43 unittest {
44     auto build = Build(dlangPackageObjectFilesPerPackage(["path/to/src/foo.d",
45                                                           "path/to/src/bar.d",
46                                                           "other/weird.d"],
47                                               "-O", ["path/to/src", "other/path"]));
48     build.shouldEqual(Build(Target("path/to/src.o",
49                                    compileCommand("path/to/src.d",
50                                                   "-O",
51                                                   ["path/to/src", "other/path"]),
52                                    [Target("path/to/src/foo.d"), Target("path/to/src/bar.d")]),
53                             Target("other.o",
54                                    compileCommand("other.d",
55                                                   "-O",
56                                                   ["path/to/src", "other/path"]),
57                                    [Target("other/weird.d")]),
58                           ));
59 }
60 
61 @("dlangPackageObjectFilesPerPackage ..")
62 unittest {
63     auto build = Build(dlangPackageObjectFilesPerModule(["/project/source/main.d",
64                                                          "/project/../../common/source/foo.d",
65                                                          "/project/../../common/source/bar.d",
66                                                          ]));
67     build.shouldEqual(Build(Target("project/source/main.o",
68                                    compileCommand("/project/source/main.d"),
69                                    Target("/project/source/main.d")),
70                             Target("project/__/__/common/source/foo.o",
71                                    compileCommand("/project/../../common/source/foo.d"),
72                                    Target("/project/../../common/source/foo.d")),
73                             Target("project/__/__/common/source/bar.o",
74                                    compileCommand("/project/../../common/source/bar.d"),
75                                    Target("/project/../../common/source/bar.d")),
76                           ));
77 }
78 
79 
80 void testObjectFilesEmpty() {
81     dlangPackageObjectFilesPerPackage([]).shouldEqual([]);
82     dlangPackageObjectFilesPerModule([]).shouldEqual([]);
83 }