1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 21:07:35 +00:00

LibJS+WebContent+js: Bring console.assert() to spec

This commit is contained in:
Sam Atkins 2021-12-08 19:43:29 +00:00 committed by Andreas Kling
parent 9b78e287b0
commit ce694490f3
5 changed files with 44 additions and 41 deletions

View file

@ -149,10 +149,50 @@ ThrowCompletionOr<Value> Console::count_reset()
return js_undefined();
}
Value Console::assert_()
// 1.1.1. assert(condition, ...data), https://console.spec.whatwg.org/#assert
ThrowCompletionOr<Value> Console::assert_()
{
// 1. If condition is true, return.
auto condition = vm().argument(0).to_boolean();
if (condition)
return js_undefined();
// 2. Let message be a string without any formatting specifiers indicating generically an assertion failure (such as "Assertion failed").
auto message = js_string(vm(), "Assertion failed");
// NOTE: Assemble `data` from the function arguments.
Vector<JS::Value> data;
if (vm().argument_count() > 1) {
data.ensure_capacity(vm().argument_count() - 1);
for (size_t i = 1; i < vm().argument_count(); ++i) {
data.append(vm().argument(i));
}
}
// 3. If data is empty, append message to data.
if (data.is_empty()) {
data.append(message);
}
// 4. Otherwise:
else {
// 1. Let first be data[0].
auto& first = data[0];
// 2. If Type(first) is not String, then prepend message to data.
if (!first.is_string()) {
data.prepend(message);
}
// 3. Otherwise:
else {
// 1. Let concat be the concatenation of message, U+003A (:), U+0020 SPACE, and first.
auto concat = js_string(vm(), String::formatted("{}: {}", message->string(), first.to_string(global_object()).value()));
// 2. Set data[0] to concat.
data[0] = concat;
}
}
// 5. Perform Logger("assert", data).
if (m_client)
return m_client->assert_();
TRY(m_client->logger(LogLevel::Assert, data));
return js_undefined();
}