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 }