1 module tests.it.runtime.regressions;
2 
3 
4 import tests.it.runtime;
5 import reggae.reggae;
6 import std.path;
7 
8 
9 @("Issue 14: builddir not expanded")
10 @Tags(["ninja", "regressions"])
11 unittest {
12 
13     with(immutable ReggaeSandbox()) {
14         writeFile("reggaefile.d", q{
15             import reggae;
16             enum ao = objectFile(SourceFile("a.c"));
17             enum liba = Target("$builddir/liba.a", "ar rcs $out $in", [ao]);
18             mixin build!(liba);
19         });
20 
21         writeFile("a.c");
22 
23         runReggae("-b", "ninja");
24         ninja.shouldExecuteOk(testPath);
25     }
26 }
27 
28 @("Issue 12: can't set executable as a dependency")
29 @Tags(["ninja", "regressions"])
30 unittest {
31 
32     with(immutable ReggaeSandbox()) {
33         writeFile("reggaefile.d", q{
34             import reggae;
35             alias app = scriptlike!(App(SourceFileName("main.d"),
36                                         BinaryFileName("$builddir/myapp")),
37                                         Flags("-g -debug"),
38                                         ImportPaths(["/path/to/imports"])
39                     );
40             alias code_gen = target!("out.c", "./myapp $in $out", target!"in.txt", app);
41             mixin build!(code_gen);
42         });
43 
44         writeFile("main.d", q{
45             import std.stdio;
46             import std.algorithm;
47             import std.conv;
48             void main(string[] args) {
49                 auto inFileName = args[1];
50                 auto outFileName = args[2];
51                 auto lines = File(inFileName).byLine.
52                     map!(a => a.to!string).
53                     map!(a => a ~ ` ` ~ a);
54                 auto outFile = File(outFileName, `w`);
55                 foreach(line; lines) outFile.writeln(line);
56             }
57         });
58 
59         writeFile("in.txt", ["foo", "bar", "baz"]);
60 
61         runReggae("-b", "ninja");
62         ninja.shouldExecuteOk(testPath);
63         ["cat", "out.c"].shouldExecuteOk(testPath);
64         shouldEqualLines("out.c",
65                          ["foo foo",
66                           "bar bar",
67                           "baz baz"]);
68     }
69 }
70 
71 
72 @("Issue 10: dubConfigurationTarget doesn't work for unittest builds")
73 @Tags(["ninja", "regressions"])
74 unittest {
75     import std.path;
76     import std.file;
77 
78     with(immutable ReggaeSandbox()) {
79 
80         writeFile("dub.json", `
81             {
82                 "name": "dubproj",
83                 "configurations": [
84                     { "name": "executable"},
85                     { "name": "unittest"}
86               ]
87             }`);
88 
89         writeFile("reggaefile.d", q{
90             import reggae;
91             alias ut = dubConfigurationTarget!(TargetName(`ut`),
92                                                Configuration(`unittest`),
93                                                Flags(`-g -debug -cov`));
94             mixin build!ut;
95         });
96 
97         mkdir(buildPath(testPath, "source"));
98         writeFile(buildPath("source", "src.d"), q{
99             unittest { static assert(false, `oopsie`); }
100             int add(int i, int j) { return i + j; }
101         });
102 
103         writeFile(buildPath("source", "main.d"), q{
104             import src;
105             void main() {}
106         });
107 
108         runReggae("-b", "ninja");
109         ninja.shouldFailToExecute(testPath);
110     }
111 }