line |
true |
false |
branch |
32
|
0 |
0 |
if (result.isOk()) printIssue(" # TODO"); |
|
0 |
0 |
if (result.isOk()) printIssue(" # TODO"); |
|
0 |
0 |
if (result.isOk()) printIssue(" # TODO"); |
36
|
0 |
0 |
printIssue("unexpected exception "); |
|
0 |
0 |
printIssue("unexpected exception "); |
41
|
0 |
0 |
printIssue("fatal error condition with message:"); |
|
0 |
0 |
printIssue("fatal error condition with message:"); |
47
|
0 |
0 |
printIssue("expected exception, got none"); |
|
0 |
0 |
printIssue("expected exception, got none"); |
62
|
0 |
0 |
printIssue("explicitly"); |
|
0 |
0 |
printIssue("explicitly"); |
77
|
3 |
132 |
while (pos < expr.length()) { |
88
|
0 |
0 |
if (!result.hasExpression()) return; |
94
|
50 |
0 |
if (result.hasExpression()) stream << " " << result.getExpression(); |
|
50 |
0 |
if (result.hasExpression()) stream << " " << result.getExpression(); |
|
50 |
0 |
if (result.hasExpression()) stream << " " << result.getExpression(); |
98
|
50 |
0 |
if (!result.hasExpandedExpression()) return; |
|
17 |
33 |
if (!result.hasExpandedExpression()) return; |
99
|
33 |
0 |
stream << " for: "; |
100
|
33 |
0 |
string expr = result.getExpandedExpression(); |
102
|
33 |
0 |
expr_replace(expr, "\"\r\n==\r\n\"", "\" == \""); |
|
33 |
0 |
expr_replace(expr, "\"\r\n==\r\n\"", "\" == \""); |
|
33 |
0 |
expr_replace(expr, "\"\r\n==\r\n\"", "\" == \""); |
103
|
33 |
0 |
expr_replace(expr, "\"\n==\n\"", "\" == \""); |
|
33 |
0 |
expr_replace(expr, "\"\n==\n\"", "\" == \""); |
|
33 |
0 |
expr_replace(expr, "\"\n==\n\"", "\" == \""); |
105
|
33 |
0 |
expr_replace(expr, "\r", "\\r"); |
|
33 |
0 |
expr_replace(expr, "\r", "\\r"); |
|
33 |
0 |
expr_replace(expr, "\r", "\\r"); |
106
|
33 |
0 |
expr_replace(expr, "\n", "\\n"); |
|
33 |
0 |
expr_replace(expr, "\n", "\\n"); |
|
33 |
0 |
expr_replace(expr, "\n", "\\n"); |
107
|
33 |
0 |
stream << expr; |
111
|
0 |
0 |
if (itMessage != messages.end()) { |
118
|
50 |
0 |
if (itMessage == messages.cend()) return; |
122
|
0 |
0 |
const size_t N = static_cast(std::distance(itMessage, itEnd)); |
124
|
0 |
0 |
stream << " with " << pluralise( N, "message" ) << ":"; |
|
0 |
0 |
stream << " with " << pluralise( N, "message" ) << ":"; |
|
0 |
0 |
stream << " with " << pluralise( N, "message" ) << ":"; |
126
|
0 |
0 |
for (; itMessage != itEnd; ++itMessage) { |
128
|
0 |
0 |
if (itMessage->type != ResultWas::Info) { |
129
|
0 |
0 |
stream << "\n# " << itMessage->message; |
|
0 |
0 |
stream << "\n# " << itMessage->message; |
141
|
0 |
5 |
struct PerlReporter : StreamingReporterBase { |
142
|
5 |
0 |
struct Scope { |
151
|
0 |
0 |
static string getDescription () { return "Reports test results in perl test-harness compatible format"; } |
181
|
0 |
13 |
if (fatal) { |
189
|
21 |
22 |
if (sliding_scope && sliding_scope->name == info.name) { |
|
12 |
9 |
if (sliding_scope && sliding_scope->name == info.name) { |
|
12 |
31 |
if (sliding_scope && sliding_scope->name == info.name) { |
198
|
31 |
0 |
startLine(); |
199
|
18 |
13 |
auto fullname = scope->fullname.length() ? (scope->fullname + " / " + info.name) : info.name; |
|
18 |
0 |
auto fullname = scope->fullname.length() ? (scope->fullname + " / " + info.name) : info.name; |
|
18 |
0 |
auto fullname = scope->fullname.length() ? (scope->fullname + " / " + info.name) : info.name; |
|
13 |
0 |
auto fullname = scope->fullname.length() ? (scope->fullname + " / " + info.name) : info.name; |
|
18 |
13 |
auto fullname = scope->fullname.length() ? (scope->fullname + " / " + info.name) : info.name; |
|
0 |
0 |
auto fullname = scope->fullname.length() ? (scope->fullname + " / " + info.name) : info.name; |
200
|
31 |
0 |
m_stream << "# Subtest: " << fullname << endl; |
|
31 |
0 |
m_stream << "# Subtest: " << fullname << endl; |
|
31 |
0 |
m_stream << "# Subtest: " << fullname << endl; |
201
|
31 |
0 |
scopes.push_back({0, 0, scope->depth + 1, info.name, fullname}); |
|
31 |
0 |
scopes.push_back({0, 0, scope->depth + 1, info.name, fullname}); |
|
31 |
0 |
scopes.push_back({0, 0, scope->depth + 1, info.name, fullname}); |
206
|
0 |
43 |
if (fatal) return; |
207
|
22 |
21 |
if (!sliding_scope) sliding_scope = scope + 1; |
209
|
22 |
21 |
if (sliding_scope == &scopes[1]) commitAssertions(); |
213
|
22 |
22 |
if (!sliding_scope) return; |
215
|
31 |
22 |
while (cnt--) closeCurrentScope(); |
220
|
31 |
0 |
auto name = scope->fullname; |
222
|
31 |
0 |
startLine() << "1.." << scope->count << endl; |
|
31 |
0 |
startLine() << "1.." << scope->count << endl; |
|
31 |
0 |
startLine() << "1.." << scope->count << endl; |
|
31 |
0 |
startLine() << "1.." << scope->count << endl; |
223
|
0 |
31 |
if (scope->failed) { |
224
|
0 |
0 |
startErrorLine() << "# Looks like you failed " << scope->failed << " test of " << scope->count << " at [" << name << "]." << endl; |
|
0 |
0 |
startErrorLine() << "# Looks like you failed " << scope->failed << " test of " << scope->count << " at [" << name << "]." << endl; |
|
0 |
0 |
startErrorLine() << "# Looks like you failed " << scope->failed << " test of " << scope->count << " at [" << name << "]." << endl; |
|
0 |
0 |
startErrorLine() << "# Looks like you failed " << scope->failed << " test of " << scope->count << " at [" << name << "]." << endl; |
|
0 |
0 |
startErrorLine() << "# Looks like you failed " << scope->failed << " test of " << scope->count << " at [" << name << "]." << endl; |
|
0 |
0 |
startErrorLine() << "# Looks like you failed " << scope->failed << " test of " << scope->count << " at [" << name << "]." << endl; |
|
0 |
0 |
startErrorLine() << "# Looks like you failed " << scope->failed << " test of " << scope->count << " at [" << name << "]." << endl; |
|
0 |
0 |
startErrorLine() << "# Looks like you failed " << scope->failed << " test of " << scope->count << " at [" << name << "]." << endl; |
|
0 |
0 |
startErrorLine() << "# Looks like you failed " << scope->failed << " test of " << scope->count << " at [" << name << "]." << endl; |
228
|
0 |
31 |
if (scopes.empty()) throw "WTF?"; |
232
|
31 |
0 |
startLine(); |
233
|
0 |
31 |
if (failed) { |
235
|
0 |
0 |
m_stream << "not ok"; |
237
|
31 |
0 |
else m_stream << "ok"; |
238
|
31 |
0 |
m_stream << " " << scope->count << " - [" << name << "]" << endl; |
|
31 |
0 |
m_stream << " " << scope->count << " - [" << name << "]" << endl; |
|
31 |
0 |
m_stream << " " << scope->count << " - [" << name << "]" << endl; |
|
31 |
0 |
m_stream << " " << scope->count << " - [" << name << "]" << endl; |
|
31 |
0 |
m_stream << " " << scope->count << " - [" << name << "]" << endl; |
|
31 |
0 |
m_stream << " " << scope->count << " - [" << name << "]" << endl; |
242
|
353 |
143 |
for (size_t i = 0; i < scope->depth; ++i) m_stream << " "; |
247
|
0 |
0 |
for (size_t i = 0; i < scope->depth; ++i) std::cerr << " "; |
254
|
50 |
0 |
ostringstream s; |
255
|
50 |
0 |
Printer(s, stats).print(); |
|
50 |
0 |
Printer(s, stats).print(); |
256
|
50 |
0 |
assertions.push_back({stats, s.str()}); |
|
50 |
0 |
assertions.push_back({stats, s.str()}); |
|
50 |
0 |
assertions.push_back({stats, s.str()}); |
260
|
50 |
22 |
for (auto& row : assertions) { |
262
|
50 |
0 |
auto result = stats.assertionResult; |
264
|
50 |
0 |
bool is_test = result.getResultType() != ResultWas::Info && result.getResultType() != ResultWas::Warning; |
|
50 |
0 |
bool is_test = result.getResultType() != ResultWas::Info && result.getResultType() != ResultWas::Warning; |
|
50 |
0 |
bool is_test = result.getResultType() != ResultWas::Info && result.getResultType() != ResultWas::Warning; |
|
50 |
0 |
bool is_test = result.getResultType() != ResultWas::Info && result.getResultType() != ResultWas::Warning; |
267
|
50 |
0 |
ostream& ss = result.succeeded() ? startLine() : startErrorLine(); |
|
50 |
0 |
ostream& ss = result.succeeded() ? startLine() : startErrorLine(); |
|
50 |
0 |
ostream& ss = result.succeeded() ? startLine() : startErrorLine(); |
|
0 |
0 |
ostream& ss = result.succeeded() ? startLine() : startErrorLine(); |
269
|
50 |
0 |
if (is_test) { |
271
|
50 |
0 |
if (result.succeeded()) { |
|
50 |
0 |
if (result.succeeded()) { |
272
|
50 |
0 |
ss << "ok"; |
275
|
0 |
0 |
ss << "not ok"; |
278
|
50 |
0 |
ss << " " << scope->count << " -"; |
|
50 |
0 |
ss << " " << scope->count << " -"; |
|
50 |
0 |
ss << " " << scope->count << " -"; |
282
|
50 |
0 |
Colour cg(color); (void)cg; |
283
|
50 |
0 |
ss << row.expr; |
284
|
50 |
0 |
ss << " # at " << result.getSourceInfo(); |
|
50 |
0 |
ss << " # at " << result.getSourceInfo(); |
|
50 |
0 |
ss << " # at " << result.getSourceInfo(); |
287
|
50 |
0 |
ss << endl; |
289
|
50 |
0 |
if (is_test && !result.succeeded()) { |
|
50 |
0 |
if (is_test && !result.succeeded()) { |
|
0 |
50 |
if (is_test && !result.succeeded()) { |
|
0 |
50 |
if (is_test && !result.succeeded()) { |
290
|
0 |
0 |
startErrorLine() << "#\e[1;31m Failed test in section [" << scope->fullname << "] at " << result.getSourceInfo() << "\e[0m" << endl; |
|
0 |
0 |
startErrorLine() << "#\e[1;31m Failed test in section [" << scope->fullname << "] at " << result.getSourceInfo() << "\e[0m" << endl; |
|
0 |
0 |
startErrorLine() << "#\e[1;31m Failed test in section [" << scope->fullname << "] at " << result.getSourceInfo() << "\e[0m" << endl; |
|
0 |
0 |
startErrorLine() << "#\e[1;31m Failed test in section [" << scope->fullname << "] at " << result.getSourceInfo() << "\e[0m" << endl; |
|
0 |
0 |
startErrorLine() << "#\e[1;31m Failed test in section [" << scope->fullname << "] at " << result.getSourceInfo() << "\e[0m" << endl; |
|
0 |
0 |
startErrorLine() << "#\e[1;31m Failed test in section [" << scope->fullname << "] at " << result.getSourceInfo() << "\e[0m" << endl; |
|
0 |
0 |
startErrorLine() << "#\e[1;31m Failed test in section [" << scope->fullname << "] at " << result.getSourceInfo() << "\e[0m" << endl; |
|
0 |
0 |
startErrorLine() << "#\e[1;31m Failed test in section [" << scope->fullname << "] at " << result.getSourceInfo() << "\e[0m" << endl; |
304
|
0 |
0 |
if (stats.info.name.length()) ss << stats.info.name << ": "; |
305
|
0 |
0 |
ss << speed(stats.mean.point.count()) << ", " << spent(stats.mean.point.count()) << endl; |
|
0 |
0 |
ss << speed(stats.mean.point.count()) << ", " << spent(stats.mean.point.count()) << endl; |
|
0 |
0 |
ss << speed(stats.mean.point.count()) << ", " << spent(stats.mean.point.count()) << endl; |
|
0 |
0 |
ss << speed(stats.mean.point.count()) << ", " << spent(stats.mean.point.count()) << endl; |
|
0 |
0 |
ss << speed(stats.mean.point.count()) << ", " << spent(stats.mean.point.count()) << endl; |
328
|
0 |
0 |
if (ns < usec) { val = ns; units = "ns"; } |
329
|
0 |
0 |
else if (ns < msec) { val = ns / usec; units = "us"; } |
330
|
0 |
0 |
else if (ns < sec) { val = ns / static_cast(msec); units = "ms"; } |
331
|
0 |
0 |
else if (ns < min) { val = ns / static_cast(sec); units = "s"; } |
336
|
0 |
0 |
return string(buf, sz); |
342
|
0 |
0 |
if (ns < usec) { val = 1000/ns; units = "M"; } |
343
|
0 |
0 |
else if (ns < msec) { val = 1000000/ns; units = "K"; } |
348
|
0 |
0 |
return string(buf, sz); |
354
|
2 |
0 |
CATCH_REGISTER_REPORTER("perl", PerlReporter); |
|
2 |
0 |
CATCH_REGISTER_REPORTER("perl", PerlReporter); |
362
|
5 |
0 |
std::vector argv = {"test"}; |
364
|
4 |
5 |
for (int i = 3; i < items; ++i) { |
366
|
0 |
4 |
if (!SvOK(arg)) continue; |
|
0 |
0 |
if (!SvOK(arg)) continue; |
|
0 |
0 |
if (!SvOK(arg)) continue; |
367
|
4 |
0 |
argv.push_back(SvPV_nolen(arg)); |
|
0 |
0 |
argv.push_back(SvPV_nolen(arg)); |
|
4 |
0 |
argv.push_back(SvPV_nolen(arg)); |
370
|
5 |
0 |
argv.push_back("-i"); |
371
|
5 |
0 |
argv.push_back("-r"); |
372
|
5 |
0 |
argv.push_back("perl"); |
374
|
5 |
0 |
session.useConfigData({}); |
|
5 |
0 |
session.useConfigData({}); |
375
|
5 |
0 |
err = session.applyCommandLine(argv.size(), argv.data()); |
377
|
0 |
5 |
if (err) croak("session.applyCommandLine: error %d", err); |
379
|
0 |
5 |
PerlReporter::context.count = SvUV(count); |
|
5 |
0 |
PerlReporter::context.count = SvUV(count); |
380
|
0 |
5 |
PerlReporter::context.failed = SvUV(failed); |
|
5 |
0 |
PerlReporter::context.failed = SvUV(failed); |
383
|
5 |
0 |
RETVAL = session.run() == 0; |
385
|
5 |
0 |
sv_setuv(count, PerlReporter::context.count); |
386
|
5 |
0 |
sv_setuv(failed, PerlReporter::context.failed); |