Test and fix CESU-8 handling in String builtins.

Fixes #757
JerryScript-DCO-1.0-Signed-off-by: Laszlo Vidacs lvidacs.u-szeged@partner.samsung.com
This commit is contained in:
Laszlo Vidacs 2015-12-01 17:06:27 +01:00 committed by Evgeny Gavrin
parent cb0087b517
commit b8b3b1f275
3 changed files with 36 additions and 4 deletions

View File

@ -594,7 +594,11 @@ ecma_builtin_helper_string_find_index (ecma_string_t *original_str_p, /**< index
ecma_length_t index = start_pos;
lit_utf8_byte_t *original_str_curr_p = original_str_utf8_p + index;
lit_utf8_byte_t *original_str_curr_p = original_str_utf8_p;
for (ecma_length_t idx = 0; idx < index; idx++)
{
lit_utf8_incr (&original_str_curr_p);
}
/* create utf8 string from search string */
MEM_DEFINE_LOCAL_ARRAY (search_str_utf8_p,

View File

@ -43,13 +43,14 @@ assert("w2\uFFA2A".indexOf("A") === 3);
assert("w2\u1D306A".indexOf("A") === 4);
// check surrogate pairs
assert("\uD834\uDF06".indexOf("\uDF06") === 1);
assert("\uD834\uDF06w2\u1D306D".indexOf("D") === 6);
assert("\ud800\dc00".indexOf("\dc00") === 1);
assert("\u8000\u0700\u8000\u8000A".indexOf("A", 3) === 4);
// check prefix search
assert("aaaabaaa".indexOf("aaaba") === 1);

View File

@ -39,6 +39,33 @@ assert("Hello welcome, welcome to the universe o.".lastIndexOf("o", 25) === 24);
assert("Helloooo woooorld".lastIndexOf("oooo", 6) === 4);
// check utf8 strings
assert("\uFFA2".lastIndexOf("\uFFA2") === 0);
assert("\uFFA2".lastIndexOf("A") === -1);
assert("w2\uFFA2 A".lastIndexOf("A") === 4);
assert("w2\u1D306A".indexOf("A") === 4);
assert("\u0070A".lastIndexOf("A") === 1);
assert("\u8000A".lastIndexOf("A") === 1);
assert("\u0080\u0080\u0980\u1080A".lastIndexOf("A") === 4);
assert("\u0080\u0980\u1080A\u0080\u0080\u0980\u1080".lastIndexOf("A", 4) === 3);
assert("\u0080\u0080\u0980\u1080A\u0980AA\u0980A".lastIndexOf("A\u0980A") === 7);
assert("\u0080\u0080\u0980\u1080A\u0980AA\u0980A".lastIndexOf("A\u0980A", 4) === 4);
assert("\uD834\uDF06".lastIndexOf("\uDF06") === 1);
assert("\uD834\uDF06w2\u1D306D\uDF06w2\u1D306D".lastIndexOf("D") === 12);
assert("\ud800\dc00\ud800\dc00".lastIndexOf("\dc00") === 6);
// check empty string
assert(String.prototype.lastIndexOf.call(new String()) === -1);
@ -75,7 +102,7 @@ assert("true".lastIndexOf(true, false) === 0);
// check coercible - undefined
try {
assert(String.prototype.lastIndexOf.call(undefined) === -1);
String.prototype.lastIndexOf.call(undefined);
assert(false);
} catch(e) {
assert(e instanceof TypeError);
@ -83,7 +110,7 @@ try {
// check coercible - null
try {
assert(String.prototype.lastIndexOf.call(null, 0) === -1);
String.prototype.lastIndexOf.call(null);
assert(false);
} catch (e) {
assert(e instanceof TypeError);