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 }