mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-04-20 11:36:10 +00:00
IDLGenerators: Set Iterator @@toStringTag
with correct descriptor
This commit is contained in:
parent
5b6f2bb23a
commit
b6ec055bf9
Notes:
github-actions[bot]
2025-01-11 15:03:39 +00:00
Author: https://github.com/tcl3 Commit: https://github.com/LadybirdBrowser/ladybird/commit/b6ec055bf9f Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/3226
4 changed files with 39 additions and 3 deletions
|
@ -5070,6 +5070,7 @@ void generate_iterator_prototype_implementation(IDL::Interface const& interface,
|
|||
generator.set("name", ByteString::formatted("{}Iterator", interface.name));
|
||||
generator.set("parent_name", interface.parent_name);
|
||||
generator.set("prototype_class", ByteString::formatted("{}IteratorPrototype", interface.name));
|
||||
generator.set("to_string_tag", ByteString::formatted("{} Iterator", interface.name));
|
||||
generator.set("prototype_base_class", interface.prototype_base_class);
|
||||
generator.set("fully_qualified_name", ByteString::formatted("{}Iterator", interface.fully_qualified_name));
|
||||
generator.set("possible_include_path", ByteString::formatted("{}Iterator", interface.name.replace("::"sv, "/"sv, ReplaceMode::All)));
|
||||
|
@ -5111,7 +5112,7 @@ void @prototype_class@::initialize(JS::Realm& realm)
|
|||
auto& vm = this->vm();
|
||||
Base::initialize(realm);
|
||||
define_native_function(realm, vm.names.next, next, 0, JS::Attribute::Writable | JS::Attribute::Enumerable | JS::Attribute::Configurable);
|
||||
define_direct_property(vm.well_known_symbol_to_string_tag(), JS::PrimitiveString::create(vm, "Iterator"_string), JS::Attribute::Configurable);
|
||||
define_direct_property(vm.well_known_symbol_to_string_tag(), JS::PrimitiveString::create(vm, "@to_string_tag@"_string), JS::Attribute::Configurable);
|
||||
}
|
||||
|
||||
static JS::ThrowCompletionOr<@fully_qualified_name@*> impl_from(JS::VM& vm)
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
[object Iterator]
|
||||
[object Iterator]
|
||||
[object URLSearchParams Iterator]
|
||||
[object URLSearchParams Iterator]
|
||||
true
|
||||
hello
|
||||
1
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
Harness status: OK
|
||||
|
||||
Found 3 tests
|
||||
|
||||
3 Pass
|
||||
Pass Default iterator objects for an interface have the same prototype
|
||||
Pass Object.prototype.toString returns correct value
|
||||
Pass @@toStringTag has correct value from prototype
|
|
@ -0,0 +1,27 @@
|
|||
<!doctype html>
|
||||
<meta charset="utf-8">
|
||||
<title>Default iterator objects</title>
|
||||
<script src="../../resources/testharness.js"></script>
|
||||
<script src="../../resources/testharnessreport.js"></script>
|
||||
<script>
|
||||
test(() => {
|
||||
const iterator1 = new URLSearchParams()[Symbol.iterator]();
|
||||
const iterator2 = new URLSearchParams().keys();
|
||||
const iterator3 = new URLSearchParams().values();
|
||||
const iterator4 = new URLSearchParams().entries();
|
||||
assert_equals(Object.getPrototypeOf(iterator1), Object.getPrototypeOf(iterator2));
|
||||
assert_equals(Object.getPrototypeOf(iterator1), Object.getPrototypeOf(iterator3));
|
||||
assert_equals(Object.getPrototypeOf(iterator1), Object.getPrototypeOf(iterator4));
|
||||
}, "Default iterator objects for an interface have the same prototype");
|
||||
|
||||
test(() => {
|
||||
const iterator = new URLSearchParams().entries();
|
||||
assert_equals(Object.prototype.toString.call(iterator), "[object URLSearchParams Iterator]");
|
||||
}, "Object.prototype.toString returns correct value");
|
||||
|
||||
test(() => {
|
||||
const iterator = new URLSearchParams().entries();
|
||||
assert_equals(iterator[Symbol.toStringTag], "URLSearchParams Iterator");
|
||||
assert_equals(Object.getOwnPropertyDescriptor(iterator, Symbol.toStringTag), undefined);
|
||||
}, "@@toStringTag has correct value from prototype");
|
||||
</script>
|
Loading…
Add table
Reference in a new issue