1 module tests.drules;
2 
3 
4 import reggae;
5 import unit_threaded;
6 import std.algorithm;
7 
8 
9 void testDCompileNoIncludePathsNinja() {
10     const build = Build(objectFile("path/to/src/foo.d"));
11     const ninja = Ninja(build, "/tmp/myproject");
12     ninja.buildEntries.shouldEqual(
13         [NinjaEntry("build path/to/src/foo.o: _dcompile /tmp/myproject/path/to/src/foo.d",
14                     ["DEPFILE = $out.dep"])]);
15 }
16 
17 
18 void testDCompileIncludePathsNinja() {
19     const build = Build(objectFile("path/to/src/foo.d", "-O", ["path/to/src", "other/path"]));
20     const ninja = Ninja(build, "/tmp/myproject");
21     ninja.buildEntries.shouldEqual(
22         [NinjaEntry("build path/to/src/foo.o: _dcompile /tmp/myproject/path/to/src/foo.d",
23                     ["includes = -I/tmp/myproject/path/to/src -I/tmp/myproject/other/path",
24                      "flags = -O",
25                      "DEPFILE = $out.dep"])]);
26 }
27 
28 void testDCompileIncludePathsMake() {
29     const build = Build(objectFile("path/to/src/foo.d", "-O", ["path/to/src", "other/path"]));
30     build.targets[0].shellCommand("/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");
31 }
32 
33 
34 void testDLinkNinja() {
35     const build = Build(link("bin/lefoo", [Target("leobj.o")], "-lib"));
36     const ninja = Ninja(build, "/dir/stuff");
37     ninja.buildEntries.shouldEqual(
38         [NinjaEntry("build bin/lefoo: _link /dir/stuff/leobj.o",
39                     ["flags = -lib"])]);
40 }
41 
42 void testDCompileWithMultipleFilesMake() {
43     const build = Build(objectFilesPerPackage(["path/to/src/foo.d", "path/to/src/bar.d", "other/weird.d"],
44                                               "-O", ["path/to/src", "other/path"]));
45     const make = Makefile(build, "/tmp/myproject");
46 
47     build.targets[0].shellCommand("/tmp/myproject").shouldEqual(".reggae/dcompile --objFile=other.o --depFile=other.o.dep dmd -O -I/tmp/myproject/path/to/src -I/tmp/myproject/other/path  /tmp/myproject/other/weird.d");
48 
49     build.targets[1].shellCommand("/tmp/myproject").shouldEqual(".reggae/dcompile --objFile=path/to/src.o --depFile=path/to/src.o.dep dmd -O -I/tmp/myproject/path/to/src -I/tmp/myproject/other/path  /tmp/myproject/path/to/src/foo.d /tmp/myproject/path/to/src/bar.d");
50 
51 }
52 
53 void testDCompileWithMultipleFilesNinja() {
54     const build = Build(objectFilesPerPackage(["path/to/src/foo.d", "path/to/src/bar.d", "other/weird.d"],
55                                               "-O", ["path/to/src", "other/path"]));
56     const ninja = Ninja(build, "/tmp/myproject");
57 
58     ninja.buildEntries.shouldEqual(
59         [
60 
61             NinjaEntry("build other.o: _dcompile /tmp/myproject/other/weird.d",
62                        ["includes = -I/tmp/myproject/path/to/src -I/tmp/myproject/other/path",
63                         "flags = -O",
64                         "DEPFILE = $out.dep"]),
65 
66             NinjaEntry("build path/to/src.o: _dcompile /tmp/myproject/path/to/src/foo.d /tmp/myproject/path/to/src/bar.d",
67                        ["includes = -I/tmp/myproject/path/to/src -I/tmp/myproject/other/path",
68                         "flags = -O",
69                         "DEPFILE = $out.dep"]),
70 
71             ]);
72 }
73 
74 
75 void testLink() {
76     const target = link("myapp", [Target("foo.o"), Target("bar.o")], "-L-L");
77     target.shellCommand("/path/to").shouldEqual("dmd -ofmyapp -L-L /path/to/foo.o /path/to/bar.o");
78 }
79 
80 
81 void testObjectFilesEmpty() {
82     objectFilesPerPackage([]).shouldEqual([]);
83     objectFilesPerModule([]).shouldEqual([]);
84 }