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(dCompile("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                     ["includes = ",
15                      "flags = ",
16                      "stringImports = ",
17                      "DEPFILE = path/to/src/foo.o.dep"])]);
18 }
19 
20 
21 void testDCompileIncludePathsNinja() {
22     const build = Build(dCompile("path/to/src/foo.d", "-O", ["path/to/src", "other/path"]));
23     const ninja = Ninja(build, "/tmp/myproject");
24     ninja.buildEntries.shouldEqual(
25         [NinjaEntry("build path/to/src/foo.o: _dcompile /tmp/myproject/path/to/src/foo.d",
26                     ["includes = -I/tmp/myproject/path/to/src -I/tmp/myproject/other/path",
27                      "flags = -O",
28                      "stringImports = ",
29                      "DEPFILE = path/to/src/foo.o.dep"])]);
30 }
31 
32 void testDCompileIncludePathsMake() {
33     const build = Build(dCompile("path/to/src/foo.d", "-O", ["path/to/src", "other/path"]));
34     build.targets[0].shellCommand("/tmp/myproject").shouldEqual(".reggae/reggaebin --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");
35 }
36 
37 
38 void testDLinkNinja() {
39     const build = Build(dLink("bin/lefoo", [Target("leobj.o")], "-lib"));
40     const ninja = Ninja(build, "/dir/stuff");
41     ninja.buildEntries.shouldEqual(
42         [NinjaEntry("build bin/lefoo: _dlink /dir/stuff/leobj.o",
43                     ["flags = -lib"])]);
44 }
45 
46 void testDCompileWithMultipleFilesMake() {
47     const build = Build(dCompilePerPackage(["path/to/src/foo.d", "path/to/src/bar.d", "other/weird.d"],
48                                       "-O", ["path/to/src", "other/path"]));
49     const make = Makefile(build, "/tmp/myproject");
50 
51     build.targets[0].shellCommand("/tmp/myproject").shouldEqual(".reggae/reggaebin --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");
52 
53     build.targets[1].shellCommand("/tmp/myproject").shouldEqual(".reggae/reggaebin --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");
54 
55 }
56 
57 void testDCompileWithMultipleFilesNinja() {
58     const build = Build(dCompilePerPackage(["path/to/src/foo.d", "path/to/src/bar.d", "other/weird.d"],
59                                  "-O", ["path/to/src", "other/path"]));
60     const ninja = Ninja(build, "/tmp/myproject");
61 
62     ninja.buildEntries.shouldEqual(
63         [
64 
65             NinjaEntry("build other.o: _dcompile /tmp/myproject/other/weird.d",
66                        ["includes = -I/tmp/myproject/path/to/src -I/tmp/myproject/other/path",
67                         "flags = -O",
68                         "stringImports = ",
69                         "DEPFILE = other.o.dep"]),
70 
71             NinjaEntry("build path/to/src.o: _dcompile /tmp/myproject/path/to/src/foo.d /tmp/myproject/path/to/src/bar.d",
72                        ["includes = -I/tmp/myproject/path/to/src -I/tmp/myproject/other/path",
73                         "flags = -O",
74                         "stringImports = ",
75                         "DEPFILE = path/to/src.o.dep"]),
76 
77             ]);
78 }
79 
80 
81 void testDLink() {
82     const target = dLink("myapp", [Target("foo.o"), Target("bar.o")], "-L-L");
83     target.shellCommand("/path/to").shouldEqual("dmd -ofmyapp -L-L /path/to/foo.o /path/to/bar.o");
84 }