1020304050607080901001101201301401501601701801902002102202302402502602702802903003103203303403503603703803904004104204304404504604704804905005105205305405505605705805906006106206306406506606706806907007107207307407507607707807908008108208308408508608708808909009109209309409509609709809901000101010201030104010501060107010801090110011101120113011401150116011701180 module trial.reporters.specsteps; import trial.interfaces; import trial.reporters.spec; import trial.reporters.writer; import trial.settings; import std.datetime; import std.conv; struct SpecStepsGlyphs { version(Windows) { string testBegin = "/"; string testEnd = "\\"; string step = "|"; } else { string testBegin = "┌"; string testEnd = "└"; string step = "│"; } } string specStepsGlyphsToCode(SpecStepsGlyphs glyphs) { return "SpecStepsGlyphs(`" ~ glyphs.testBegin ~ "`, `" ~ glyphs.testEnd ~ "`, `" ~ glyphs.step ~ "`)"; } class SpecStepsReporter : SpecReporter, ISuiteLifecycleListener, IStepLifecycleListener { private { size_t indents; size_t stepIndents; Settings settings; } this(Settings settings) { super(settings); this.settings = settings; } this(ReportWriter writer) { super(writer); } void begin(ref SuiteResult suite) { indents = printSuite(suite.name); } void end(ref SuiteResult) { } override { void begin(string suite, ref TestResult test) { stepIndents = 0; write!(Type.none)(settings.glyphs.specSteps.testBegin ~ " " ~ test.name ~ "\n", indents); } void end(string suite, ref TestResult test) { write!(Type.none)(settings.glyphs.specSteps.testEnd ~ " ", indents); if(test.status == TestResult.Status.success) { write!(Type.success)("Success", 0); } else if(test.status == TestResult.Status.failure) { write!(Type.failure)("Failure", 0); failedTests++; } else if(test.status == TestResult.Status.pending) { write!(Type.pending)("Pending", 0); } else { write!(Type.none)("Unknown", 0); } auto timeDiff = (test.end - test.begin).total!"msecs"; if(timeDiff >= settings.warningTestDuration && timeDiff < settings.dangerTestDuration) { write!(Type.warning)(" (" ~ timeDiff.to!string ~ "ms)", 0); } if(timeDiff >= settings.dangerTestDuration) { write!(Type.danger)(" (" ~ timeDiff.to!string ~ "ms)", 0); } write!(Type.none)("\n", 0); } } void begin(string suite, string test, ref StepResult s) { stepIndents++; write!(Type.none)(settings.glyphs.specSteps.step, indents); write!(Type.none)(" " ~ s.name ~ "\n", stepIndents); } void end(string suite, string test, ref StepResult) { stepIndents--; } }
module trial.reporters.specsteps; import trial.interfaces; import trial.reporters.spec; import trial.reporters.writer; import trial.settings; import std.datetime; import std.conv; struct SpecStepsGlyphs { version(Windows) { string testBegin = "/"; string testEnd = "\\"; string step = "|"; } else { string testBegin = "┌"; string testEnd = "└"; string step = "│"; } } string specStepsGlyphsToCode(SpecStepsGlyphs glyphs) { return "SpecStepsGlyphs(`" ~ glyphs.testBegin ~ "`, `" ~ glyphs.testEnd ~ "`, `" ~ glyphs.step ~ "`)"; } class SpecStepsReporter : SpecReporter, ISuiteLifecycleListener, IStepLifecycleListener { private { size_t indents; size_t stepIndents; Settings settings; } this(Settings settings) { super(settings); this.settings = settings; } this(ReportWriter writer) { super(writer); } void begin(ref SuiteResult suite) { indents = printSuite(suite.name); } void end(ref SuiteResult) { } override { void begin(string suite, ref TestResult test) { stepIndents = 0; write!(Type.none)(settings.glyphs.specSteps.testBegin ~ " " ~ test.name ~ "\n", indents); } void end(string suite, ref TestResult test) { write!(Type.none)(settings.glyphs.specSteps.testEnd ~ " ", indents); if(test.status == TestResult.Status.success) { write!(Type.success)("Success", 0); } else if(test.status == TestResult.Status.failure) { write!(Type.failure)("Failure", 0); failedTests++; } else if(test.status == TestResult.Status.pending) { write!(Type.pending)("Pending", 0); } else { write!(Type.none)("Unknown", 0); } auto timeDiff = (test.end - test.begin).total!"msecs"; if(timeDiff >= settings.warningTestDuration && timeDiff < settings.dangerTestDuration) { write!(Type.warning)(" (" ~ timeDiff.to!string ~ "ms)", 0); } if(timeDiff >= settings.dangerTestDuration) { write!(Type.danger)(" (" ~ timeDiff.to!string ~ "ms)", 0); } write!(Type.none)("\n", 0); } } void begin(string suite, string test, ref StepResult s) { stepIndents++; write!(Type.none)(settings.glyphs.specSteps.step, indents); write!(Type.none)(" " ~ s.name ~ "\n", stepIndents); } void end(string suite, string test, ref StepResult) { stepIndents--; } }