1 module tests.ut.drules; 2 3 4 import reggae; 5 import reggae.options; 6 import reggae.backend.ninja; 7 import unit_threaded; 8 import std.algorithm; 9 import std.array; 10 11 12 void testDCompileNoIncludePathsNinja() { 13 auto build = Build(objectFile(SourceFile("path/to/src/foo.d"))); 14 auto ninja = Ninja(build, "/tmp/myproject"); 15 ninja.buildEntries.shouldEqual( 16 [NinjaEntry("build path/to/src/foo.o: _dcompile /tmp/myproject/path/to/src/foo.d", 17 ["DEPFILE = path/to/src/foo.o.dep"])]); 18 } 19 20 21 void testDCompileIncludePathsNinja() { 22 auto build = Build(objectFile(SourceFile("path/to/src/foo.d"), 23 Flags("-O"), 24 ImportPaths(["path/to/src", "other/path"]))); 25 auto ninja = Ninja(build, "/tmp/myproject"); 26 ninja.buildEntries.shouldEqual( 27 [NinjaEntry("build path/to/src/foo.o: _dcompile /tmp/myproject/path/to/src/foo.d", 28 ["includes = -I/tmp/myproject/path/to/src -I/tmp/myproject/other/path", 29 "flags = -O", 30 "DEPFILE = path/to/src/foo.o.dep"])]); 31 } 32 33 void testDCompileIncludePathsMake() { 34 import reggae.config: gDefaultOptions; 35 36 auto build = Build(objectFile(SourceFile("path/to/src/foo.d"), 37 Flags("-O"), 38 ImportPaths(["path/to/src", "other/path"]))); 39 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"); 40 } 41 42 43 @ShouldFail 44 @("dlangObjectFilesPerPackage") 45 unittest { 46 auto build = Build(dlangObjectFilesPerPackage(["path/to/src/foo.d", 47 "path/to/src/bar.d", 48 "other/weird.d"], 49 "-O", ["path/to/src", "other/path"])); 50 build.shouldEqual(Build(Target("path/to/src.o", 51 compileCommand("path/to/src.d", 52 "-O", 53 ["path/to/src", "other/path"]), 54 [Target("path/to/src/foo.d"), Target("path/to/src/bar.d")]), 55 Target("other.o", 56 compileCommand("other.d", 57 "-O", 58 ["path/to/src", "other/path"]), 59 [Target("other/weird.d")]), 60 )); 61 } 62 63 @("dlangObjectFilesPerPackage ..") 64 unittest { 65 auto build = Build(dlangObjectFilesPerModule(["/project/source/main.d", 66 "/project/../../common/source/foo.d", 67 "/project/../../common/source/bar.d", 68 ])); 69 build.shouldEqual(Build(Target("project/source/main.o", 70 compileCommand("/project/source/main.d"), 71 Target("/project/source/main.d")), 72 Target("project/__/__/common/source/foo.o", 73 compileCommand("/project/../../common/source/foo.d"), 74 Target("/project/../../common/source/foo.d")), 75 Target("project/__/__/common/source/bar.o", 76 compileCommand("/project/../../common/source/bar.d"), 77 Target("/project/../../common/source/bar.d")), 78 )); 79 } 80 81 82 void testObjectFilesEmpty() { 83 dlangObjectFilesPerPackage([]).shouldEqual([]); 84 dlangObjectFilesPerModule([]).shouldEqual([]); 85 }