Skip to content

Commit

Permalink
test-web: Utilize new LibTest types from test-web
Browse files Browse the repository at this point in the history
test-web has alot of similar code to test-js, so
re-use some of the types we already pulled out
into LibTest.
  • Loading branch information
bgianfo authored and awesomekling committed Mar 1, 2021
1 parent 0a49877 commit e60d394
Showing 1 changed file with 22 additions and 41 deletions.
63 changes: 22 additions & 41 deletions Userland/Utilities/test-web.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@
#include <LibJS/Parser.h>
#include <LibJS/Runtime/Array.h>
#include <LibJS/Runtime/JSONObject.h>
#include <LibTest/Results.h>
#include <LibWeb/HTML/Parser/HTMLDocumentParser.h>
#include <LibWeb/InProcessWebView.h>
#include <LibWeb/Loader/ResourceLoader.h>
Expand All @@ -49,26 +50,6 @@

#define TOP_LEVEL_TEST_NAME "__$$TOP_LEVEL$$__"

enum class TestResult {
Pass,
Fail,
Skip,
};

struct JSTest {
String name;
TestResult result;
String details;
};

struct JSSuite {
String name;
// A failed test takes precedence over a skipped test, which both have
// precedence over a passed test
TestResult most_severe_test_result { TestResult::Pass };
Vector<JSTest> tests {};
};

struct ParserError {
JS::Parser::Error error;
String hint;
Expand All @@ -80,8 +61,8 @@ struct JSFileResult {
double time_taken { 0 };
// A failed test takes precedence over a skipped test, which both have
// precedence over a passed test
TestResult most_severe_test_result { TestResult::Pass };
Vector<JSSuite> suites {};
Test::Result most_severe_test_result { Test::Result::Pass };
Vector<Test::Suite> suites {};
Vector<String> logged_messages {};
};

Expand Down Expand Up @@ -394,12 +375,12 @@ JSFileResult TestRunner::run_file_test(const String& test_path)
}

test_json.value().as_object().for_each_member([&](const String& suite_name, const JsonValue& suite_value) {
JSSuite suite { suite_name };
Test::Suite suite { suite_name };

VERIFY(suite_value.is_object());

suite_value.as_object().for_each_member([&](const String& test_name, const JsonValue& test_value) {
JSTest test { test_name, TestResult::Fail, "" };
Test::Case test { test_name, Test::Result::Fail, "" };

VERIFY(test_value.is_object());
VERIFY(test_value.as_object().has("result"));
Expand All @@ -408,32 +389,32 @@ JSFileResult TestRunner::run_file_test(const String& test_path)
VERIFY(result.is_string());
auto result_string = result.as_string();
if (result_string == "pass") {
test.result = TestResult::Pass;
test.result = Test::Result::Pass;
m_counts.tests_passed++;
} else if (result_string == "fail") {
test.result = TestResult::Fail;
test.result = Test::Result::Fail;
m_counts.tests_failed++;
suite.most_severe_test_result = TestResult::Fail;
suite.most_severe_test_result = Test::Result::Fail;
VERIFY(test_value.as_object().has("details"));
auto details = test_value.as_object().get("details");
VERIFY(result.is_string());
test.details = details.as_string();
} else {
test.result = TestResult::Skip;
if (suite.most_severe_test_result == TestResult::Pass)
suite.most_severe_test_result = TestResult::Skip;
test.result = Test::Result::Skip;
if (suite.most_severe_test_result == Test::Result::Pass)
suite.most_severe_test_result = Test::Result::Skip;
m_counts.tests_skipped++;
}

suite.tests.append(test);
});

if (suite.most_severe_test_result == TestResult::Fail) {
if (suite.most_severe_test_result == Test::Result::Fail) {
m_counts.suites_failed++;
file_result.most_severe_test_result = TestResult::Fail;
file_result.most_severe_test_result = Test::Result::Fail;
} else {
if (suite.most_severe_test_result == TestResult::Skip && file_result.most_severe_test_result == TestResult::Pass)
file_result.most_severe_test_result = TestResult::Skip;
if (suite.most_severe_test_result == Test::Result::Skip && file_result.most_severe_test_result == Test::Result::Pass)
file_result.most_severe_test_result = Test::Result::Skip;
m_counts.suites_passed++;
}

Expand Down Expand Up @@ -500,12 +481,12 @@ static void print_modifiers(Vector<Modifier> modifiers)

void TestRunner::print_file_result(const JSFileResult& file_result) const
{
if (file_result.most_severe_test_result == TestResult::Fail || file_result.error.has_value()) {
if (file_result.most_severe_test_result == Test::Result::Fail || file_result.error.has_value()) {
print_modifiers({ BG_RED, FG_BLACK, FG_BOLD });
printf(" FAIL ");
print_modifiers({ CLEAR });
} else {
if (m_print_times || file_result.most_severe_test_result != TestResult::Pass) {
if (m_print_times || file_result.most_severe_test_result != Test::Result::Pass) {
print_modifiers({ BG_GREEN, FG_BLACK, FG_BOLD });
printf(" PASS ");
print_modifiers({ CLEAR });
Expand Down Expand Up @@ -561,12 +542,12 @@ void TestRunner::print_file_result(const JSFileResult& file_result) const
return;
}

if (file_result.most_severe_test_result != TestResult::Pass) {
if (file_result.most_severe_test_result != Test::Result::Pass) {
for (auto& suite : file_result.suites) {
if (suite.most_severe_test_result == TestResult::Pass)
if (suite.most_severe_test_result == Test::Result::Pass)
continue;

bool failed = suite.most_severe_test_result == TestResult::Fail;
bool failed = suite.most_severe_test_result == Test::Result::Fail;

print_modifiers({ FG_GRAY, FG_BOLD });

Expand Down Expand Up @@ -596,12 +577,12 @@ void TestRunner::print_file_result(const JSFileResult& file_result) const
print_modifiers({ CLEAR });

for (auto& test : suite.tests) {
if (test.result == TestResult::Pass)
if (test.result == Test::Result::Pass)
continue;

print_modifiers({ FG_GRAY, FG_BOLD });
printf(" Test: ");
if (test.result == TestResult::Fail) {
if (test.result == Test::Result::Fail) {
print_modifiers({ CLEAR, FG_RED });
printf("%s (failed):\n", test.name.characters());
printf(" %s\n", test.details.characters());
Expand Down

0 comments on commit e60d394

Please sign in to comment.