mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-11-22 23:50:19 +00:00
LibJS: Make Object.getOwnPropertyDescriptor() work with string indexed property
E.g. for "0" we have to contruct a PropertyName with Type::Number so it looks in the indexed properties as expected.
This commit is contained in:
parent
614bad86bc
commit
7af1d2c170
Notes:
sideshowbarker
2024-07-18 19:19:52 +09:00
2 changed files with 23 additions and 0 deletions
|
@ -388,6 +388,11 @@ Optional<PropertyDescriptor> Object::get_own_property_descriptor(const PropertyN
|
|||
value = existing_value.value().value;
|
||||
attributes = existing_value.value().attributes;
|
||||
} else {
|
||||
if (property_name.is_string()) {
|
||||
i32 property_index = property_name.as_string().to_int().value_or(-1);
|
||||
if (property_index >= 0)
|
||||
return get_own_property_descriptor(property_index);
|
||||
}
|
||||
auto metadata = shape().lookup(property_name.to_string_or_symbol());
|
||||
if (!metadata.has_value())
|
||||
return {};
|
||||
|
|
|
@ -43,6 +43,24 @@ test("setter property", () => {
|
|||
expect(o).toHaveSetterProperty("foo");
|
||||
});
|
||||
|
||||
test("indexed property", () => {
|
||||
let o = { 0: "foo" };
|
||||
|
||||
expect(o).toHaveConfigurableProperty(0);
|
||||
expect(o).toHaveEnumerableProperty(0);
|
||||
expect(o).toHaveWritableProperty(0);
|
||||
expect(o).toHaveValueProperty(0, "foo");
|
||||
expect(o).not.toHaveGetterProperty(0);
|
||||
expect(o).not.toHaveSetterProperty(0);
|
||||
|
||||
expect(o).toHaveConfigurableProperty("0");
|
||||
expect(o).toHaveEnumerableProperty("0");
|
||||
expect(o).toHaveWritableProperty("0");
|
||||
expect(o).toHaveValueProperty("0", "foo");
|
||||
expect(o).not.toHaveGetterProperty("0");
|
||||
expect(o).not.toHaveSetterProperty("0");
|
||||
});
|
||||
|
||||
test("defined property", () => {
|
||||
let o = {};
|
||||
|
||||
|
|
Loading…
Reference in a new issue