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 @("dlangPackageObjectFilesPerPackage") 43 unittest { 44 auto build = Build(dlangPackageObjectFilesPerPackage(["path/to/src/foo.d", 45 "path/to/src/bar.d", 46 "other/weird.d"], 47 "-O", ["path/to/src", "other/path"])); 48 build.shouldEqual(Build(Target("path/to/src.o", 49 compileCommand("path/to/src.d", 50 "-O", 51 ["path/to/src", "other/path"]), 52 [Target("path/to/src/foo.d"), Target("path/to/src/bar.d")]), 53 Target("other.o", 54 compileCommand("other.d", 55 "-O", 56 ["path/to/src", "other/path"]), 57 [Target("other/weird.d")]), 58 )); 59 } 60 61 @("dlangPackageObjectFilesPerPackage ..") 62 unittest { 63 auto build = Build(dlangPackageObjectFilesPerModule(["/project/source/main.d", 64 "/project/../../common/source/foo.d", 65 "/project/../../common/source/bar.d", 66 ])); 67 build.shouldEqual(Build(Target("project/source/main.o", 68 compileCommand("/project/source/main.d"), 69 Target("/project/source/main.d")), 70 Target("project/__/__/common/source/foo.o", 71 compileCommand("/project/../../common/source/foo.d"), 72 Target("/project/../../common/source/foo.d")), 73 Target("project/__/__/common/source/bar.o", 74 compileCommand("/project/../../common/source/bar.d"), 75 Target("/project/../../common/source/bar.d")), 76 )); 77 } 78 79 80 void testObjectFilesEmpty() { 81 dlangPackageObjectFilesPerPackage([]).shouldEqual([]); 82 dlangPackageObjectFilesPerModule([]).shouldEqual([]); 83 }