AK+Everywhere: Store JSON object keys as String

This commit is contained in:
Timothy Flynn 2025-02-17 12:18:27 -05:00 committed by Tim Flynn
commit e591636419
Notes: github-actions[bot] 2025-02-21 00:29:28 +00:00
23 changed files with 119 additions and 111 deletions

View file

@ -370,12 +370,12 @@ inline JSFileResult TestRunner::run_file_test(ByteString const& test_path)
file_result.logged_messages.append(message.to_string_without_side_effects().to_byte_string());
}
test_json.value().as_object().for_each_member([&](ByteString const& suite_name, JsonValue const& suite_value) {
test_json.value().as_object().for_each_member([&](String const& suite_name, JsonValue const& suite_value) {
Test::Suite suite { test_path, suite_name };
VERIFY(suite_value.is_object());
suite_value.as_object().for_each_member([&](ByteString const& test_name, JsonValue const& test_value) {
suite_value.as_object().for_each_member([&](String const& test_name, JsonValue const& test_value) {
Test::Case test { test_name, Test::Result::Fail, "", 0 };
VERIFY(test_value.is_object());
@ -427,10 +427,10 @@ inline JSFileResult TestRunner::run_file_test(ByteString const& test_path)
});
if (top_level_result.is_error()) {
Test::Suite suite { test_path, "<top-level>" };
Test::Suite suite { test_path, "<top-level>"_string };
suite.most_severe_test_result = Result::Crashed;
Test::Case test_case { "<top-level>", Test::Result::Fail, "", 0 };
Test::Case test_case { "<top-level>"_string, Test::Result::Fail, "", 0 };
auto error = top_level_result.release_error().release_value().release_value();
if (error.is_object()) {
StringBuilder detail_builder;

View file

@ -10,6 +10,7 @@
#pragma once
#include <AK/ByteString.h>
#include <AK/String.h>
#include <AK/Vector.h>
namespace Test {
@ -23,7 +24,7 @@ enum class Result {
};
struct Case {
ByteString name;
String name;
Result result;
ByteString details;
u64 duration_us;
@ -31,7 +32,7 @@ struct Case {
struct Suite {
ByteString path;
ByteString name;
String name;
// A failed test takes precedence over a skipped test, which both have
// precedence over a passed test
Result most_severe_test_result { Result::Pass };

View file

@ -243,36 +243,36 @@ inline void TestRunner::print_test_results_as_json() const
auto name = suite.name;
if (name == "__$$TOP_LEVEL$$__"sv)
name = ByteString::empty();
name = String {};
auto path = *LexicalPath::relative_path(suite.path, m_test_root);
tests.set(ByteString::formatted("{}/{}::{}", path, name, case_.name), result_name);
tests.set(MUST(String::formatted("{}/{}::{}", path, name, case_.name)), result_name);
}
}
root.set("duration", static_cast<double>(duration_us) / 1000000.);
root.set("results", move(tests));
root.set("duration"sv, static_cast<double>(duration_us) / 1000000.);
root.set("results"sv, move(tests));
} else {
JsonObject suites;
suites.set("failed", m_counts.suites_failed);
suites.set("passed", m_counts.suites_passed);
suites.set("total", m_counts.suites_failed + m_counts.suites_passed);
suites.set("failed"sv, m_counts.suites_failed);
suites.set("passed"sv, m_counts.suites_passed);
suites.set("total"sv, m_counts.suites_failed + m_counts.suites_passed);
JsonObject tests;
tests.set("failed", m_counts.tests_failed);
tests.set("passed", m_counts.tests_passed);
tests.set("skipped", m_counts.tests_skipped);
tests.set("xfail", m_counts.tests_expected_failed);
tests.set("total", m_counts.tests_failed + m_counts.tests_passed + m_counts.tests_skipped + m_counts.tests_expected_failed);
tests.set("failed"sv, m_counts.tests_failed);
tests.set("passed"sv, m_counts.tests_passed);
tests.set("skipped"sv, m_counts.tests_skipped);
tests.set("xfail"sv, m_counts.tests_expected_failed);
tests.set("total"sv, m_counts.tests_failed + m_counts.tests_passed + m_counts.tests_skipped + m_counts.tests_expected_failed);
JsonObject results;
results.set("suites", suites);
results.set("tests", tests);
results.set("suites"sv, suites);
results.set("tests"sv, tests);
root.set("results", results);
root.set("files_total", m_counts.files_total);
root.set("duration", m_total_elapsed_time_in_ms / 1000.0);
root.set("results"sv, results);
root.set("files_total"sv, m_counts.files_total);
root.set("duration"sv, m_total_elapsed_time_in_ms / 1000.0);
}
outln("{}", root.to_byte_string());
}