| // 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); |
| |
| let segmenterPrototype = Object.getPrototypeOf(seg); |
| assertEquals("Intl.Segmenter", segmenterPrototype[Symbol.toStringTag]); |
| |
| // 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 segments = seg.segment('text'); |
| let segmentsPrototype = Object.getPrototypeOf(segments); |
| for (let func of ["containing", Symbol.iterator]) { |
| let descriptor = Object.getOwnPropertyDescriptor(segmentsPrototype, 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 SegmentsPrototype methods are called with same |
| // receiver and won't throw. |
| assertDoesNotThrow(() => segmentsPrototype.containing.call(segments)); |
| assertDoesNotThrow(() => segmentsPrototype[Symbol.iterator].call(segments)); |
| |
| // 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, |
| segmentsPrototype, |
| new Intl.Segmenter(), |
| new Intl.Collator(), |
| new Intl.DateTimeFormat(), |
| new Intl.NumberFormat(), |
| ]; |
| for (let rec of otherReceivers) { |
| assertThrows(() => segmentsPrototype.containing.call(rec), TypeError); |
| } |
| |
| let segmentIterator = segments[Symbol.iterator](); |
| let segmentIteratorPrototype = Object.getPrototypeOf(segmentIterator); |
| for (let func of ["next"]) { |
| let descriptor = Object.getOwnPropertyDescriptor(segmentIteratorPrototype, |
| func); |
| assertTrue(descriptor.writable); |
| assertFalse(descriptor.enumerable); |
| assertTrue(descriptor.configurable); |
| } |
| |
| assertEquals("Segmenter String Iterator", |
| segmentIteratorPrototype[Symbol.toStringTag]); |
| let desc = Object.getOwnPropertyDescriptor( |
| segmentIteratorPrototype, Symbol.toStringTag); |
| assertFalse(desc.writable); |
| assertFalse(desc.enumerable); |
| assertTrue(desc.configurable); |
| |
| let nextReturn = segmentIterator.next(); |
| |
| function checkProperty(obj, property) { |
| let desc = Object.getOwnPropertyDescriptor(obj, property); |
| assertTrue(desc.writable); |
| assertTrue(desc.enumerable); |
| assertTrue(desc.configurable); |
| } |