1 module tests.cpprules;
2 
3 
4 import reggae;
5 import unit_threaded;
6 
7 
8 void testNoIncludePaths() {
9     const build = Build(objectFile(SourceFile("path/to/src/foo.cpp")));
10     const ninja = Ninja(build, "/tmp/myproject");
11     ninja.buildEntries.shouldEqual(
12         [NinjaEntry("build path/to/src/foo.o: _cppcompile /tmp/myproject/path/to/src/foo.cpp",
13                     ["DEPFILE = $out.dep"]),
14             ]);
15 }
16 
17 
18 void testIncludePaths() {
19     const build = Build(objectFile(SourceFile("path/to/src/foo.cpp"), Flags(""),
20                                    IncludePaths(["path/to/src", "other/path"])));
21     const ninja = Ninja(build, "/tmp/myproject");
22     ninja.buildEntries.shouldEqual(
23         [NinjaEntry("build path/to/src/foo.o: _cppcompile /tmp/myproject/path/to/src/foo.cpp",
24                     ["includes = -I/tmp/myproject/path/to/src -I/tmp/myproject/other/path",
25                      "DEPFILE = $out.dep"]),
26             ]);
27 }
28 
29 
30 void testFlagsCompileC() {
31     const build = Build(objectFile(SourceFile("path/to/src/foo.c"), Flags("-m64 -fPIC -O3")));
32     const ninja = Ninja(build, "/tmp/myproject");
33     ninja.buildEntries.shouldEqual(
34         [NinjaEntry("build path/to/src/foo.o: _ccompile /tmp/myproject/path/to/src/foo.c",
35                     ["flags = -m64 -fPIC -O3",
36                      "DEPFILE = $out.dep"]),
37             ]);
38 }
39 
40 void testFlagsCompileCpp() {
41     const build = Build(objectFile(SourceFile("path/to/src/foo.cpp"), Flags("-m64 -fPIC -O3")));
42     const ninja = Ninja(build, "/tmp/myproject");
43     ninja.buildEntries.shouldEqual(
44         [NinjaEntry("build path/to/src/foo.o: _cppcompile /tmp/myproject/path/to/src/foo.cpp",
45                     ["flags = -m64 -fPIC -O3",
46                      "DEPFILE = $out.dep"]),
47             ]);
48 }
49 
50 void testCppCompile() {
51     const mathsObj = objectFile(SourceFile("src/cpp/maths.cpp"),
52                                 Flags("-m64 -fPIC -O3"),
53                                 IncludePaths(["headers"]));
54 
55     mathsObj.shellCommand("/path/to").shouldEqual(
56         "g++ -m64 -fPIC -O3 -I/path/to/headers -MMD -MT src/cpp/maths.o -MF src/cpp/maths.o.dep "
57         "-o src/cpp/maths.o -c /path/to/src/cpp/maths.cpp");
58 }
59 
60 void testCCompile() {
61     const mathsObj = objectFile(SourceFile("src/c/maths.c"),
62                                 Flags("-m64 -fPIC -O3"),
63                                 IncludePaths(["headers"]));
64 
65     mathsObj.shellCommand("/path/to").shouldEqual(
66         "gcc -m64 -fPIC -O3 -I/path/to/headers -MMD -MT src/c/maths.o -MF src/c/maths.o.dep "
67         "-o src/c/maths.o -c /path/to/src/c/maths.c");
68 }