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!()(ExeName("app"), 19 dubInfo, 20 "-g -debug", 21 Yes.main, 22 No.allTogether, 23 ); 24 const expected = Target("app", 25 Command(CommandType.link, 26 assocList([assocEntry("flags", 27 ["-L-L$FOO"])])), 28 []); 29 actual.shouldEqual(expected); 30 } 31 32 33 34 @("dubTarget with static library source with env var in path") 35 unittest { 36 37 import reggae.rules.dub: dubTarget; 38 import reggae.config: setOptions; 39 import reggae.options: getOptions; 40 import std.typecons: Yes, No; 41 import std.algorithm: filter; 42 import std.array: split; 43 44 setOptions(getOptions(["reggae", "/tmp/proj"])); 45 46 DubInfo dubInfo; 47 dubInfo.packages = [DubPackage()]; 48 dubInfo.packages[0].files = ["$LIB/liblua.a", "source/luad/foo.d"]; 49 dubInfo.packages[0].importPaths = ["source"]; 50 Target[] objects; 51 const actual = dubTarget!()(ExeName("app"), 52 dubInfo, 53 "-g -debug", 54 Yes.main, 55 No.allTogether, 56 ); 57 58 string[] empty; 59 60 auto compileTarget = Target("source/luad.o", 61 Command(CommandType.compile, 62 assocList( 63 [ 64 assocEntry("includes", ["-Isource", "-I/tmp/proj"]), 65 assocEntry("flags", ["-g", "-debug"]), 66 assocEntry("stringImports", empty), 67 assocEntry("DEPFILE", ["source/luad.o.dep"]) 68 ])), 69 [Target("source/luad/foo.d")], 70 ); 71 72 const expected = Target("app", 73 Command(CommandType.link, 74 assocList([assocEntry("flags", 75 empty)])), 76 [compileTarget, Target("$LIB/liblua.a")]); 77 78 actual.shouldEqual(expected); 79 Options options; 80 options.dCompiler = "dmd"; 81 options.projectPath = "/proj"; 82 actual.shellCommand(options).split(" ").filter!(a => a != ""). 83 shouldEqual(["dmd", "-ofapp", "source/luad.o", "$LIB/liblua.a"]); 84 } 85 86 //FIXME: includes should not have all of them 87 @("versions from main package apply to all packages") 88 unittest { 89 90 import reggae.rules.dub: dubTarget; 91 import reggae.config: options, setOptions; 92 import std.typecons: Yes, No; 93 94 auto oldOptions = options; 95 scope(exit) setOptions(oldOptions); 96 auto newOptions = oldOptions.dup; 97 newOptions.perModule = true; 98 newOptions.projectPath = "/leproj"; 99 setOptions(newOptions); 100 101 102 DubInfo dubInfo; 103 dubInfo.packages = [DubPackage("myapp", "/path/myapp"), DubPackage("dep", "/path/dep")]; 104 dubInfo.packages[0].files = ["src/file1.d", "src/file2.d"]; 105 dubInfo.packages[0].importPaths = ["/path/myapp/src"]; 106 dubInfo.packages[0].versions = ["foo", "bar"]; 107 dubInfo.packages[0].dependencies = ["dep"]; 108 dubInfo.packages[1].files = ["source/dep1.d", "source/dep2.d"]; 109 dubInfo.packages[1].importPaths = ["/path/dep/source"]; 110 dubInfo.packages[1].versions = ["quux"]; 111 112 Target[] objects; 113 const actual = dubTarget!()(ExeName("app"), 114 dubInfo, 115 "-g", 116 Yes.main, 117 No.allTogether, 118 ); 119 string[] empty; 120 const expected = 121 Target("app", 122 Command(CommandType.link, 123 assocList([assocEntry("flags", 124 empty)])), 125 [ 126 Target("path/myapp/src/file1.o", 127 Command(CommandType.compile, 128 assocList([ 129 assocEntry("includes", 130 ["-I/path/myapp/src", "-I/path/dep/source", "-I/leproj"]), 131 assocEntry("flags", ["-version=foo", "-version=bar", "-version=quux", "-g"]), 132 assocEntry("stringImports", empty), 133 assocEntry("DEPFILE", ["path/myapp/src/file1.o.dep"]) 134 ])), 135 [Target("/path/myapp/src/file1.d")]), 136 137 Target("path/myapp/src/file2.o", 138 Command(CommandType.compile, 139 assocList([ 140 assocEntry("includes", 141 ["-I/path/myapp/src", "-I/path/dep/source", "-I/leproj"]), 142 assocEntry("flags", ["-version=foo", "-version=bar", "-version=quux", "-g"]), 143 assocEntry("stringImports", empty), 144 assocEntry("DEPFILE", ["path/myapp/src/file2.o.dep"]) 145 ])), 146 [Target("/path/myapp/src/file2.d")]), 147 148 Target("path/dep/source/dep1.o", 149 Command(CommandType.compile, 150 assocList([ 151 assocEntry("includes", 152 ["-I/path/myapp/src", "-I/path/dep/source", "-I/leproj"]), 153 assocEntry("flags", ["-version=foo", "-version=bar", "-version=quux", "-g"]), 154 assocEntry("stringImports", empty), 155 assocEntry("DEPFILE", ["path/dep/source/dep1.o.dep"]) 156 ])), 157 [Target("/path/dep/source/dep1.d")]), 158 159 Target("path/dep/source/dep2.o", 160 Command(CommandType.compile, 161 assocList([ 162 assocEntry("includes", 163 ["-I/path/myapp/src", "-I/path/dep/source", "-I/leproj"]), 164 assocEntry("flags", ["-version=foo", "-version=bar", "-version=quux", "-g"]), 165 assocEntry("stringImports", empty), 166 assocEntry("DEPFILE", ["path/dep/source/dep2.o.dep"]) 167 ])), 168 [Target("/path/dep/source/dep2.d")]), 169 170 ] 171 ); 172 actual.shouldEqual(expected); 173 }