v8/test/intl/segmenter/segment-iterator-ownPropertyDescriptor.js
Frank Tang 64da43ef36 Reland "[intl] Clean up intl_segmenter flag"
This is a reland of c9c3ec4c14


Original change's description:
> [intl] Clean up intl_segmenter flag
>
> Intl.Segmenter shipped in m87 and launched.
>
> Bug: v8:11225
> Change-Id: I4213e261e1aea717c1281f19785a8c29ff1bbd8b
> Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2570461
> Commit-Queue: Frank Tang <ftang@chromium.org>
> Reviewed-by: Shu-yu Guo <syg@chromium.org>
> Cr-Commit-Position: refs/heads/master@{#71653}

Bug: v8:11225, v8:11240
Change-Id: Ibded9038671862d90206d328f8a12db51c40e63c
Cq-Include-Trybots: luci.v8.try:v8_linux64_gc_stress_custom_snapshot_dbg_ng,v8_linux_arm64_gc_stress_dbg_ng,v8_linux_gc_stress_dbg_ng,v8_mac64_gc_stress_dbg_ng
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2579043
Commit-Queue: Frank Tang <ftang@chromium.org>
Reviewed-by: Shu-yu Guo <syg@chromium.org>
Cr-Commit-Position: refs/heads/master@{#71691}
2020-12-10 10:25:48 +00:00

98 lines
3.4 KiB
JavaScript

// 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.
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);
}