mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 16:37:35 +00:00
LibJS + test-js: Get results from the global object directly
This is as the spec would require you to do it and necessary for changes to come in the following commits.
This commit is contained in:
parent
53cc7e8398
commit
ce3f29a135
2 changed files with 15 additions and 11 deletions
|
@ -77,19 +77,19 @@ TESTJS_GLOBAL_FUNCTION(mark_as_garbage, markAsGarbage)
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
auto variable = outer_environment.value()->lexical_environment->get_from_environment(variable_name.string());
|
auto reference = vm.resolve_binding(variable_name.string(), outer_environment.value()->lexical_environment);
|
||||||
if (!variable.has_value()) {
|
|
||||||
vm.throw_exception<JS::ReferenceError>(global_object, JS::ErrorType::UnknownIdentifier, variable_name.string());
|
|
||||||
return {};
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!variable->value.is_object()) {
|
auto value = reference.get_value(global_object);
|
||||||
|
if (vm.exception())
|
||||||
|
return {};
|
||||||
|
|
||||||
|
if (!value.is_object()) {
|
||||||
vm.throw_exception<JS::TypeError>(global_object, JS::ErrorType::NotAnObject, String::formatted("Variable with name {}", variable_name.string()));
|
vm.throw_exception<JS::TypeError>(global_object, JS::ErrorType::NotAnObject, String::formatted("Variable with name {}", variable_name.string()));
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
vm.heap().uproot_cell(&variable->value.as_object());
|
vm.heap().uproot_cell(&value.as_object());
|
||||||
outer_environment.value()->lexical_environment->delete_from_environment(variable_name.string());
|
reference.delete_(global_object);
|
||||||
|
|
||||||
return JS::js_undefined();
|
return JS::js_undefined();
|
||||||
}
|
}
|
||||||
|
|
|
@ -237,8 +237,9 @@ inline AK::Result<NonnullRefPtr<JS::SourceTextModule>, ParserError> parse_module
|
||||||
|
|
||||||
inline Optional<JsonValue> get_test_results(JS::Interpreter& interpreter)
|
inline Optional<JsonValue> get_test_results(JS::Interpreter& interpreter)
|
||||||
{
|
{
|
||||||
auto result = g_vm->get_variable("__TestResults__", interpreter.global_object());
|
auto results = interpreter.global_object().get("__TestResults__");
|
||||||
auto json_string = JS::JSONObject::stringify_impl(interpreter.global_object(), result, JS::js_undefined(), JS::js_undefined());
|
VERIFY(!results.is_empty());
|
||||||
|
auto json_string = JS::JSONObject::stringify_impl(interpreter.global_object(), results, JS::js_undefined(), JS::js_undefined());
|
||||||
|
|
||||||
auto json = JsonValue::from_string(json_string);
|
auto json = JsonValue::from_string(json_string);
|
||||||
if (!json.has_value())
|
if (!json.has_value())
|
||||||
|
@ -382,7 +383,10 @@ inline JSFileResult TestRunner::run_file_test(const String& test_path)
|
||||||
JSFileResult file_result { test_path.substring(m_test_root.length() + 1, test_path.length() - m_test_root.length() - 1) };
|
JSFileResult file_result { test_path.substring(m_test_root.length() + 1, test_path.length() - m_test_root.length() - 1) };
|
||||||
|
|
||||||
// Collect logged messages
|
// Collect logged messages
|
||||||
auto& arr = interpreter->vm().get_variable("__UserOutput__", interpreter->global_object()).as_array();
|
auto user_output = interpreter->global_object().get("__UserOutput__");
|
||||||
|
VERIFY(!user_output.is_empty());
|
||||||
|
|
||||||
|
auto& arr = user_output.as_array();
|
||||||
for (auto& entry : arr.indexed_properties()) {
|
for (auto& entry : arr.indexed_properties()) {
|
||||||
auto message = arr.get(entry.index());
|
auto message = arr.get(entry.index());
|
||||||
file_result.logged_messages.append(message.to_string_without_side_effects());
|
file_result.logged_messages.append(message.to_string_without_side_effects());
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue