Skip to content

Commit

Permalink
LibJS + test-js: Get results from the global object directly
Browse files Browse the repository at this point in the history
This is as the spec would require you to do it and necessary for changes
to come in the following commits.
  • Loading branch information
davidot authored and linusg committed Sep 30, 2021
1 parent 53cc7e8 commit ce3f29a
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 10 deletions.
14 changes: 7 additions & 7 deletions Tests/LibJS/test-js.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -77,19 +77,19 @@ TESTJS_GLOBAL_FUNCTION(mark_as_garbage, markAsGarbage)
return {};
}

auto variable = outer_environment.value()->lexical_environment->get_from_environment(variable_name.string());
if (!variable.has_value()) {
vm.throw_exception<JS::ReferenceError>(global_object, JS::ErrorType::UnknownIdentifier, variable_name.string());
auto reference = vm.resolve_binding(variable_name.string(), outer_environment.value()->lexical_environment);

auto value = reference.get_value(global_object);
if (vm.exception())
return {};
}

if (!variable->value.is_object()) {
if (!value.is_object()) {
vm.throw_exception<JS::TypeError>(global_object, JS::ErrorType::NotAnObject, String::formatted("Variable with name {}", variable_name.string()));
return {};
}

vm.heap().uproot_cell(&variable->value.as_object());
outer_environment.value()->lexical_environment->delete_from_environment(variable_name.string());
vm.heap().uproot_cell(&value.as_object());
reference.delete_(global_object);

return JS::js_undefined();
}
Expand Down
10 changes: 7 additions & 3 deletions Userland/Libraries/LibTest/JavaScriptTestRunner.h
Original file line number Diff line number Diff line change
Expand Up @@ -237,8 +237,9 @@ inline AK::Result<NonnullRefPtr<JS::SourceTextModule>, ParserError> parse_module

inline Optional<JsonValue> get_test_results(JS::Interpreter& interpreter)
{
auto result = g_vm->get_variable("__TestResults__", interpreter.global_object());
auto json_string = JS::JSONObject::stringify_impl(interpreter.global_object(), result, JS::js_undefined(), JS::js_undefined());
auto results = interpreter.global_object().get("__TestResults__");
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);
if (!json.has_value())
Expand Down Expand Up @@ -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) };

// 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()) {
auto message = arr.get(entry.index());
file_result.logged_messages.append(message.to_string_without_side_effects());
Expand Down

0 comments on commit ce3f29a

Please sign in to comment.