-
-
Notifications
You must be signed in to change notification settings - Fork 228
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Attempt to replace run-unittest.sh by run-unittest.d. Inception
- Loading branch information
Showing
3 changed files
with
112 additions
and
8 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,111 @@ | ||
#!/usr/bin/env dub | ||
/+dub.sdl: | ||
name: run_unittest | ||
targetName: run-unittest | ||
+/ | ||
module run_unittest; | ||
|
||
/// Name of the log file | ||
enum logFile = "test.log"; | ||
|
||
/// has true if some test fails | ||
bool any_errors; | ||
|
||
/// prints (non error) message to standard output and log file | ||
void log(Args...)(Args args) | ||
if (Args.length) | ||
{ | ||
import std.format : format; | ||
import std.stdio : File, stdout, writeln; | ||
|
||
version(Windows) const str = format("[INFO] " ~ args[0], args[1..$]); | ||
else const str = format("\033[0;32m[INFO] " ~ args[0] ~ "\033[0m", args[1..$]).format(args[1..$]); | ||
writeln(str); | ||
stdout.flush; | ||
File(logFile, "a").writeln(str); | ||
} | ||
|
||
/// prints error message to standard error stream and log file | ||
/// and set any_errors var to true value to indicate that some | ||
/// test fails | ||
void logError(Args...)(Args args) | ||
{ | ||
import std.format : format; | ||
import std.stdio : File, stderr; | ||
|
||
version(Windows) const str = format("[ERROR] " ~ args[0], args[1..$]); | ||
else const str = format("\033[0;31m[ERROR] " ~ args[0] ~ "\033[0m", args[1..$]).format(args[1..$]); | ||
stderr.writeln(str); | ||
stderr.flush; | ||
File(logFile, "a").writeln(str); | ||
any_errors = true; | ||
} | ||
|
||
int main(string[] args) | ||
{ | ||
import std.algorithm : among; | ||
import std.file : dirEntries, DirEntry, exists, getcwd, readText, SpanMode; | ||
import std.format : format; | ||
import std.stdio : File, writeln; | ||
import std.path : absolutePath, buildNormalizedPath, baseName, dirName; | ||
import std.process : environment, spawnProcess, wait; | ||
|
||
//** if [ -z ${DUB:-} ]; then | ||
//** die $LINENO 'Variable $DUB must be defined to run the tests.' | ||
//** fi | ||
auto dub = environment.get("DUB", ""); | ||
writeln("DUB: ", dub); | ||
if (dub == "") | ||
{ | ||
logError("Environment variable `DUB` must be defined to run the tests."); | ||
return 1; | ||
} | ||
|
||
//** if [ -z ${DC:-} ]; then | ||
//** log '$DC not defined, assuming dmd...' | ||
//** DC=dmd | ||
//** fi | ||
auto dc = environment.get("DC", ""); | ||
if (dc == "") | ||
{ | ||
log("Environment variable `DC` not defined, assuming dmd..."); | ||
dc = "dmd"; | ||
} | ||
|
||
// Clear log file | ||
{ | ||
File(logFile, "w"); | ||
} | ||
|
||
//** DC_BIN=$(basename "$DC") | ||
//** CURR_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) | ||
//** FRONTEND="${FRONTEND:-}" | ||
const dc_bin = baseName(dc); | ||
const curr_dir = args[0].absolutePath.dirName.buildNormalizedPath; | ||
const frontend = environment.get("FRONTEND", ""); | ||
|
||
//** if [ "$#" -gt 0 ]; then FILTER=$1; else FILTER=".*"; fi | ||
auto filter = (args.length > 1) ? args[1] : "*"; | ||
|
||
version(linux) | ||
{ | ||
//** for script in $(ls $CURR_DIR/*.sh); do | ||
//** if [[ ! "$script" =~ $FILTER ]]; then continue; fi | ||
//** if [ "$script" = "$(gnureadlink ${BASH_SOURCE[0]})" ] || [ "$(basename $script)" = "common.sh" ]; then continue; fi | ||
//** if [ -e $script.min_frontend ] && [ ! -z "$FRONTEND" ] && [ ${FRONTEND} \< $(cat $script.min_frontend) ]; then continue; fi | ||
//** log "Running $script..." | ||
//** DUB=$DUB DC=$DC CURR_DIR="$CURR_DIR" $script || logError "Script failure." | ||
//** done | ||
foreach(DirEntry script; dirEntries(curr_dir, (args.length > 1) ? args[1] : "*.sh", SpanMode.shallow)) | ||
{ | ||
if (baseName(script.name).among("run-unittest.sh", "common.sh")) continue; | ||
const min_frontend = script.name ~ ".min_frontend"; | ||
if (exists(min_frontend) && frontend.length && frontend < min_frontend.readText) continue; | ||
log("Running " ~ script ~ "..."); | ||
if (spawnProcess(script.name, ["DUB":dub, "DC":dc, "CURR_DIR":curr_dir]).wait) | ||
logError("Script failure."); | ||
} | ||
} | ||
|
||
return any_errors; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters