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 @ShouldFail 43 @("dlangObjectFilesPerPackage") 44 unittest { 45 auto build = Build(dlangObjectFilesPerPackage(["path/to/src/foo.d", 46 "path/to/src/bar.d", 47 "other/weird.d"], 48 "-O", ["path/to/src", "other/path"])); 49 build.shouldEqual(Build(Target("path/to/src.o", 50 compileCommand("path/to/src.d", 51 "-O", 52 ["path/to/src", "other/path"]), 53 [Target("path/to/src/foo.d"), Target("path/to/src/bar.d")]), 54 Target("other.o", 55 compileCommand("other.d", 56 "-O", 57 ["path/to/src", "other/path"]), 58 [Target("other/weird.d")]), 59 )); 60 } 61 62 @("dlangObjectFilesPerPackage ..") 63 unittest { 64 auto build = Build(dlangObjectFilesPerModule(["/project/source/main.d", 65 "/project/../../common/source/foo.d", 66 "/project/../../common/source/bar.d", 67 ])); 68 build.shouldEqual(Build(Target("project/source/main.o", 69 compileCommand("/project/source/main.d"), 70 Target("/project/source/main.d")), 71 Target("project/__/__/common/source/foo.o", 72 compileCommand("/project/../../common/source/foo.d"), 73 Target("/project/../../common/source/foo.d")), 74 Target("project/__/__/common/source/bar.o", 75 compileCommand("/project/../../common/source/bar.d"), 76 Target("/project/../../common/source/bar.d")), 77 )); 78 } 79 80 81 void testObjectFilesEmpty() { 82 dlangObjectFilesPerPackage([]).shouldEqual([]); 83 dlangObjectFilesPerModule([]).shouldEqual([]); 84 } 85 86 void testObjectFilesImplicitTargets() { 87 auto build = Build(dlangObjectFilesPerPackage(["foo.d"], 88 "-O", 89 ["include"], 90 [], 91 [Target("f.json")])); 92 93 build.shouldEqual(Build(Target("foo.o", 94 compileCommand("foo.d", 95 "-O", 96 ["include"]), 97 [Target("path/to/src/foo.d")], 98 [Target("f.json")]))); 99 }