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(objectFile("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 ["DEPFILE = $out.dep"])]); 15 } 16 17 18 void testDCompileIncludePathsNinja() { 19 const build = Build(objectFile("path/to/src/foo.d", "-O", ["path/to/src", "other/path"])); 20 const ninja = Ninja(build, "/tmp/myproject"); 21 ninja.buildEntries.shouldEqual( 22 [NinjaEntry("build path/to/src/foo.o: _dcompile /tmp/myproject/path/to/src/foo.d", 23 ["includes = -I/tmp/myproject/path/to/src -I/tmp/myproject/other/path", 24 "flags = -O", 25 "DEPFILE = $out.dep"])]); 26 } 27 28 void testDCompileIncludePathsMake() { 29 const build = Build(objectFile("path/to/src/foo.d", "-O", ["path/to/src", "other/path"])); 30 build.targets[0].shellCommand("/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"); 31 } 32 33 34 void testDLinkNinja() { 35 const build = Build(link("bin/lefoo", [Target("leobj.o")], "-lib")); 36 const ninja = Ninja(build, "/dir/stuff"); 37 ninja.buildEntries.shouldEqual( 38 [NinjaEntry("build bin/lefoo: _link /dir/stuff/leobj.o", 39 ["flags = -lib"])]); 40 } 41 42 void testDCompileWithMultipleFilesMake() { 43 const build = Build(objectFilesPerPackage(["path/to/src/foo.d", "path/to/src/bar.d", "other/weird.d"], 44 "-O", ["path/to/src", "other/path"])); 45 const make = Makefile(build, "/tmp/myproject"); 46 47 build.targets[0].shellCommand("/tmp/myproject").shouldEqual(".reggae/dcompile --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"); 48 49 build.targets[1].shellCommand("/tmp/myproject").shouldEqual(".reggae/dcompile --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"); 50 51 } 52 53 void testDCompileWithMultipleFilesNinja() { 54 const build = Build(objectFilesPerPackage(["path/to/src/foo.d", "path/to/src/bar.d", "other/weird.d"], 55 "-O", ["path/to/src", "other/path"])); 56 const ninja = Ninja(build, "/tmp/myproject"); 57 58 ninja.buildEntries.shouldEqual( 59 [ 60 61 NinjaEntry("build other.o: _dcompile /tmp/myproject/other/weird.d", 62 ["includes = -I/tmp/myproject/path/to/src -I/tmp/myproject/other/path", 63 "flags = -O", 64 "DEPFILE = $out.dep"]), 65 66 NinjaEntry("build path/to/src.o: _dcompile /tmp/myproject/path/to/src/foo.d /tmp/myproject/path/to/src/bar.d", 67 ["includes = -I/tmp/myproject/path/to/src -I/tmp/myproject/other/path", 68 "flags = -O", 69 "DEPFILE = $out.dep"]), 70 71 ]); 72 } 73 74 75 void testLink() { 76 const target = link("myapp", [Target("foo.o"), Target("bar.o")], "-L-L"); 77 target.shellCommand("/path/to").shouldEqual("dmd -ofmyapp -L-L /path/to/foo.o /path/to/bar.o"); 78 } 79 80 81 void testObjectFilesEmpty() { 82 objectFilesPerPackage([]).shouldEqual([]); 83 objectFilesPerModule([]).shouldEqual([]); 84 }