1 module tests.ut.rules.dub; 2 3 4 import reggae; 5 import unit_threaded; 6 7 8 @("dubTarget with lflags") 9 unittest { 10 11 import reggae.rules.dub: dubTarget; 12 import std.typecons: Yes, No; 13 14 DubInfo dubInfo; 15 dubInfo.packages = [DubPackage()]; 16 dubInfo.packages[0].lflags = ["-L$FOO"]; 17 Target[] objects; 18 const actual = dubTarget(TargetName("app"), 19 dubInfo, 20 "-g -debug", 21 [], 22 Yes.main, 23 CompilationMode.all, 24 ); 25 const expected = Target("app", 26 Command(CommandType.link, 27 assocList([assocEntry("flags", 28 ["-m64", "-L-L$FOO"])])), 29 []); 30 actual.shouldEqual(expected); 31 } 32 33 34 35 @("dubTarget with static library source with env var in path") 36 unittest { 37 38 import reggae.rules.dub: dubTarget; 39 import reggae.config: setOptions; 40 import reggae.options: getOptions; 41 import std.typecons: Yes, No; 42 import std.algorithm: filter; 43 import std.array: split; 44 45 setOptions(getOptions(["reggae", "-b", "ninja", "/tmp/proj"])); 46 47 DubInfo dubInfo; 48 dubInfo.packages = [DubPackage()]; 49 dubInfo.packages[0].files = ["$LIB/liblua.a", "source/luad/foo.d"]; 50 dubInfo.packages[0].importPaths = ["source"]; 51 Target[] objects; 52 const actual = dubTarget(TargetName("app"), 53 dubInfo, 54 "-g -debug", 55 [], 56 Yes.main, 57 CompilationMode.options, 58 ); 59 60 string[] empty; 61 62 auto compileTarget = Target("source/luad.o", 63 Command(CommandType.compile, 64 assocList( 65 [ 66 assocEntry("includes", ["-I/tmp/proj", "-Isource"]), 67 assocEntry("flags", ["-m64", "-g", "-debug"]), 68 assocEntry("stringImports", empty), 69 assocEntry("DEPFILE", ["source/luad.o.dep"]) 70 ])), 71 [Target("source/luad/foo.d")], 72 ); 73 74 const expected = Target("app", 75 Command(CommandType.link, 76 assocList([assocEntry("flags", 77 ["-m64"])])), 78 [compileTarget, Target("$LIB/liblua.a")]); 79 80 actual.shouldEqual(expected); 81 Options options; 82 options.dCompiler = "dmd"; 83 options.projectPath = "/proj"; 84 actual.shellCommand(options).split(" ").filter!(a => a != ""). 85 shouldEqual(["dmd", "-ofapp", "-m64", "source/luad.o", "$LIB/liblua.a"]); 86 } 87 88 89 @("static library dubConfigurationTarget") 90 unittest { 91 auto oldOptions = options; 92 scope(exit) setOptions(oldOptions); 93 94 auto newOptions = oldOptions.dup; 95 newOptions.perModule = false; 96 newOptions.projectPath = "/leproj"; 97 setOptions(newOptions); 98 99 auto dubInfo = DubInfo([DubPackage("myapp", "/path/myapp")]); 100 dubInfo.packages[0].files = ["src/file1.d", "src/file2.d"]; 101 dubInfo.packages[0].targetType = TargetType.library; 102 103 string[] empty; 104 const expected = Target("$builddir/libfoo.a", 105 Command("ar rcs $out $in"), 106 [Target("path/myapp/src.o", 107 Command(CommandType.compile, 108 assocList([ 109 assocEntry("includes", ["-I/leproj"]), 110 assocEntry("flags", ["-m64", "-g"]), 111 assocEntry("stringImports", empty), 112 assocEntry("DEPFILE", ["path/myapp/src.o.dep"]), 113 ])), 114 [Target("/path/myapp/src/file1.d"), Target("/path/myapp/src/file2.d")])]); 115 dubTarget(TargetName("libfoo.a"), dubInfo, "-g").shouldEqual(expected); 116 } 117 118 119 @("object files as dub srcFiles") 120 unittest { 121 auto oldOptions = options; 122 scope(exit) setOptions(oldOptions); 123 124 auto newOptions = oldOptions.dup; 125 newOptions.perModule = false; 126 newOptions.projectPath = "/leproj"; 127 setOptions(newOptions); 128 129 auto dubInfo = DubInfo([DubPackage("myapp", "/path/myapp")]); 130 dubInfo.packages[0].files = ["src/file1.d", "src/file2.d", "bin/dep.o"]; 131 132 string[] empty; 133 const expected = Target("libfoo.a", 134 Command(CommandType.link, assocList([assocEntry("flags", ["-m64"])])), 135 [ 136 Target("path/myapp/src.o", 137 Command(CommandType.compile, 138 assocList([ 139 assocEntry("includes", ["-I/leproj"]), 140 assocEntry("flags", ["-m64", "-g"]), 141 assocEntry("stringImports", empty), 142 assocEntry("DEPFILE", ["path/myapp/src.o.dep"]), 143 ])), 144 [Target("/path/myapp/src/file1.d"), Target("/path/myapp/src/file2.d")]), 145 146 Target("/path/myapp/bin/dep.o"), 147 ]); 148 dubTarget(TargetName("libfoo.a"), dubInfo, "-g").shouldEqual(expected); 149 }