summaryrefslogtreecommitdiffstats
path: root/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/primitive-string.js
blob: 930438eb75c97c1ea6ea57fd3e81b66dfd8323d5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
// Copyright (C) 2020 Alexey Shvayka. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.

/*---
esid: sec-object.getownpropertydescriptor
description: >
  String primitive as first argument is coerced to object.
info: |
  Object.getOwnPropertyDescriptor ( O, P )

  1. Let obj be ? ToObject(O).
  [...]
  3. Let desc be ? obj.[[GetOwnProperty]](key).
  4. Return FromPropertyDescriptor(desc).

  String Exotic Objects

  String exotic objects always have a data property named "length" whose value is the number
  of code unit elements in the encapsulated String value. Both the code unit data properties
  and the "length" property are non-writable and non-configurable.
---*/

assert.sameValue(Object.getOwnPropertyDescriptor('', '0'), undefined);

var indexDesc = Object.getOwnPropertyDescriptor('foo', '0');

assert.sameValue(indexDesc.value, 'f', '[[Value]]');
assert.sameValue(indexDesc.writable, false, '[[Writable]]');
assert.sameValue(indexDesc.enumerable, true, '[[Enumerable]]');
assert.sameValue(indexDesc.configurable, false, '[[Configurable]]');

var lengthDesc = Object.getOwnPropertyDescriptor('foo', 'length');

assert.sameValue(lengthDesc.value, 3, '[[Value]]');
assert.sameValue(lengthDesc.writable, false, '[[Writable]]');
assert.sameValue(lengthDesc.enumerable, false, '[[Enumerable]]');
assert.sameValue(lengthDesc.configurable, false, '[[Configurable]]');

reportCompare(0, 0);