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