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; 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; 63 ["cat", "out.c"].shouldExecuteOk; 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", "targetName": "foo"}, 85 { "name": "unittest", "targetName": "ut"} 86 ] 87 }`); 88 89 writeFile("reggaefile.d", q{ 90 import reggae; 91 alias ut = dubConfigurationTarget!(Configuration(`unittest`), 92 CompilerFlags(`-g -debug -cov`)); 93 mixin build!ut; 94 }); 95 96 mkdir(buildPath(testPath, "source")); 97 writeFile(buildPath("source", "src.d"), q{ 98 unittest { static assert(false, `oopsie`); } 99 int add(int i, int j) { return i + j; } 100 }); 101 102 writeFile(buildPath("source", "main.d"), q{ 103 import src; 104 void main() {} 105 }); 106 107 runReggae("-b", "ninja"); 108 ninja.shouldFailToExecute(testPath); 109 } 110 }