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 }