1 module tests.it.buildgen.multiple_outputs; 2 3 import tests.it.buildgen; 4 import std.path: buildPath; 5 6 enum project = "multiple_outputs"; 7 8 9 private void doBuild(string module_)(in string reggaefileName, ref Options options) { 10 import tests.utils; 11 import std.file: remove, rename; 12 13 prepareTestBuild!module_(options); 14 15 const testPath = options.workingDir; 16 remove(buildPath(testPath, "protocol.d")); 17 rename(buildPath(testPath, reggaefileName), buildPath(testPath, "reggaefile.d")); 18 ["dmd", buildPath(testPath, "compiler.d")].shouldExecuteOk(WorkDir(testPath)); 19 ["dmd", buildPath(testPath, "translator.d")].shouldExecuteOk(WorkDir(testPath)); 20 21 justDoTestBuild!module_(options); 22 } 23 24 25 @("separate") 26 @AutoTags 27 @Values("ninja", "make", "binary") 28 @Tags("travis_oops") 29 unittest { 30 auto options = _testProjectOptions(project); 31 32 enum module_ = "multiple_outputs.reggaefile_sep"; 33 doBuild!module_("reggaefile_sep.d", options); 34 35 ["app", "2"].shouldSucceed.shouldEqual(["I call protoFunc(2) and get 4"]); 36 37 overwrite(options, "protocol.proto", "int protoFunc(int n) { return n * 3; }"); 38 buildCmdShouldRunOk!module_(options); 39 40 ["app", "3"].shouldSucceed.shouldEqual(["I call protoFunc(3) and get 9"]); 41 } 42 43 44 @("together") 45 @AutoTags 46 @Values("ninja", "make", "binary") 47 @Tags("travis_oops") 48 unittest { 49 auto options = _testProjectOptions(project); 50 51 enum module_ = "multiple_outputs.reggaefile_tog"; 52 doBuild!module_("reggaefile_tog.d", options); 53 54 ["app", "2"].shouldSucceed.shouldEqual(["I call protoFunc(2) and get 4"]); 55 56 overwrite(options, "protocol.proto", "int protoFunc(int n) { return n * 3; }"); 57 buildCmdShouldRunOk!module_(options); 58 59 ["app", "3"].shouldSucceed.shouldEqual(["I call protoFunc(3) and get 9"]); 60 }