summaryrefslogtreecommitdiff
path: root/deps/v8/test/intl/segmenter/segment-iterator-ownPropertyDescriptor.js
blob: 3021c81c638a9ac23114d8ff5fb5597bb434de45 (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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
// Copyright 2018 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Flags: --harmony-intl-segmenter

let seg = new Intl.Segmenter();
let descriptor = Object.getOwnPropertyDescriptor(
    Intl.Segmenter, "supportedLocalesOf");
assertTrue(descriptor.writable);
assertFalse(descriptor.enumerable);
assertTrue(descriptor.configurable);

// ecma402 #sec-Intl.Segmenter.prototype
// Intl.Segmenter.prototype
// The value of Intl.Segmenter.prototype is %SegmenterPrototype%.
// This property has the attributes
// { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }.
descriptor = Object.getOwnPropertyDescriptor(Intl.Segmenter, "prototype");
assertFalse(descriptor.writable);
assertFalse(descriptor.enumerable);
assertFalse(descriptor.configurable);

for (let func of ["segment", "resolvedOptions"]) {
  let descriptor = Object.getOwnPropertyDescriptor(
      Intl.Segmenter.prototype, func);
  assertTrue(descriptor.writable);
  assertFalse(descriptor.enumerable);
  assertTrue(descriptor.configurable);
}

let segmentIterator = seg.segment('text');
let prototype = Object.getPrototypeOf(segmentIterator);
for (let func of ["next", "following", "preceding"]) {
  let descriptor = Object.getOwnPropertyDescriptor(prototype, func);
  assertTrue(descriptor.writable);
  assertFalse(descriptor.enumerable);
  assertTrue(descriptor.configurable);
}

function checkGetterProperty(prototype, property) {
  let desc = Object.getOwnPropertyDescriptor(prototype, property);
  assertEquals(`get ${property}`, desc.get.name);
  assertEquals('function', typeof desc.get)
  assertEquals(undefined, desc.set);
  assertFalse(desc.enumerable);
  assertTrue(desc.configurable);
}

// Test the descriptor is correct for properties.
checkGetterProperty(prototype, 'index');
checkGetterProperty(prototype, 'breakType');

// Test the SegmentIteratorPrototype methods are called with same
// receiver and won't throw.
assertDoesNotThrow(() => prototype.next.call(segmentIterator));
assertDoesNotThrow(() => prototype.following.call(segmentIterator));
assertDoesNotThrow(() => prototype.preceding.call(segmentIterator));

// Test the SegmentIteratorPrototype methods are called with a different
// receiver and correctly throw.
var otherReceivers = [
    1, 123.45, undefined, null, "string", true, false,
    Intl, Intl.Segmenter, Intl.Segmenter.prototype,
    prototype,
    new Intl.Segmenter(),
    new Intl.Collator(),
    new Intl.DateTimeFormat(),
    new Intl.NumberFormat(),
];
for (let rec of otherReceivers) {
   assertThrows(() => prototype.next.call(rec), TypeError);
   assertThrows(() => prototype.following.call(rec), TypeError);
   assertThrows(() => prototype.preceding.call(rec), TypeError);
}

// Check the property of the return object of next()
let nextReturn = segmentIterator.next();

function checkProperty(obj, property) {
  let desc = Object.getOwnPropertyDescriptor(obj, property);
  assertTrue(desc.writable);
  assertTrue(desc.enumerable);
  assertTrue(desc.configurable);
}

checkProperty(nextReturn, 'done');
checkProperty(nextReturn, 'value');
checkProperty(nextReturn.value, 'segment');
checkProperty(nextReturn.value, 'breakType');
checkProperty(nextReturn.value, 'index');