diff --git a/site/tests/cli_runner.uce b/site/tests/cli_runner.uce
index 247ee79..31b0119 100644
--- a/site/tests/cli_runner.uce
+++ b/site/tests/cli_runner.uce
@@ -260,6 +260,16 @@ void cli_run_http_smoke()
cli_expect_http("uce_http_smoke:configurable error page 500 + error info", "/demo/error-reporting.uce?mode=trap", 500, "mode=trap");
}
+bool cli_site_body_reports_failure(String lower)
+{
+ if(cli_contains(lower, "status-badge status-error\">fail"))
+ return(true);
+ for(String digit : split("1 2 3 4 5 6 7 8 9", " "))
+ if(cli_contains(lower, ">failed " + digit))
+ return(true);
+ return(false);
+}
+
void cli_run_site_suite()
{
DValue manifest;
@@ -287,13 +297,13 @@ void cli_run_site_suite()
for(String marker : { "compile error", "runtime error", "timed out acquiring compile lock", "near line" })
if(cli_contains(lower, marker))
ok = false;
- if(cli_contains(lower, "
") && !cli_contains(lower, ">failed 0"))
+ if(cli_contains(lower, "
") && cli_site_body_reports_failure(lower))
ok = false;
if(ok)
break;
}
String name = "uce_site_suite:site tests " + (file == "index.uce" ? "index" : file == "io.uce" ? "filesystem" : file == "websockets.ws.uce" ? "websockets page" : replace(replace(replace(file, ".uce", ""), ".ws", ""), "_", " "));
- String fail_detail = "; status=" + std::to_string(res.status) + "; expected_marker=" + (cli_contains(res.body, expected) ? "yes" : "no") + "; summary=" + (cli_contains(lower, "
") ? "yes" : "no") + "; failed_zero=" + (cli_contains(lower, ">failed 0") ? "yes" : "no") + "; body=" + cli_truncate(res.body);
+ String fail_detail = "; status=" + std::to_string(res.status) + "; expected_marker=" + (cli_contains(res.body, expected) ? "yes" : "no") + "; summary=" + (cli_contains(lower, "
") ? "yes" : "no") + "; reports_failure=" + (cli_site_body_reports_failure(lower) ? "yes" : "no") + "; body=" + cli_truncate(res.body);
cli_test_case(name, ok, (ok ? "HTTP 200 with suite page marker and no failed cases for /tests/" : "site suite failed for /tests/") + file + (ok ? "" : fail_detail));
}
}