mirror of
https://github.com/tc39/test262.git
synced 2025-04-08 19:35:28 +02:00
[v8-test262-automation] Changes from https://github.com/v8/v8.git at sha 766ef168 on Tue Dec 18 2018 19:19:51 GMT+0000 (Coordinated Universal Time)
This commit is contained in:
parent
7054805941
commit
ccadd02f2b
implementation-contributed/v8
intl/segmenter
segment-grapheme-following.jssegment-grapheme-iterable.jssegment-grapheme-next.jssegment-grapheme-preceding.jssegment-grapheme.jssegment-iterator-following.jssegment-iterator-ownPropertyDescriptor.jssegment-iterator-position.jssegment-iterator-preceding.jssegment-iterator.jssegment-line-following.jssegment-line-iterable.jssegment-line-next.jssegment-line-preceding.jssegment-line.jssegment-sentence-following.jssegment-sentence-iterable.jssegment-sentence-next.jssegment-sentence-preceding.jssegment-sentence.jssegment-word-following.jssegment-word-iterable.jssegment-word-next.jssegment-word-preceding.jssegment-word.js
mjsunit
es6/regress
es8
regress
test262
@ -0,0 +1,38 @@
|
|||||||
|
// 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
|
||||||
|
|
||||||
|
const seg = new Intl.Segmenter([], {granularity: "grapheme"})
|
||||||
|
for (const text of [
|
||||||
|
"Hello world!", // English
|
||||||
|
" Hello world! ", // English with space before/after
|
||||||
|
" Hello world? Foo bar!", // English
|
||||||
|
"Jedovatou mambu objevila žena v zahrádkářské kolonii.", // Czech
|
||||||
|
"Việt Nam: Nhất thể hóa sẽ khác Trung Quốc?", // Vietnamese
|
||||||
|
"Σοβαρές ενστάσεις Κομισιόν για τον προϋπολογισμό της Ιταλίας", // Greek
|
||||||
|
"Решение Индии о покупке российских С-400 расценили как вызов США", // Russian
|
||||||
|
"הרופא שהציל נשים והנערה ששועבדה ע", // Hebrew,
|
||||||
|
"ترامب للملك سلمان: أنا جاد للغاية.. عليك دفع المزيد", // Arabic
|
||||||
|
"भारत की एस 400 मिसाइल के मुकाबले पाक की थाड, जानें कौन कितना ताकतवर", // Hindi
|
||||||
|
"ரெட் அலர்ட் எச்சரிக்கை; புதுச்சேரியில் நாளை அரசு விடுமுறை!", // Tamil
|
||||||
|
"'ఉత్తర్వులు అందే వరకు ఓటర్ల తుది జాబితాను వెబ్సైట్లో పెట్టవద్దు'", // Telugu
|
||||||
|
"台北》抹黑柯P失敗?朱學恒酸:姚文智氣pupu嗆大老闆", // Chinese
|
||||||
|
"วัดไทรตีระฆังเบาลงช่วงเข้าพรรษา เจ้าอาวาสเผยคนร้องเรียนรับผลกรรมแล้ว", // Thai
|
||||||
|
"九州北部の一部が暴風域に入りました(日直予報士 2018年10月06日) - 日本気象協会 tenki.jp", // Japanese
|
||||||
|
"법원 “다스 지분 처분권·수익권 모두 MB가 보유”", // Korean
|
||||||
|
]) {
|
||||||
|
const iter = seg.segment(text);
|
||||||
|
let prev = 0;
|
||||||
|
let segments = [];
|
||||||
|
while (!iter.following()) {
|
||||||
|
assertEquals(undefined, iter.breakType);
|
||||||
|
assertTrue(iter.index >= 0);
|
||||||
|
assertTrue(iter.index <= text.length);
|
||||||
|
assertTrue(iter.index > prev);
|
||||||
|
segments.push(text.substring(prev, iter.index));
|
||||||
|
prev = iter.index;
|
||||||
|
}
|
||||||
|
assertEquals(text, segments.join(""));
|
||||||
|
}
|
@ -0,0 +1,45 @@
|
|||||||
|
// 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
|
||||||
|
|
||||||
|
const seg = new Intl.Segmenter([], {granularity: "grapheme"})
|
||||||
|
for (const text of [
|
||||||
|
"Hello world!", // English
|
||||||
|
" Hello world! ", // English with space before/after
|
||||||
|
" Hello world? Foo bar!", // English
|
||||||
|
"Jedovatou mambu objevila žena v zahrádkářské kolonii.", // Czech
|
||||||
|
"Việt Nam: Nhất thể hóa sẽ khác Trung Quốc?", // Vietnamese
|
||||||
|
"Σοβαρές ενστάσεις Κομισιόν για τον προϋπολογισμό της Ιταλίας", // Greek
|
||||||
|
"Решение Индии о покупке российских С-400 расценили как вызов США", // Russian
|
||||||
|
"הרופא שהציל נשים והנערה ששועבדה ע", // Hebrew,
|
||||||
|
"ترامب للملك سلمان: أنا جاد للغاية.. عليك دفع المزيد", // Arabic
|
||||||
|
"भारत की एस 400 मिसाइल के मुकाबले पाक की थाड, जानें कौन कितना ताकतवर", // Hindi
|
||||||
|
"ரெட் அலர்ட் எச்சரிக்கை; புதுச்சேரியில் நாளை அரசு விடுமுறை!", // Tamil
|
||||||
|
"'ఉత్తర్వులు అందే వరకు ఓటర్ల తుది జాబితాను వెబ్సైట్లో పెట్టవద్దు'", // Telugu
|
||||||
|
"台北》抹黑柯P失敗?朱學恒酸:姚文智氣pupu嗆大老闆", // Chinese
|
||||||
|
"วัดไทรตีระฆังเบาลงช่วงเข้าพรรษา เจ้าอาวาสเผยคนร้องเรียนรับผลกรรมแล้ว", // Thai
|
||||||
|
"九州北部の一部が暴風域に入りました(日直予報士 2018年10月06日) - 日本気象協会 tenki.jp", // Japanese
|
||||||
|
"법원 “다스 지분 처분권·수익권 모두 MB가 보유”", // Korean
|
||||||
|
]) {
|
||||||
|
let segments = [];
|
||||||
|
// Create another %SegmentIterator% to compare with result from the one that
|
||||||
|
// created in the for of loop.
|
||||||
|
let iter = seg.segment(text);
|
||||||
|
let prev = 0;
|
||||||
|
for (const v of seg.segment(text)) {
|
||||||
|
assertEquals(undefined, v.breakType);
|
||||||
|
assertEquals("string", typeof v.segment);
|
||||||
|
assertTrue(v.segment.length > 0);
|
||||||
|
segments.push(v.segment);
|
||||||
|
|
||||||
|
// manually advance the iter.
|
||||||
|
assertFalse(iter.following());
|
||||||
|
assertEquals(iter.breakType, v.breakType);
|
||||||
|
assertEquals(text.substring(prev, iter.index), v.segment);
|
||||||
|
prev = iter.index;
|
||||||
|
}
|
||||||
|
assertTrue(iter.following());
|
||||||
|
assertEquals(text, segments.join(''));
|
||||||
|
}
|
@ -0,0 +1,40 @@
|
|||||||
|
// 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
|
||||||
|
|
||||||
|
const seg = new Intl.Segmenter([], {granularity: "grapheme"})
|
||||||
|
for (const text of [
|
||||||
|
"Hello world!", // English
|
||||||
|
" Hello world! ", // English with space before/after
|
||||||
|
" Hello world? Foo bar!", // English
|
||||||
|
"Jedovatou mambu objevila žena v zahrádkářské kolonii.", // Czech
|
||||||
|
"Việt Nam: Nhất thể hóa sẽ khác Trung Quốc?", // Vietnamese
|
||||||
|
"Σοβαρές ενστάσεις Κομισιόν για τον προϋπολογισμό της Ιταλίας", // Greek
|
||||||
|
"Решение Индии о покупке российских С-400 расценили как вызов США", // Russian
|
||||||
|
"הרופא שהציל נשים והנערה ששועבדה ע", // Hebrew,
|
||||||
|
"ترامب للملك سلمان: أنا جاد للغاية.. عليك دفع المزيد", // Arabic
|
||||||
|
"भारत की एस 400 मिसाइल के मुकाबले पाक की थाड, जानें कौन कितना ताकतवर", // Hindi
|
||||||
|
"ரெட் அலர்ட் எச்சரிக்கை; புதுச்சேரியில் நாளை அரசு விடுமுறை!", // Tamil
|
||||||
|
"'ఉత్తర్వులు అందే వరకు ఓటర్ల తుది జాబితాను వెబ్సైట్లో పెట్టవద్దు'", // Telugu
|
||||||
|
"台北》抹黑柯P失敗?朱學恒酸:姚文智氣pupu嗆大老闆", // Chinese
|
||||||
|
"วัดไทรตีระฆังเบาลงช่วงเข้าพรรษา เจ้าอาวาสเผยคนร้องเรียนรับผลกรรมแล้ว", // Thai
|
||||||
|
"九州北部の一部が暴風域に入りました(日直予報士 2018年10月06日) - 日本気象協会 tenki.jp", // Japanese
|
||||||
|
"법원 “다스 지분 처분권·수익권 모두 MB가 보유”", // Korean
|
||||||
|
]) {
|
||||||
|
const iter = seg.segment(text);
|
||||||
|
let segments = [];
|
||||||
|
let oldPos = -1;
|
||||||
|
for (let result = iter.next(); !result.done; result = iter.next()) {
|
||||||
|
const v = result.value;
|
||||||
|
assertEquals(undefined, v.breakType);
|
||||||
|
assertEquals("string", typeof v.segment);
|
||||||
|
assertTrue(v.segment.length > 0);
|
||||||
|
segments.push(v.segment);
|
||||||
|
assertEquals("number", typeof v.index);
|
||||||
|
assertTrue(oldPos < v.index);
|
||||||
|
oldPos = v.index;
|
||||||
|
}
|
||||||
|
assertEquals(text, segments.join(''));
|
||||||
|
}
|
@ -0,0 +1,44 @@
|
|||||||
|
// 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
|
||||||
|
|
||||||
|
const seg = new Intl.Segmenter([], {granularity: "grapheme"})
|
||||||
|
for (const text of [
|
||||||
|
"Hello world!", // English
|
||||||
|
" Hello world! ", // English with space before/after
|
||||||
|
" Hello world? Foo bar!", // English
|
||||||
|
"Jedovatou mambu objevila žena v zahrádkářské kolonii.", // Czech
|
||||||
|
"Việt Nam: Nhất thể hóa sẽ khác Trung Quốc?", // Vietnamese
|
||||||
|
"Σοβαρές ενστάσεις Κομισιόν για τον προϋπολογισμό της Ιταλίας", // Greek
|
||||||
|
"Решение Индии о покупке российских С-400 расценили как вызов США", // Russian
|
||||||
|
"הרופא שהציל נשים והנערה ששועבדה ע", // Hebrew,
|
||||||
|
"ترامب للملك سلمان: أنا جاد للغاية.. عليك دفع المزيد", // Arabic
|
||||||
|
"भारत की एस 400 मिसाइल के मुकाबले पाक की थाड, जानें कौन कितना ताकतवर", // Hindi
|
||||||
|
"ரெட் அலர்ட் எச்சரிக்கை; புதுச்சேரியில் நாளை அரசு விடுமுறை!", // Tamil
|
||||||
|
"'ఉత్తర్వులు అందే వరకు ఓటర్ల తుది జాబితాను వెబ్సైట్లో పెట్టవద్దు'", // Telugu
|
||||||
|
"台北》抹黑柯P失敗?朱學恒酸:姚文智氣pupu嗆大老闆", // Chinese
|
||||||
|
"วัดไทรตีระฆังเบาลงช่วงเข้าพรรษา เจ้าอาวาสเผยคนร้องเรียนรับผลกรรมแล้ว", // Thai
|
||||||
|
"九州北部の一部が暴風域に入りました(日直予報士 2018年10月06日) - 日本気象協会 tenki.jp", // Japanese
|
||||||
|
"법원 “다스 지분 처분권·수익권 모두 MB가 보유”", // Korean
|
||||||
|
]) {
|
||||||
|
const iter = seg.segment(text);
|
||||||
|
let prev = text.length;
|
||||||
|
let segments = [];
|
||||||
|
iter.preceding(prev)
|
||||||
|
assertEquals(undefined, iter.breakType)
|
||||||
|
assertTrue(iter.index >= 0);
|
||||||
|
assertTrue(iter.index < prev);
|
||||||
|
segments.push(text.substring(iter.index, prev));
|
||||||
|
prev = iter.index;
|
||||||
|
while (!iter.preceding()) {
|
||||||
|
assertEquals(undefined, iter.breakType);
|
||||||
|
assertTrue(iter.index >= 0);
|
||||||
|
assertTrue(iter.index <= text.length);
|
||||||
|
assertTrue(iter.index < prev);
|
||||||
|
segments.push(text.substring(iter.index, prev));
|
||||||
|
prev = iter.index;
|
||||||
|
}
|
||||||
|
assertEquals(text, segments.reverse().join(""));
|
||||||
|
}
|
@ -0,0 +1,29 @@
|
|||||||
|
// 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
|
||||||
|
|
||||||
|
const seg = new Intl.Segmenter([], {granularity: "grapheme"})
|
||||||
|
for (const text of [
|
||||||
|
"Hello world!", // English
|
||||||
|
" Hello world! ", // English with space before/after
|
||||||
|
" Hello world? Foo bar!", // English
|
||||||
|
"Jedovatou mambu objevila žena v zahrádkářské kolonii.", // Czech
|
||||||
|
"Việt Nam: Nhất thể hóa sẽ khác Trung Quốc?", // Vietnamese
|
||||||
|
"Σοβαρές ενστάσεις Κομισιόν για τον προϋπολογισμό της Ιταλίας", // Greek
|
||||||
|
"Решение Индии о покупке российских С-400 расценили как вызов США", // Russian
|
||||||
|
"הרופא שהציל נשים והנערה ששועבדה ע", // Hebrew,
|
||||||
|
"ترامب للملك سلمان: أنا جاد للغاية.. عليك دفع المزيد", // Arabic
|
||||||
|
"भारत की एस 400 मिसाइल के मुकाबले पाक की थाड, जानें कौन कितना ताकतवर", // Hindi
|
||||||
|
"ரெட் அலர்ட் எச்சரிக்கை; புதுச்சேரியில் நாளை அரசு விடுமுறை!", // Tamil
|
||||||
|
"'ఉత్తర్వులు అందే వరకు ఓటర్ల తుది జాబితాను వెబ్సైట్లో పెట్టవద్దు'", // Telugu
|
||||||
|
"台北》抹黑柯P失敗?朱學恒酸:姚文智氣pupu嗆大老闆", // Chinese
|
||||||
|
"วัดไทรตีระฆังเบาลงช่วงเข้าพรรษา เจ้าอาวาสเผยคนร้องเรียนรับผลกรรมแล้ว", // Thai
|
||||||
|
"九州北部の一部が暴風域に入りました(日直予報士 2018年10月06日) - 日本気象協会 tenki.jp", // Japanese
|
||||||
|
"법원 “다스 지분 처분권·수익권 모두 MB가 보유”", // Korean
|
||||||
|
]) {
|
||||||
|
const iter = seg.segment(text);
|
||||||
|
assertEquals(undefined, iter.breakType);
|
||||||
|
assertEquals(0, iter.index);
|
||||||
|
}
|
@ -0,0 +1,26 @@
|
|||||||
|
// 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
|
||||||
|
|
||||||
|
const segmenter = new Intl.Segmenter();
|
||||||
|
const text = "Hello World, Test 123! Foo Bar. How are you?";
|
||||||
|
const iter = segmenter.segment(text);
|
||||||
|
|
||||||
|
assertEquals("function", typeof iter.following);
|
||||||
|
|
||||||
|
// ToNumber("ABC") return NaN, ToInteger("ABC") return +0, ToIndex("ABC") return 0
|
||||||
|
assertDoesNotThrow(() => iter.following("ABC"));
|
||||||
|
// ToNumber(null) return +0, ToInteger(null) return +0, ToIndex(null) return 0
|
||||||
|
assertDoesNotThrow(() => iter.following(null));
|
||||||
|
// ToNumber(1.4) return 1.4, ToInteger(1.4) return 1, ToIndex(1.4) return 1
|
||||||
|
assertDoesNotThrow(() => iter.following(1.4));
|
||||||
|
|
||||||
|
assertThrows(() => iter.following(-3), RangeError);
|
||||||
|
|
||||||
|
// 1.5.3.2 %SegmentIteratorPrototype%.following( [ from ] )
|
||||||
|
// 3.b If from >= iterator.[[SegmentIteratorString]], throw a RangeError exception.
|
||||||
|
assertDoesNotThrow(() => iter.following(text.length - 1));
|
||||||
|
assertThrows(() => iter.following(text.length), RangeError);
|
||||||
|
assertThrows(() => iter.following(text.length + 1), RangeError);
|
91
implementation-contributed/v8/intl/segmenter/segment-iterator-ownPropertyDescriptor.js
Normal file
91
implementation-contributed/v8/intl/segmenter/segment-iterator-ownPropertyDescriptor.js
Normal file
@ -0,0 +1,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');
|
@ -0,0 +1,11 @@
|
|||||||
|
// 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
|
||||||
|
|
||||||
|
const segmenter = new Intl.Segmenter();
|
||||||
|
const text = "Hello World, Test 123! Foo Bar. How are you?";
|
||||||
|
const iter = segmenter.segment(text);
|
||||||
|
|
||||||
|
assertEquals(0, iter.index);
|
@ -0,0 +1,30 @@
|
|||||||
|
// 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
|
||||||
|
|
||||||
|
const segmenter = new Intl.Segmenter();
|
||||||
|
const text = "Hello World, Test 123! Foo Bar. How are you?";
|
||||||
|
const iter = segmenter.segment(text);
|
||||||
|
|
||||||
|
assertEquals("function", typeof iter.preceding);
|
||||||
|
|
||||||
|
// ToNumber("ABC") return NaN, ToInteger("ABC") return +0, ToIndex("ABC") return 0
|
||||||
|
assertThrows(() => iter.preceding("ABC"), RangeError);
|
||||||
|
// ToNumber(null) return +0, ToInteger(null) return +0, ToIndex(null) return 0
|
||||||
|
assertThrows(() => iter.preceding(null), RangeError);
|
||||||
|
assertThrows(() => iter.preceding(-3), RangeError);
|
||||||
|
|
||||||
|
// ToNumber(1.4) return 1.4, ToInteger(1.4) return 1, ToIndex(1.4) return 1
|
||||||
|
assertDoesNotThrow(() => iter.preceding(1.4));
|
||||||
|
|
||||||
|
// 1.5.3.3 %SegmentIteratorPrototype%.preceding( [ from ] )
|
||||||
|
// 3.b If ... from = 0, throw a RangeError exception.
|
||||||
|
assertThrows(() => iter.preceding(0), RangeError);
|
||||||
|
|
||||||
|
// 1.5.3.3 %SegmentIteratorPrototype%.preceding( [ from ] )
|
||||||
|
// 3.b If from > iterator.[[SegmentIteratorString]] ... , throw a RangeError exception.
|
||||||
|
assertDoesNotThrow(() => iter.preceding(text.length - 1));
|
||||||
|
assertDoesNotThrow(() => iter.preceding(text.length));
|
||||||
|
assertThrows(() => iter.preceding(text.length + 1), RangeError);
|
@ -0,0 +1,15 @@
|
|||||||
|
// 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
|
||||||
|
|
||||||
|
const text = "Hello World, Test 123! Foo Bar. How are you?";
|
||||||
|
for (const granularity of ["grapheme", "word", "sentence", "line"]) {
|
||||||
|
const segmenter = new Intl.Segmenter("en", { granularity });
|
||||||
|
const iter = segmenter.segment(text);
|
||||||
|
|
||||||
|
assertEquals("number", typeof iter.index);
|
||||||
|
assertEquals(0, iter.index);
|
||||||
|
assertEquals(undefined, iter.breakType);
|
||||||
|
}
|
@ -0,0 +1,38 @@
|
|||||||
|
// 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
|
||||||
|
|
||||||
|
const seg = new Intl.Segmenter([], {granularity: "line"})
|
||||||
|
for (const text of [
|
||||||
|
"Hello world!", // English
|
||||||
|
" Hello world! ", // English with space before/after
|
||||||
|
" Hello world? Foo bar!", // English
|
||||||
|
"Jedovatou mambu objevila žena v zahrádkářské kolonii.", // Czech
|
||||||
|
"Việt Nam: Nhất thể hóa sẽ khác Trung Quốc?", // Vietnamese
|
||||||
|
"Σοβαρές ενστάσεις Κομισιόν για τον προϋπολογισμό της Ιταλίας", // Greek
|
||||||
|
"Решение Индии о покупке российских С-400 расценили как вызов США", // Russian
|
||||||
|
"הרופא שהציל נשים והנערה ששועבדה ע", // Hebrew,
|
||||||
|
"ترامب للملك سلمان: أنا جاد للغاية.. عليك دفع المزيد", // Arabic
|
||||||
|
"भारत की एस 400 मिसाइल के मुकाबले पाक की थाड, जानें कौन कितना ताकतवर", // Hindi
|
||||||
|
"ரெட் அலர்ட் எச்சரிக்கை; புதுச்சேரியில் நாளை அரசு விடுமுறை!", // Tamil
|
||||||
|
"'ఉత్తర్వులు అందే వరకు ఓటర్ల తుది జాబితాను వెబ్సైట్లో పెట్టవద్దు'", // Telugu
|
||||||
|
"台北》抹黑柯P失敗?朱學恒酸:姚文智氣pupu嗆大老闆", // Chinese
|
||||||
|
"วัดไทรตีระฆังเบาลงช่วงเข้าพรรษา เจ้าอาวาสเผยคนร้องเรียนรับผลกรรมแล้ว", // Thai
|
||||||
|
"九州北部の一部が暴風域に入りました(日直予報士 2018年10月06日) - 日本気象協会 tenki.jp", // Japanese
|
||||||
|
"법원 “다스 지분 처분권·수익권 모두 MB가 보유”", // Korean
|
||||||
|
]) {
|
||||||
|
const iter = seg.segment(text);
|
||||||
|
let prev = 0;
|
||||||
|
let segments = [];
|
||||||
|
while (!iter.following()) {
|
||||||
|
assertTrue(["soft", "hard"].includes(iter.breakType), iter.breakType);
|
||||||
|
assertTrue(iter.index >= 0);
|
||||||
|
assertTrue(iter.index <= text.length);
|
||||||
|
assertTrue(iter.index > prev);
|
||||||
|
segments.push(text.substring(prev, iter.index));
|
||||||
|
prev = iter.index;
|
||||||
|
}
|
||||||
|
assertEquals(text, segments.join(""));
|
||||||
|
}
|
@ -0,0 +1,45 @@
|
|||||||
|
// 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
|
||||||
|
|
||||||
|
const seg = new Intl.Segmenter([], {granularity: "line"})
|
||||||
|
for (const text of [
|
||||||
|
"Hello world!", // English
|
||||||
|
" Hello world! ", // English with space before/after
|
||||||
|
" Hello world? Foo bar!", // English
|
||||||
|
"Jedovatou mambu objevila žena v zahrádkářské kolonii.", // Czech
|
||||||
|
"Việt Nam: Nhất thể hóa sẽ khác Trung Quốc?", // Vietnamese
|
||||||
|
"Σοβαρές ενστάσεις Κομισιόν για τον προϋπολογισμό της Ιταλίας", // Greek
|
||||||
|
"Решение Индии о покупке российских С-400 расценили как вызов США", // Russian
|
||||||
|
"הרופא שהציל נשים והנערה ששועבדה ע", // Hebrew,
|
||||||
|
"ترامب للملك سلمان: أنا جاد للغاية.. عليك دفع المزيد", // Arabic
|
||||||
|
"भारत की एस 400 मिसाइल के मुकाबले पाक की थाड, जानें कौन कितना ताकतवर", // Hindi
|
||||||
|
"ரெட் அலர்ட் எச்சரிக்கை; புதுச்சேரியில் நாளை அரசு விடுமுறை!", // Tamil
|
||||||
|
"'ఉత్తర్వులు అందే వరకు ఓటర్ల తుది జాబితాను వెబ్సైట్లో పెట్టవద్దు'", // Telugu
|
||||||
|
"台北》抹黑柯P失敗?朱學恒酸:姚文智氣pupu嗆大老闆", // Chinese
|
||||||
|
"วัดไทรตีระฆังเบาลงช่วงเข้าพรรษา เจ้าอาวาสเผยคนร้องเรียนรับผลกรรมแล้ว", // Thai
|
||||||
|
"九州北部の一部が暴風域に入りました(日直予報士 2018年10月06日) - 日本気象協会 tenki.jp", // Japanese
|
||||||
|
"법원 “다스 지분 처분권·수익권 모두 MB가 보유”", // Korean
|
||||||
|
]) {
|
||||||
|
let segments = [];
|
||||||
|
// Create another %SegmentIterator% to compare with result from the one that
|
||||||
|
// created in the for of loop.
|
||||||
|
let iter = seg.segment(text);
|
||||||
|
let prev = 0;
|
||||||
|
for (const v of seg.segment(text)) {
|
||||||
|
assertTrue(["soft", "hard"].includes(v.breakType), v.breakType);
|
||||||
|
assertEquals("string", typeof v.segment);
|
||||||
|
assertTrue(v.segment.length > 0);
|
||||||
|
segments.push(v.segment);
|
||||||
|
|
||||||
|
// manually advance the iter.
|
||||||
|
assertFalse(iter.following());
|
||||||
|
assertEquals(iter.breakType, v.breakType);
|
||||||
|
assertEquals(text.substring(prev, iter.index), v.segment);
|
||||||
|
prev = iter.index;
|
||||||
|
}
|
||||||
|
assertTrue(iter.following());
|
||||||
|
assertEquals(text, segments.join(''));
|
||||||
|
}
|
@ -0,0 +1,40 @@
|
|||||||
|
// 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
|
||||||
|
|
||||||
|
const seg = new Intl.Segmenter([], {granularity: "line"})
|
||||||
|
for (const text of [
|
||||||
|
"Hello world!", // English
|
||||||
|
" Hello world! ", // English with space before/after
|
||||||
|
" Hello world? Foo bar!", // English
|
||||||
|
"Jedovatou mambu objevila žena v zahrádkářské kolonii.", // Czech
|
||||||
|
"Việt Nam: Nhất thể hóa sẽ khác Trung Quốc?", // Vietnamese
|
||||||
|
"Σοβαρές ενστάσεις Κομισιόν για τον προϋπολογισμό της Ιταλίας", // Greek
|
||||||
|
"Решение Индии о покупке российских С-400 расценили как вызов США", // Russian
|
||||||
|
"הרופא שהציל נשים והנערה ששועבדה ע", // Hebrew,
|
||||||
|
"ترامب للملك سلمان: أنا جاد للغاية.. عليك دفع المزيد", // Arabic
|
||||||
|
"भारत की एस 400 मिसाइल के मुकाबले पाक की थाड, जानें कौन कितना ताकतवर", // Hindi
|
||||||
|
"ரெட் அலர்ட் எச்சரிக்கை; புதுச்சேரியில் நாளை அரசு விடுமுறை!", // Tamil
|
||||||
|
"'ఉత్తర్వులు అందే వరకు ఓటర్ల తుది జాబితాను వెబ్సైట్లో పెట్టవద్దు'", // Telugu
|
||||||
|
"台北》抹黑柯P失敗?朱學恒酸:姚文智氣pupu嗆大老闆", // Chinese
|
||||||
|
"วัดไทรตีระฆังเบาลงช่วงเข้าพรรษา เจ้าอาวาสเผยคนร้องเรียนรับผลกรรมแล้ว", // Thai
|
||||||
|
"九州北部の一部が暴風域に入りました(日直予報士 2018年10月06日) - 日本気象協会 tenki.jp", // Japanese
|
||||||
|
"법원 “다스 지분 처분권·수익권 모두 MB가 보유”", // Korean
|
||||||
|
]) {
|
||||||
|
const iter = seg.segment(text);
|
||||||
|
let segments = [];
|
||||||
|
let oldPos = -1;
|
||||||
|
for (let result = iter.next(); !result.done; result = iter.next()) {
|
||||||
|
const v = result.value;
|
||||||
|
assertTrue(["soft", "hard"].includes(iter.breakType), iter.breakType);
|
||||||
|
assertEquals("string", typeof v.segment);
|
||||||
|
assertTrue(v.segment.length > 0);
|
||||||
|
segments.push(v.segment);
|
||||||
|
assertEquals("number", typeof v.index);
|
||||||
|
assertTrue(oldPos < v.index);
|
||||||
|
oldPos = v.index;
|
||||||
|
}
|
||||||
|
assertEquals(text, segments.join(''));
|
||||||
|
}
|
@ -0,0 +1,44 @@
|
|||||||
|
// 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
|
||||||
|
|
||||||
|
const seg = new Intl.Segmenter([], {granularity: "line"})
|
||||||
|
for (const text of [
|
||||||
|
"Hello world!", // English
|
||||||
|
" Hello world! ", // English with space before/after
|
||||||
|
" Hello world? Foo bar!", // English
|
||||||
|
"Jedovatou mambu objevila žena v zahrádkářské kolonii.", // Czech
|
||||||
|
"Việt Nam: Nhất thể hóa sẽ khác Trung Quốc?", // Vietnamese
|
||||||
|
"Σοβαρές ενστάσεις Κομισιόν για τον προϋπολογισμό της Ιταλίας", // Greek
|
||||||
|
"Решение Индии о покупке российских С-400 расценили как вызов США", // Russian
|
||||||
|
"הרופא שהציל נשים והנערה ששועבדה ע", // Hebrew,
|
||||||
|
"ترامب للملك سلمان: أنا جاد للغاية.. عليك دفع المزيد", // Arabic
|
||||||
|
"भारत की एस 400 मिसाइल के मुकाबले पाक की थाड, जानें कौन कितना ताकतवर", // Hindi
|
||||||
|
"ரெட் அலர்ட் எச்சரிக்கை; புதுச்சேரியில் நாளை அரசு விடுமுறை!", // Tamil
|
||||||
|
"'ఉత్తర్వులు అందే వరకు ఓటర్ల తుది జాబితాను వెబ్సైట్లో పెట్టవద్దు'", // Telugu
|
||||||
|
"台北》抹黑柯P失敗?朱學恒酸:姚文智氣pupu嗆大老闆", // Chinese
|
||||||
|
"วัดไทรตีระฆังเบาลงช่วงเข้าพรรษา เจ้าอาวาสเผยคนร้องเรียนรับผลกรรมแล้ว", // Thai
|
||||||
|
"九州北部の一部が暴風域に入りました(日直予報士 2018年10月06日) - 日本気象協会 tenki.jp", // Japanese
|
||||||
|
"법원 “다스 지분 처분권·수익권 모두 MB가 보유”", // Korean
|
||||||
|
]) {
|
||||||
|
const iter = seg.segment(text);
|
||||||
|
let prev = text.length;
|
||||||
|
let segments = [];
|
||||||
|
iter.preceding(prev)
|
||||||
|
assertTrue(["soft", "hard"].includes(iter.breakType), iter.breakType);
|
||||||
|
assertTrue(iter.index >= 0);
|
||||||
|
assertTrue(iter.index < prev);
|
||||||
|
segments.push(text.substring(iter.index, prev));
|
||||||
|
prev = iter.index;
|
||||||
|
while (!iter.preceding()) {
|
||||||
|
assertTrue(["soft", "hard"].includes(iter.breakType), iter.breakType);
|
||||||
|
assertTrue(iter.index >= 0);
|
||||||
|
assertTrue(iter.index <= text.length);
|
||||||
|
assertTrue(iter.index < prev);
|
||||||
|
segments.push(text.substring(iter.index, prev));
|
||||||
|
prev = iter.index;
|
||||||
|
}
|
||||||
|
assertEquals(text, segments.reverse().join(""));
|
||||||
|
}
|
29
implementation-contributed/v8/intl/segmenter/segment-line.js
Normal file
29
implementation-contributed/v8/intl/segmenter/segment-line.js
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
// 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
|
||||||
|
|
||||||
|
const seg = new Intl.Segmenter([], {granularity: "line"})
|
||||||
|
for (const text of [
|
||||||
|
"Hello world!", // English
|
||||||
|
" Hello world! ", // English with space before/after
|
||||||
|
" Hello world? Foo bar!", // English
|
||||||
|
"Jedovatou mambu objevila žena v zahrádkářské kolonii.", // Czech
|
||||||
|
"Việt Nam: Nhất thể hóa sẽ khác Trung Quốc?", // Vietnamese
|
||||||
|
"Σοβαρές ενστάσεις Κομισιόν για τον προϋπολογισμό της Ιταλίας", // Greek
|
||||||
|
"Решение Индии о покупке российских С-400 расценили как вызов США", // Russian
|
||||||
|
"הרופא שהציל נשים והנערה ששועבדה ע", // Hebrew,
|
||||||
|
"ترامب للملك سلمان: أنا جاد للغاية.. عليك دفع المزيد", // Arabic
|
||||||
|
"भारत की एस 400 मिसाइल के मुकाबले पाक की थाड, जानें कौन कितना ताकतवर", // Hindi
|
||||||
|
"ரெட் அலர்ட் எச்சரிக்கை; புதுச்சேரியில் நாளை அரசு விடுமுறை!", // Tamil
|
||||||
|
"'ఉత్తర్వులు అందే వరకు ఓటర్ల తుది జాబితాను వెబ్సైట్లో పెట్టవద్దు'", // Telugu
|
||||||
|
"台北》抹黑柯P失敗?朱學恒酸:姚文智氣pupu嗆大老闆", // Chinese
|
||||||
|
"วัดไทรตีระฆังเบาลงช่วงเข้าพรรษา เจ้าอาวาสเผยคนร้องเรียนรับผลกรรมแล้ว", // Thai
|
||||||
|
"九州北部の一部が暴風域に入りました(日直予報士 2018年10月06日) - 日本気象協会 tenki.jp", // Japanese
|
||||||
|
"법원 “다스 지분 처분권·수익권 모두 MB가 보유”", // Korean
|
||||||
|
]) {
|
||||||
|
const iter = seg.segment(text);
|
||||||
|
assertEquals(undefined, iter.breakType);
|
||||||
|
assertEquals(0, iter.index);
|
||||||
|
}
|
@ -0,0 +1,38 @@
|
|||||||
|
// 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
|
||||||
|
|
||||||
|
const seg = new Intl.Segmenter([], {granularity: "sentence"})
|
||||||
|
for (const text of [
|
||||||
|
"Hello world!", // English
|
||||||
|
" Hello world! ", // English with space before/after
|
||||||
|
" Hello world? Foo bar!", // English
|
||||||
|
"Jedovatou mambu objevila žena v zahrádkářské kolonii.", // Czech
|
||||||
|
"Việt Nam: Nhất thể hóa sẽ khác Trung Quốc?", // Vietnamese
|
||||||
|
"Σοβαρές ενστάσεις Κομισιόν για τον προϋπολογισμό της Ιταλίας", // Greek
|
||||||
|
"Решение Индии о покупке российских С-400 расценили как вызов США", // Russian
|
||||||
|
"הרופא שהציל נשים והנערה ששועבדה ע", // Hebrew,
|
||||||
|
"ترامب للملك سلمان: أنا جاد للغاية.. عليك دفع المزيد", // Arabic
|
||||||
|
"भारत की एस 400 मिसाइल के मुकाबले पाक की थाड, जानें कौन कितना ताकतवर", // Hindi
|
||||||
|
"ரெட் அலர்ட் எச்சரிக்கை; புதுச்சேரியில் நாளை அரசு விடுமுறை!", // Tamil
|
||||||
|
"'ఉత్తర్వులు అందే వరకు ఓటర్ల తుది జాబితాను వెబ్సైట్లో పెట్టవద్దు'", // Telugu
|
||||||
|
"台北》抹黑柯P失敗?朱學恒酸:姚文智氣pupu嗆大老闆", // Chinese
|
||||||
|
"วัดไทรตีระฆังเบาลงช่วงเข้าพรรษา เจ้าอาวาสเผยคนร้องเรียนรับผลกรรมแล้ว", // Thai
|
||||||
|
"九州北部の一部が暴風域に入りました(日直予報士 2018年10月06日) - 日本気象協会 tenki.jp", // Japanese
|
||||||
|
"법원 “다스 지분 처분권·수익권 모두 MB가 보유”", // Korean
|
||||||
|
]) {
|
||||||
|
const iter = seg.segment(text);
|
||||||
|
let prev = 0;
|
||||||
|
let segments = [];
|
||||||
|
while (!iter.following()) {
|
||||||
|
assertTrue(["sep", "term"].includes(iter.breakType), iter.breakType);
|
||||||
|
assertTrue(iter.index >= 0);
|
||||||
|
assertTrue(iter.index <= text.length);
|
||||||
|
assertTrue(iter.index > prev);
|
||||||
|
segments.push(text.substring(prev, iter.index));
|
||||||
|
prev = iter.index;
|
||||||
|
}
|
||||||
|
assertEquals(text, segments.join(""));
|
||||||
|
}
|
@ -0,0 +1,45 @@
|
|||||||
|
// 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
|
||||||
|
|
||||||
|
const seg = new Intl.Segmenter([], {granularity: "sentence"})
|
||||||
|
for (const text of [
|
||||||
|
"Hello world!", // English
|
||||||
|
" Hello world! ", // English with space before/after
|
||||||
|
" Hello world? Foo bar!", // English
|
||||||
|
"Jedovatou mambu objevila žena v zahrádkářské kolonii.", // Czech
|
||||||
|
"Việt Nam: Nhất thể hóa sẽ khác Trung Quốc?", // Vietnamese
|
||||||
|
"Σοβαρές ενστάσεις Κομισιόν για τον προϋπολογισμό της Ιταλίας", // Greek
|
||||||
|
"Решение Индии о покупке российских С-400 расценили как вызов США", // Russian
|
||||||
|
"הרופא שהציל נשים והנערה ששועבדה ע", // Hebrew,
|
||||||
|
"ترامب للملك سلمان: أنا جاد للغاية.. عليك دفع المزيد", // Arabic
|
||||||
|
"भारत की एस 400 मिसाइल के मुकाबले पाक की थाड, जानें कौन कितना ताकतवर", // Hindi
|
||||||
|
"ரெட் அலர்ட் எச்சரிக்கை; புதுச்சேரியில் நாளை அரசு விடுமுறை!", // Tamil
|
||||||
|
"'ఉత్తర్వులు అందే వరకు ఓటర్ల తుది జాబితాను వెబ్సైట్లో పెట్టవద్దు'", // Telugu
|
||||||
|
"台北》抹黑柯P失敗?朱學恒酸:姚文智氣pupu嗆大老闆", // Chinese
|
||||||
|
"วัดไทรตีระฆังเบาลงช่วงเข้าพรรษา เจ้าอาวาสเผยคนร้องเรียนรับผลกรรมแล้ว", // Thai
|
||||||
|
"九州北部の一部が暴風域に入りました(日直予報士 2018年10月06日) - 日本気象協会 tenki.jp", // Japanese
|
||||||
|
"법원 “다스 지분 처분권·수익권 모두 MB가 보유”", // Korean
|
||||||
|
]) {
|
||||||
|
let segments = [];
|
||||||
|
// Create another %SegmentIterator% to compare with result from the one that
|
||||||
|
// created in the for of loop.
|
||||||
|
let iter = seg.segment(text);
|
||||||
|
let prev = 0;
|
||||||
|
for (const v of seg.segment(text)) {
|
||||||
|
assertTrue(["sep", "term"].includes(v.breakType), v.breakType);
|
||||||
|
assertEquals("string", typeof v.segment);
|
||||||
|
assertTrue(v.segment.length > 0);
|
||||||
|
segments.push(v.segment);
|
||||||
|
|
||||||
|
// manually advance the iter.
|
||||||
|
assertFalse(iter.following());
|
||||||
|
assertEquals(iter.breakType, v.breakType);
|
||||||
|
assertEquals(text.substring(prev, iter.index), v.segment);
|
||||||
|
prev = iter.index;
|
||||||
|
}
|
||||||
|
assertTrue(iter.following());
|
||||||
|
assertEquals(text, segments.join(''));
|
||||||
|
}
|
@ -0,0 +1,40 @@
|
|||||||
|
// 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
|
||||||
|
|
||||||
|
const seg = new Intl.Segmenter([], {granularity: "sentence"})
|
||||||
|
for (const text of [
|
||||||
|
"Hello world!", // English
|
||||||
|
" Hello world! ", // English with space before/after
|
||||||
|
" Hello world? Foo bar!", // English
|
||||||
|
"Jedovatou mambu objevila žena v zahrádkářské kolonii.", // Czech
|
||||||
|
"Việt Nam: Nhất thể hóa sẽ khác Trung Quốc?", // Vietnamese
|
||||||
|
"Σοβαρές ενστάσεις Κομισιόν για τον προϋπολογισμό της Ιταλίας", // Greek
|
||||||
|
"Решение Индии о покупке российских С-400 расценили как вызов США", // Russian
|
||||||
|
"הרופא שהציל נשים והנערה ששועבדה ע", // Hebrew,
|
||||||
|
"ترامب للملك سلمان: أنا جاد للغاية.. عليك دفع المزيد", // Arabic
|
||||||
|
"भारत की एस 400 मिसाइल के मुकाबले पाक की थाड, जानें कौन कितना ताकतवर", // Hindi
|
||||||
|
"ரெட் அலர்ட் எச்சரிக்கை; புதுச்சேரியில் நாளை அரசு விடுமுறை!", // Tamil
|
||||||
|
"'ఉత్తర్వులు అందే వరకు ఓటర్ల తుది జాబితాను వెబ్సైట్లో పెట్టవద్దు'", // Telugu
|
||||||
|
"台北》抹黑柯P失敗?朱學恒酸:姚文智氣pupu嗆大老闆", // Chinese
|
||||||
|
"วัดไทรตีระฆังเบาลงช่วงเข้าพรรษา เจ้าอาวาสเผยคนร้องเรียนรับผลกรรมแล้ว", // Thai
|
||||||
|
"九州北部の一部が暴風域に入りました(日直予報士 2018年10月06日) - 日本気象協会 tenki.jp", // Japanese
|
||||||
|
"법원 “다스 지분 처분권·수익권 모두 MB가 보유”", // Korean
|
||||||
|
]) {
|
||||||
|
const iter = seg.segment(text);
|
||||||
|
let segments = [];
|
||||||
|
let oldPos = -1;
|
||||||
|
for (let result = iter.next(); !result.done; result = iter.next()) {
|
||||||
|
const v = result.value;
|
||||||
|
assertTrue(["sep", "term"].includes(iter.breakType), iter.breakType);
|
||||||
|
assertEquals("string", typeof v.segment);
|
||||||
|
assertTrue(v.segment.length > 0);
|
||||||
|
segments.push(v.segment);
|
||||||
|
assertEquals("number", typeof v.index);
|
||||||
|
assertTrue(oldPos < v.index);
|
||||||
|
oldPos = v.index;
|
||||||
|
}
|
||||||
|
assertEquals(text, segments.join(''));
|
||||||
|
}
|
@ -0,0 +1,44 @@
|
|||||||
|
// 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
|
||||||
|
|
||||||
|
const seg = new Intl.Segmenter([], {granularity: "sentence"})
|
||||||
|
for (const text of [
|
||||||
|
"Hello world!", // English
|
||||||
|
" Hello world! ", // English with space before/after
|
||||||
|
" Hello world? Foo bar!", // English
|
||||||
|
"Jedovatou mambu objevila žena v zahrádkářské kolonii.", // Czech
|
||||||
|
"Việt Nam: Nhất thể hóa sẽ khác Trung Quốc?", // Vietnamese
|
||||||
|
"Σοβαρές ενστάσεις Κομισιόν για τον προϋπολογισμό της Ιταλίας", // Greek
|
||||||
|
"Решение Индии о покупке российских С-400 расценили как вызов США", // Russian
|
||||||
|
"הרופא שהציל נשים והנערה ששועבדה ע", // Hebrew,
|
||||||
|
"ترامب للملك سلمان: أنا جاد للغاية.. عليك دفع المزيد", // Arabic
|
||||||
|
"भारत की एस 400 मिसाइल के मुकाबले पाक की थाड, जानें कौन कितना ताकतवर", // Hindi
|
||||||
|
"ரெட் அலர்ட் எச்சரிக்கை; புதுச்சேரியில் நாளை அரசு விடுமுறை!", // Tamil
|
||||||
|
"'ఉత్తర్వులు అందే వరకు ఓటర్ల తుది జాబితాను వెబ్సైట్లో పెట్టవద్దు'", // Telugu
|
||||||
|
"台北》抹黑柯P失敗?朱學恒酸:姚文智氣pupu嗆大老闆", // Chinese
|
||||||
|
"วัดไทรตีระฆังเบาลงช่วงเข้าพรรษา เจ้าอาวาสเผยคนร้องเรียนรับผลกรรมแล้ว", // Thai
|
||||||
|
"九州北部の一部が暴風域に入りました(日直予報士 2018年10月06日) - 日本気象協会 tenki.jp", // Japanese
|
||||||
|
"법원 “다스 지분 처분권·수익권 모두 MB가 보유”", // Korean
|
||||||
|
]) {
|
||||||
|
const iter = seg.segment(text);
|
||||||
|
let prev = text.length;
|
||||||
|
let segments = [];
|
||||||
|
iter.preceding(prev);
|
||||||
|
assertTrue(["sep", "term"].includes(iter.breakType), iter.breakType);
|
||||||
|
assertTrue(iter.index >= 0);
|
||||||
|
assertTrue(iter.index < prev);
|
||||||
|
segments.push(text.substring(iter.index, prev));
|
||||||
|
prev = iter.index;
|
||||||
|
while (!iter.preceding()) {
|
||||||
|
assertTrue(["sep", "term"].includes(iter.breakType), iter.breakType);
|
||||||
|
assertTrue(iter.index >= 0);
|
||||||
|
assertTrue(iter.index <= text.length);
|
||||||
|
assertTrue(iter.index < prev);
|
||||||
|
segments.push(text.substring(iter.index, prev));
|
||||||
|
prev = iter.index;
|
||||||
|
}
|
||||||
|
assertEquals(text, segments.reverse().join(""));
|
||||||
|
}
|
@ -0,0 +1,29 @@
|
|||||||
|
// 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
|
||||||
|
|
||||||
|
const seg = new Intl.Segmenter([], {granularity: "sentence"})
|
||||||
|
for (const text of [
|
||||||
|
"Hello world!", // English
|
||||||
|
" Hello world! ", // English with space before/after
|
||||||
|
" Hello world? Foo bar!", // English
|
||||||
|
"Jedovatou mambu objevila žena v zahrádkářské kolonii.", // Czech
|
||||||
|
"Việt Nam: Nhất thể hóa sẽ khác Trung Quốc?", // Vietnamese
|
||||||
|
"Σοβαρές ενστάσεις Κομισιόν για τον προϋπολογισμό της Ιταλίας", // Greek
|
||||||
|
"Решение Индии о покупке российских С-400 расценили как вызов США", // Russian
|
||||||
|
"הרופא שהציל נשים והנערה ששועבדה ע", // Hebrew,
|
||||||
|
"ترامب للملك سلمان: أنا جاد للغاية.. عليك دفع المزيد", // Arabic
|
||||||
|
"भारत की एस 400 मिसाइल के मुकाबले पाक की थाड, जानें कौन कितना ताकतवर", // Hindi
|
||||||
|
"ரெட் அலர்ட் எச்சரிக்கை; புதுச்சேரியில் நாளை அரசு விடுமுறை!", // Tamil
|
||||||
|
"'ఉత్తర్వులు అందే వరకు ఓటర్ల తుది జాబితాను వెబ్సైట్లో పెట్టవద్దు'", // Telugu
|
||||||
|
"台北》抹黑柯P失敗?朱學恒酸:姚文智氣pupu嗆大老闆", // Chinese
|
||||||
|
"วัดไทรตีระฆังเบาลงช่วงเข้าพรรษา เจ้าอาวาสเผยคนร้องเรียนรับผลกรรมแล้ว", // Thai
|
||||||
|
"九州北部の一部が暴風域に入りました(日直予報士 2018年10月06日) - 日本気象協会 tenki.jp", // Japanese
|
||||||
|
"법원 “다스 지분 처분권·수익권 모두 MB가 보유”", // Korean
|
||||||
|
]) {
|
||||||
|
const iter = seg.segment(text);
|
||||||
|
assertEquals(undefined, iter.breakType);
|
||||||
|
assertEquals(0, iter.index);
|
||||||
|
}
|
@ -0,0 +1,38 @@
|
|||||||
|
// 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
|
||||||
|
|
||||||
|
const seg = new Intl.Segmenter([], {granularity: "word"})
|
||||||
|
for (const text of [
|
||||||
|
"Hello world!", // English
|
||||||
|
" Hello world! ", // English with space before/after
|
||||||
|
" Hello world? Foo bar!", // English
|
||||||
|
"Jedovatou mambu objevila žena v zahrádkářské kolonii.", // Czech
|
||||||
|
"Việt Nam: Nhất thể hóa sẽ khác Trung Quốc?", // Vietnamese
|
||||||
|
"Σοβαρές ενστάσεις Κομισιόν για τον προϋπολογισμό της Ιταλίας", // Greek
|
||||||
|
"Решение Индии о покупке российских С-400 расценили как вызов США", // Russian
|
||||||
|
"הרופא שהציל נשים והנערה ששועבדה ע", // Hebrew,
|
||||||
|
"ترامب للملك سلمان: أنا جاد للغاية.. عليك دفع المزيد", // Arabic
|
||||||
|
"भारत की एस 400 मिसाइल के मुकाबले पाक की थाड, जानें कौन कितना ताकतवर", // Hindi
|
||||||
|
"ரெட் அலர்ட் எச்சரிக்கை; புதுச்சேரியில் நாளை அரசு விடுமுறை!", // Tamil
|
||||||
|
"'ఉత్తర్వులు అందే వరకు ఓటర్ల తుది జాబితాను వెబ్సైట్లో పెట్టవద్దు'", // Telugu
|
||||||
|
"台北》抹黑柯P失敗?朱學恒酸:姚文智氣pupu嗆大老闆", // Chinese
|
||||||
|
"วัดไทรตีระฆังเบาลงช่วงเข้าพรรษา เจ้าอาวาสเผยคนร้องเรียนรับผลกรรมแล้ว", // Thai
|
||||||
|
"九州北部の一部が暴風域に入りました(日直予報士 2018年10月06日) - 日本気象協会 tenki.jp", // Japanese
|
||||||
|
"법원 “다스 지분 처분권·수익권 모두 MB가 보유”", // Korean
|
||||||
|
]) {
|
||||||
|
const iter = seg.segment(text);
|
||||||
|
let prev = 0;
|
||||||
|
let segments = [];
|
||||||
|
while (!iter.following()) {
|
||||||
|
assertTrue(["word", "none"].includes(iter.breakType), iter.breakType);
|
||||||
|
assertTrue(iter.index >= 0);
|
||||||
|
assertTrue(iter.index <= text.length);
|
||||||
|
assertTrue(iter.index > prev);
|
||||||
|
segments.push(text.substring(prev, iter.index));
|
||||||
|
prev = iter.index;
|
||||||
|
}
|
||||||
|
assertEquals(text, segments.join(""));
|
||||||
|
}
|
@ -0,0 +1,45 @@
|
|||||||
|
// 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
|
||||||
|
|
||||||
|
const seg = new Intl.Segmenter([], {granularity: "word"})
|
||||||
|
for (const text of [
|
||||||
|
"Hello world!", // English
|
||||||
|
" Hello world! ", // English with space before/after
|
||||||
|
" Hello world? Foo bar!", // English
|
||||||
|
"Jedovatou mambu objevila žena v zahrádkářské kolonii.", // Czech
|
||||||
|
"Việt Nam: Nhất thể hóa sẽ khác Trung Quốc?", // Vietnamese
|
||||||
|
"Σοβαρές ενστάσεις Κομισιόν για τον προϋπολογισμό της Ιταλίας", // Greek
|
||||||
|
"Решение Индии о покупке российских С-400 расценили как вызов США", // Russian
|
||||||
|
"הרופא שהציל נשים והנערה ששועבדה ע", // Hebrew,
|
||||||
|
"ترامب للملك سلمان: أنا جاد للغاية.. عليك دفع المزيد", // Arabic
|
||||||
|
"भारत की एस 400 मिसाइल के मुकाबले पाक की थाड, जानें कौन कितना ताकतवर", // Hindi
|
||||||
|
"ரெட் அலர்ட் எச்சரிக்கை; புதுச்சேரியில் நாளை அரசு விடுமுறை!", // Tamil
|
||||||
|
"'ఉత్తర్వులు అందే వరకు ఓటర్ల తుది జాబితాను వెబ్సైట్లో పెట్టవద్దు'", // Telugu
|
||||||
|
"台北》抹黑柯P失敗?朱學恒酸:姚文智氣pupu嗆大老闆", // Chinese
|
||||||
|
"วัดไทรตีระฆังเบาลงช่วงเข้าพรรษา เจ้าอาวาสเผยคนร้องเรียนรับผลกรรมแล้ว", // Thai
|
||||||
|
"九州北部の一部が暴風域に入りました(日直予報士 2018年10月06日) - 日本気象協会 tenki.jp", // Japanese
|
||||||
|
"법원 “다스 지분 처분권·수익권 모두 MB가 보유”", // Korean
|
||||||
|
]) {
|
||||||
|
let segments = [];
|
||||||
|
// Create another %SegmentIterator% to compare with result from the one that
|
||||||
|
// created in the for of loop.
|
||||||
|
let iter = seg.segment(text);
|
||||||
|
let prev = 0;
|
||||||
|
for (const v of seg.segment(text)) {
|
||||||
|
assertTrue(["word", "none"].includes(v.breakType), v.breakType);
|
||||||
|
assertEquals("string", typeof v.segment);
|
||||||
|
assertTrue(v.segment.length > 0);
|
||||||
|
segments.push(v.segment);
|
||||||
|
|
||||||
|
// manually advance the iter.
|
||||||
|
assertFalse(iter.following());
|
||||||
|
assertEquals(iter.breakType, v.breakType);
|
||||||
|
assertEquals(text.substring(prev, iter.index), v.segment);
|
||||||
|
prev = iter.index;
|
||||||
|
}
|
||||||
|
assertTrue(iter.following());
|
||||||
|
assertEquals(text, segments.join(''));
|
||||||
|
}
|
@ -0,0 +1,40 @@
|
|||||||
|
// 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
|
||||||
|
|
||||||
|
const seg = new Intl.Segmenter([], {granularity: "word"})
|
||||||
|
for (const text of [
|
||||||
|
"Hello world!", // English
|
||||||
|
" Hello world! ", // English with space before/after
|
||||||
|
" Hello world? Foo bar!", // English
|
||||||
|
"Jedovatou mambu objevila žena v zahrádkářské kolonii.", // Czech
|
||||||
|
"Việt Nam: Nhất thể hóa sẽ khác Trung Quốc?", // Vietnamese
|
||||||
|
"Σοβαρές ενστάσεις Κομισιόν για τον προϋπολογισμό της Ιταλίας", // Greek
|
||||||
|
"Решение Индии о покупке российских С-400 расценили как вызов США", // Russian
|
||||||
|
"הרופא שהציל נשים והנערה ששועבדה ע", // Hebrew,
|
||||||
|
"ترامب للملك سلمان: أنا جاد للغاية.. عليك دفع المزيد", // Arabic
|
||||||
|
"भारत की एस 400 मिसाइल के मुकाबले पाक की थाड, जानें कौन कितना ताकतवर", // Hindi
|
||||||
|
"ரெட் அலர்ட் எச்சரிக்கை; புதுச்சேரியில் நாளை அரசு விடுமுறை!", // Tamil
|
||||||
|
"'ఉత్తర్వులు అందే వరకు ఓటర్ల తుది జాబితాను వెబ్సైట్లో పెట్టవద్దు'", // Telugu
|
||||||
|
"台北》抹黑柯P失敗?朱學恒酸:姚文智氣pupu嗆大老闆", // Chinese
|
||||||
|
"วัดไทรตีระฆังเบาลงช่วงเข้าพรรษา เจ้าอาวาสเผยคนร้องเรียนรับผลกรรมแล้ว", // Thai
|
||||||
|
"九州北部の一部が暴風域に入りました(日直予報士 2018年10月06日) - 日本気象協会 tenki.jp", // Japanese
|
||||||
|
"법원 “다스 지분 처분권·수익권 모두 MB가 보유”", // Korean
|
||||||
|
]) {
|
||||||
|
const iter = seg.segment(text);
|
||||||
|
let segments = [];
|
||||||
|
let oldPos = -1;
|
||||||
|
for (let result = iter.next(); !result.done; result = iter.next()) {
|
||||||
|
const v = result.value;
|
||||||
|
assertTrue(["word", "none"].includes(iter.breakType), iter.breakType);
|
||||||
|
assertEquals("string", typeof v.segment);
|
||||||
|
assertTrue(v.segment.length > 0);
|
||||||
|
segments.push(v.segment);
|
||||||
|
assertEquals("number", typeof v.index);
|
||||||
|
assertTrue(oldPos < v.index);
|
||||||
|
oldPos = v.index;
|
||||||
|
}
|
||||||
|
assertEquals(text, segments.join(''));
|
||||||
|
}
|
@ -0,0 +1,44 @@
|
|||||||
|
// 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
|
||||||
|
|
||||||
|
const seg = new Intl.Segmenter([], {granularity: "word"})
|
||||||
|
for (const text of [
|
||||||
|
"Hello world!", // English
|
||||||
|
" Hello world! ", // English with space before/after
|
||||||
|
" Hello world? Foo bar!", // English
|
||||||
|
"Jedovatou mambu objevila žena v zahrádkářské kolonii.", // Czech
|
||||||
|
"Việt Nam: Nhất thể hóa sẽ khác Trung Quốc?", // Vietnamese
|
||||||
|
"Σοβαρές ενστάσεις Κομισιόν για τον προϋπολογισμό της Ιταλίας", // Greek
|
||||||
|
"Решение Индии о покупке российских С-400 расценили как вызов США", // Russian
|
||||||
|
"הרופא שהציל נשים והנערה ששועבדה ע", // Hebrew,
|
||||||
|
"ترامب للملك سلمان: أنا جاد للغاية.. عليك دفع المزيد", // Arabic
|
||||||
|
"भारत की एस 400 मिसाइल के मुकाबले पाक की थाड, जानें कौन कितना ताकतवर", // Hindi
|
||||||
|
"ரெட் அலர்ட் எச்சரிக்கை; புதுச்சேரியில் நாளை அரசு விடுமுறை!", // Tamil
|
||||||
|
"'ఉత్తర్వులు అందే వరకు ఓటర్ల తుది జాబితాను వెబ్సైట్లో పెట్టవద్దు'", // Telugu
|
||||||
|
"台北》抹黑柯P失敗?朱學恒酸:姚文智氣pupu嗆大老闆", // Chinese
|
||||||
|
"วัดไทรตีระฆังเบาลงช่วงเข้าพรรษา เจ้าอาวาสเผยคนร้องเรียนรับผลกรรมแล้ว", // Thai
|
||||||
|
"九州北部の一部が暴風域に入りました(日直予報士 2018年10月06日) - 日本気象協会 tenki.jp", // Japanese
|
||||||
|
"법원 “다스 지분 처분권·수익권 모두 MB가 보유”", // Korean
|
||||||
|
]) {
|
||||||
|
const iter = seg.segment(text);
|
||||||
|
let prev = text.length;
|
||||||
|
let segments = [];
|
||||||
|
iter.preceding(prev);
|
||||||
|
assertTrue(["word", "none"].includes(iter.breakType), iter.breakType);
|
||||||
|
assertTrue(iter.index >= 0);
|
||||||
|
assertTrue(iter.index < prev);
|
||||||
|
segments.push(text.substring(iter.index, prev));
|
||||||
|
prev = iter.index;
|
||||||
|
while (!iter.preceding()) {
|
||||||
|
assertTrue(["word", "none"].includes(iter.breakType), iter.breakType);
|
||||||
|
assertTrue(iter.index >= 0);
|
||||||
|
assertTrue(iter.index <= text.length);
|
||||||
|
assertTrue(iter.index < prev);
|
||||||
|
segments.push(text.substring(iter.index, prev));
|
||||||
|
prev = iter.index;
|
||||||
|
}
|
||||||
|
assertEquals(text, segments.reverse().join(""));
|
||||||
|
}
|
29
implementation-contributed/v8/intl/segmenter/segment-word.js
Normal file
29
implementation-contributed/v8/intl/segmenter/segment-word.js
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
// 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
|
||||||
|
|
||||||
|
const seg = new Intl.Segmenter([], {granularity: "word"})
|
||||||
|
for (const text of [
|
||||||
|
"Hello world!", // English
|
||||||
|
" Hello world! ", // English with space before/after
|
||||||
|
" Hello world? Foo bar!", // English
|
||||||
|
"Jedovatou mambu objevila žena v zahrádkářské kolonii.", // Czech
|
||||||
|
"Việt Nam: Nhất thể hóa sẽ khác Trung Quốc?", // Vietnamese
|
||||||
|
"Σοβαρές ενστάσεις Κομισιόν για τον προϋπολογισμό της Ιταλίας", // Greek
|
||||||
|
"Решение Индии о покупке российских С-400 расценили как вызов США", // Russian
|
||||||
|
"הרופא שהציל נשים והנערה ששועבדה ע", // Hebrew,
|
||||||
|
"ترامب للملك سلمان: أنا جاد للغاية.. عليك دفع المزيد", // Arabic
|
||||||
|
"भारत की एस 400 मिसाइल के मुकाबले पाक की थाड, जानें कौन कितना ताकतवर", // Hindi
|
||||||
|
"ரெட் அலர்ட் எச்சரிக்கை; புதுச்சேரியில் நாளை அரசு விடுமுறை!", // Tamil
|
||||||
|
"'ఉత్తర్వులు అందే వరకు ఓటర్ల తుది జాబితాను వెబ్సైట్లో పెట్టవద్దు'", // Telugu
|
||||||
|
"台北》抹黑柯P失敗?朱學恒酸:姚文智氣pupu嗆大老闆", // Chinese
|
||||||
|
"วัดไทรตีระฆังเบาลงช่วงเข้าพรรษา เจ้าอาวาสเผยคนร้องเรียนรับผลกรรมแล้ว", // Thai
|
||||||
|
"九州北部の一部が暴風域に入りました(日直予報士 2018年10月06日) - 日本気象協会 tenki.jp", // Japanese
|
||||||
|
"법원 “다스 지분 처분권·수익권 모두 MB가 보유”", // Korean
|
||||||
|
]) {
|
||||||
|
const iter = seg.segment(text);
|
||||||
|
assertEquals(undefined, iter.breakType);
|
||||||
|
assertEquals(0, iter.index);
|
||||||
|
}
|
@ -4,13 +4,37 @@
|
|||||||
|
|
||||||
// Flags: --allow-natives-syntax
|
// Flags: --allow-natives-syntax
|
||||||
|
|
||||||
class Test extends Number {}
|
|
||||||
Test.prototype[Symbol.toStringTag] = "Test";
|
|
||||||
|
|
||||||
function toString(o) {
|
function toString(o) {
|
||||||
%ToFastProperties(o.__proto__);
|
%ToFastProperties(o.__proto__);
|
||||||
return Object.prototype.toString.call(o);
|
return Object.prototype.toString.call(o);
|
||||||
}
|
}
|
||||||
|
|
||||||
assertEquals("[object Test]", toString(new Test), "Try #1");
|
class TestNumber extends Number {}
|
||||||
assertEquals("[object Test]", toString(new Test), "Try #2");
|
TestNumber.prototype[Symbol.toStringTag] = "TestNumber";
|
||||||
|
assertEquals("[object TestNumber]", toString(new TestNumber), "Try #1");
|
||||||
|
assertEquals("[object TestNumber]", toString(new TestNumber), "Try #2");
|
||||||
|
|
||||||
|
class TestBoolean extends Boolean {}
|
||||||
|
TestBoolean.prototype[Symbol.toStringTag] = "TestBoolean";
|
||||||
|
assertEquals("[object TestBoolean]", toString(new TestBoolean), "Try #1");
|
||||||
|
assertEquals("[object TestBoolean]", toString(new TestBoolean), "Try #2");
|
||||||
|
|
||||||
|
class TestString extends String {}
|
||||||
|
TestString.prototype[Symbol.toStringTag] = "TestString";
|
||||||
|
assertEquals("[object TestString]", toString(new TestString), "Try #1");
|
||||||
|
assertEquals("[object TestString]", toString(new TestString), "Try #2");
|
||||||
|
|
||||||
|
class base {}
|
||||||
|
class TestBigInt extends base {}
|
||||||
|
TestBigInt.prototype[Symbol.toStringTag] = 'TestBigInt';
|
||||||
|
var b = new TestBigInt();
|
||||||
|
b.__proto__.__proto__ = BigInt.prototype;
|
||||||
|
assertEquals("[object TestBigInt]", toString(b), "Try #1");
|
||||||
|
assertEquals("[object TestBigInt]", toString(b), "Try #2");
|
||||||
|
|
||||||
|
class TestSymbol extends base {}
|
||||||
|
TestSymbol.prototype[Symbol.toStringTag] = 'TestSymbol';
|
||||||
|
var sym = new TestSymbol();
|
||||||
|
sym.__proto__.__proto__ = Symbol.prototype;
|
||||||
|
assertEquals("[object TestSymbol]", toString(sym), "Try #1");
|
||||||
|
assertEquals("[object TestSymbol]", toString(sym), "Try #2");
|
||||||
|
@ -0,0 +1,5 @@
|
|||||||
|
// 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.
|
||||||
|
|
||||||
|
async(o = (function(await) {})) => 0
|
@ -0,0 +1,7 @@
|
|||||||
|
// 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.
|
||||||
|
|
||||||
|
assertThrows("[({ p: this }), [][0]] = x", SyntaxError);
|
||||||
|
assertThrows("[...a, [][0]] = []", SyntaxError);
|
||||||
|
assertThrows("[...o=1,[][0]] = []", SyntaxError);
|
@ -0,0 +1,23 @@
|
|||||||
|
// 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.
|
||||||
|
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
{
|
||||||
|
const x = [42];
|
||||||
|
x.splice(0, 0, 23);
|
||||||
|
assertEquals([23, 42], x);
|
||||||
|
x.length++;
|
||||||
|
assertEquals([23, 42, ,], x);
|
||||||
|
assertFalse(x.hasOwnProperty(2));
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
const x = [4.2];
|
||||||
|
x.splice(0, 0, 23);
|
||||||
|
assertEquals([23, 4.2], x);
|
||||||
|
x.length++;
|
||||||
|
assertEquals([23, 4.2, ,], x);
|
||||||
|
assertFalse(x.hasOwnProperty(2));
|
||||||
|
}
|
@ -6,10 +6,7 @@
|
|||||||
|
|
||||||
|
|
||||||
class Derived extends RegExp {
|
class Derived extends RegExp {
|
||||||
constructor(a) {
|
constructor(a) { throw "error" }
|
||||||
// Syntax Error
|
|
||||||
const a = 1;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
let o = Reflect.construct(RegExp, [], Derived);
|
let o = Reflect.construct(RegExp, [], Derived);
|
||||||
|
@ -5,10 +5,7 @@
|
|||||||
// Flags: --allow-natives-syntax --enable-slow-asserts --expose-gc
|
// Flags: --allow-natives-syntax --enable-slow-asserts --expose-gc
|
||||||
|
|
||||||
class Derived extends Array {
|
class Derived extends Array {
|
||||||
constructor(a) {
|
constructor(a) { throw "error" }
|
||||||
// Syntax Error.
|
|
||||||
const a = 1;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Derived is not a subclass of RegExp
|
// Derived is not a subclass of RegExp
|
||||||
|
@ -0,0 +1,35 @@
|
|||||||
|
// 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: --allow-natives-syntax
|
||||||
|
|
||||||
|
const constructors = [
|
||||||
|
[Uint8Array, [0, 1]],
|
||||||
|
[Int8Array, [0, 1]],
|
||||||
|
[Uint16Array, [0, 1]],
|
||||||
|
[Int16Array, [0, 1]],
|
||||||
|
[Uint32Array, [0, 1]],
|
||||||
|
[Int32Array, [0, 1]],
|
||||||
|
[Float32Array, [0, 1]],
|
||||||
|
[Float64Array, [0, 1]],
|
||||||
|
[Uint8ClampedArray, [0, 1]],
|
||||||
|
[BigInt64Array, [0n, 1n]],
|
||||||
|
[BigUint64Array, [0n, 1n]]
|
||||||
|
];
|
||||||
|
|
||||||
|
let typedArray;
|
||||||
|
function detachBuffer() {
|
||||||
|
%ArrayBufferDetach(typedArray.buffer);
|
||||||
|
return 'a';
|
||||||
|
}
|
||||||
|
Number.prototype.toString = detachBuffer;
|
||||||
|
BigInt.prototype.toString = detachBuffer;
|
||||||
|
Number.prototype.toLocaleString = detachBuffer;
|
||||||
|
BigInt.prototype.toLocaleString = detachBuffer;
|
||||||
|
|
||||||
|
constructors.forEach(([constructor, arr]) => {
|
||||||
|
typedArray = new constructor(arr);
|
||||||
|
assertSame(typedArray.join(), '0,1');
|
||||||
|
assertSame(typedArray.toLocaleString(), 'a,');
|
||||||
|
});
|
File diff suppressed because it is too large
Load Diff
Loading…
x
Reference in New Issue
Block a user