v8/test/intl
jshin b348d47bb9 Use ICU case conversion/transliterator for case conversion
When I18N is enabled, use ICU's case conversion API and transliteration
API [1] to implement String.prototype.to{Upper,Lower}Case and
String.prototype.toLocale{Upper,Lower}Case.

* ICU-based case conversion was implemented in runtime-i18n.cc/i18n.js
* The above 4 functions are overridden with those in i18n.js when
  --icu_case_mapping flag is turned on. To control the override by the flag,
  they're overriden in icu-case-mapping.js

Previously, toLocale{U,L}Case just called to{U,L}Case so that they didn't
support locale-sensitive case conversion for Turkic languages (az, tr),
Greek (el) and Lithuanian (lt).

Before ICU APIs for the most general case are called, a fast-path for Latin-1
is tried. It's taken from Blink and adopted as necessary. This fast path
is always tried for to{U,L}Case. For toLocale{U,L}Case, it's only taken
when a locale (explicitly specified or default) is not in {az, el, lt, tr}.

With these changes, a build with --icu_case_mapping=true passes a bunch
of tests in test262/intl402/Strings/* and intl/* that failed before.

Handling of pure ASCII strings (aligned at word boundary) are not as fast
as Unibrow's implementation that uses word-by-word case conversion. OTOH,
Latin-1 input handling is faster than Unibrow. General Unicode input
handling is slower but more accurate.

See https://docs.google.com/spreadsheets/d/1KJCJxKc1FxFXjwmYqABS0_2cNdPetvnd8gY8_HGSbrg/edit?usp=sharing for the benchmark.

This CL started with http://crrev.com/1544023002#ps200001 by littledan@,
but has changed significantly since.

[1] See why transliteration API is needed for uppercasing in Greek.
    http://bugs.icu-project.org/trac/ticket/10582

R=yangguo
BUG=v8:4476,v8:4477
LOG=Y
TEST=test262/{built-ins,intl402}/Strings/*, webkit/fast/js/*, mjsunit/string-case,
     intl/general/case*

Review-Url: https://codereview.chromium.org/1812673005
Cr-Commit-Position: refs/heads/master@{#36187}
2016-05-11 19:03:04 +00:00
..
break-iterator Store i18n meta data in hidden symbols instead of js accessible properties 2014-04-01 10:56:16 +00:00
collator Store i18n meta data in hidden symbols instead of js accessible properties 2014-04-01 10:56:16 +00:00
date-format Enable some passing, disabled Intl tests 2015-12-12 01:33:52 +00:00
general Use ICU case conversion/transliterator for case conversion 2016-05-11 19:03:04 +00:00
number-format Intl: Use private symbols to memoize bound functions 2016-02-24 00:05:06 +00:00
overrides Make sure files end with exactly one new line and police this in presubmit. 2013-11-22 13:50:39 +00:00
string Ensure String.prototype.normalize.length is 0 2015-08-05 15:13:45 +00:00
assert.js Allow to pass a user message to assert functions 2016-04-07 08:16:04 +00:00
intl.gyp [gn] Move build to gypfiles 2016-04-29 10:11:11 +00:00
intl.isolate Reland [swarming] Isolate v8 testing. 2015-10-05 09:48:42 +00:00
intl.status [Interpreter] Skip some tests that fail with --ignition 2016-05-02 12:17:52 +00:00
OWNERS Adding Cira & Mihai to OWNERS for internationalization (i18n) 2013-10-11 15:24:45 +00:00
regexp-assert.js [regexp, intl] Intl should not cause side effects to the RegExp object. 2016-03-29 11:57:03 +00:00
regexp-prepare.js [regexp, intl] Intl should not cause side effects to the RegExp object. 2016-03-29 11:57:03 +00:00
testcfg.py Use ICU case conversion/transliterator for case conversion 2016-05-11 19:03:04 +00:00
utils.js Import intl test suite from v8-i18n project 2013-07-10 10:49:04 +00:00