diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/include/unicodeNegativeUtil.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/include/unicodeNegativeUtil.as
new file mode 100644
index 000000000..9d62f043d
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/include/unicodeNegativeUtil.as
@@ -0,0 +1,231 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+import com.adobe.test.Assert;
+function negativeTestUnicodeRange(hexFrom, hexTo, array, item) {
+ // split the range into smaller more manageable set
+ var range = 250;
+ for (var i = hexFrom; i <= hexTo; i= i+range+1 ) {
+ var subHexFrom = i;
+ var subHexTo = (i+range <= hexTo)? i+range:hexTo;
+ negativeTestUnicodeRangeHelper(subHexFrom, subHexTo);
+ }
+}
+
+function negativeTestUnicodeRangeHelper(hexFrom, hexTo, array, item) {
+ var offset:int = hexFrom;
+ var testStr = "";
+ var splitResult:Array = new Array();
+ for (var i = hexFrom; i <= hexTo; i++ ) {
+ testStr += String.fromCharCode(i);
+ splitResult.push(String.fromCharCode(i));
+ }
+
+ negativeTestSearch(hexFrom, hexTo, array, item, testStr);
+ negativeTestMatch(hexFrom, hexTo, array, item, testStr);
+ negativeTestSplit(hexFrom, hexTo, array, item, testStr, splitResult);
+ negativeTestReplace(hexFrom, hexTo, array, item, testStr);
+}
+
+function negativeTestSearch(hexFrom, hexTo, array, item, testStr)
+{
+ // String.search()
+ var stringSearchResult:String = '';
+ for (var i = hexFrom; i <= hexTo; i++ ) {
+ var searchStr = String.fromCharCode(i) + String.fromCharCode(i);
+ if (notReserved(i)) {
+ var searchResult:int = testStr.search(searchStr);
+ var searchExpect = -1
+ if (searchExpect != searchResult)
+ stringSearchResult += 'Expected: ' + searchExpect +' Found: ' + searchResult +' ';
+
+ var pattern:RegExp = new RegExp(searchStr);
+ var searchResult2:int = testStr.search(pattern);
+ var searchExpect2 = -1;
+ if (searchExpect2 != searchResult2)
+ stringSearchResult += 'Expected: ' + searchExpect2 +' Found: ' + searchResult2 +' ';
+ }
+ }
+
+ this.array[this.item++] = Assert.expectEq(
+ "Negative String.search", '', stringSearchResult);
+
+ var hexFromStr = decimalToHexString(hexFrom);
+ var hexToStr = decimalToHexString(hexTo);
+
+ //test matching undefined
+ var searchResult:int = testStr.search(undefined);
+ var searchExpect = -1;
+ this.array[this.item++] = Assert.expectEq(
+ hexFromStr + " to " + hexToStr +
+ " String.search(undefined)", searchExpect, searchResult);
+
+ //test matching with no parameter
+ var searchResult2:int = testStr.search();
+ var searchExpect2 = -1;
+ this.array[this.item++] = Assert.expectEq(
+ hexFromStr + " to " + hexToStr +
+ " String.search()", searchExpect2, searchResult2);
+}
+
+function negativeTestMatch(hexFrom, hexTo, array, item, testStr)
+{
+ // String.match()
+ //test matching a string that doesn't exist in the testStr
+ var stringSearchResult:String = '';
+ for (var i = hexFrom; i <= hexTo; i++ ) {
+ if (notReserved(i)) {
+ var matchResult:Array = testStr.match(String.fromCharCode(i)+String.fromCharCode(i));
+ if (matchResult != null)
+ stringSearchResult += 'Expected: null Found: ' + matchResult +' ';
+
+ var pattern:RegExp = new RegExp(String.fromCharCode(i) + String.fromCharCode(i));
+ var matchResult2:Array = testStr.match(pattern);
+ if (matchResult2 != null)
+ stringSearchResult += 'Expected: null Found: ' + matchResult2 +' ';
+ }
+ }
+
+ this.array[this.item++] = Assert.expectEq(
+ "Negative String.match", '', stringSearchResult);
+
+ var hexFromStr = decimalToHexString(hexFrom);
+ var hexToStr = decimalToHexString(hexTo);
+
+ //test matching undefined
+ var matchResult2:Array = testStr.match(undefined);
+ this.array[this.item++] = Assert.expectEq(
+ hexFromStr + " to " + hexToStr +
+ " String.match(undefined)", null, matchResult2);
+
+ //test matching with no parameter
+ var matchResult3:Array = testStr.match();
+ this.array[this.item++] = Assert.expectEq(
+ hexFromStr + " to " + hexToStr +
+ " String.match()", null, matchResult3);
+}
+
+function negativeTestSplit(hexFrom, hexTo, array, item, testStr, splitExpected)
+{
+ // String.split()
+ //split on empty string
+ var stringSplitResult:String = '';
+ var splitDelimiter = "";
+ var splitResult:Array = testStr.split(splitDelimiter);
+ if (splitResult != null && splitExpected != null) {
+ if (splitExpected.length != splitResult.length) {
+ stringSplitResult += 'unexpected length - expected: '+splitExpected.length + 'Found: '+splitResult.length+' ';
+ } else {
+ for (var i = 0; i< splitExpected.length; i++) {
+ if (splitExpected[i] != splitResult[i])
+ stringSplitResult += 'mismatch - expected: '+splitExpected[i]+' Found: '+splitResult[i] + ' ';
+ }
+ }
+ }
+ else {
+ stringSplitResult += 'result array null! ';
+ }
+ this.array[this.item++] = Assert.expectEq(
+ "String.split('')", '', stringSplitResult);
+
+
+ //split on empty regular expression
+ stringSplitResult = '';
+ var pattern:RegExp = new RegExp();
+ var splitResult2:Array = testStr.split(pattern);
+ if (splitResult2 != null && splitExpected != null) {
+ if (splitExpected.length != splitResult2.length) {
+ stringSplitResult += 'unexpected length - expected: '+splitExpected.length + 'Found: '+splitResult2.length+' ';
+ } else {
+ for (var i = 0; i< splitExpected.length; i++) {
+ if (splitExpected[i] != splitResult2[i])
+ stringSplitResult += 'mismatch - expected: '+splitExpected[i]+' Found: '+splitResult2[i] + ' ';
+ }
+ }
+ }
+ else {
+ stringSplitResult += 'result array null! ';
+ }
+ this.array[this.item++] = Assert.expectEq(
+ "String.split(new RegExp())", '', stringSplitResult);
+
+ //split on empty regular expression
+ stringSplitResult = '';
+ var pattern:RegExp = new RegExp("");
+ var splitResult3:Array = testStr.split(pattern);
+ if (splitResult3 != null && splitExpected != null) {
+ if (splitExpected.length != splitResult3.length) {
+ stringSplitResult += 'unexpected length - expected: '+splitExpected.length + 'Found: '+splitResult3.length+' ';
+ } else {
+ for (var i = 0; i< splitExpected.length; i++) {
+ if (splitExpected[i] != splitResult3[i])
+ stringSplitResult += 'mismatch - expected: '+splitExpected[i]+' Found: '+splitResult3[i] + ' ';
+ }
+ }
+ }
+ else {
+ stringSplitResult += 'result array null! ';
+ }
+ this.array[this.item++] = Assert.expectEq(
+ "String.split(new RegExp(''))", '', stringSplitResult);
+
+
+ //split on undefined
+ var splitResult4:Array = testStr.split(undefined);
+ if (splitResult4 != null) {
+ this.array[this.item++] = Assert.expectEq(
+ "String.split(undefined) result length", 1, splitResult4.length);
+
+ if (splitResult4.length == 1) {
+ this.array[this.item++] = Assert.expectEq(
+ "String.split(undefined)[0]", testStr, splitResult4[0]);
+ }
+ }
+}
+
+function negativeTestReplace(hexFrom, hexTo, array, item, testStr)
+{
+ var replaceResult = testStr.replace(String.fromCharCode(hexFrom)+String.fromCharCode(hexTo));
+ this.array[this.item++] = Assert.expectEq(
+ "String.replace(" + decimalToHexString(hexFrom) + decimalToHexString(hexTo) + ")", testStr, replaceResult);
+}
+
+// return true if unicode is not a regexp reserved character
+function notReserved(charCode) {
+ return (charCode != 36) //$
+ && (charCode != 40) //(
+ && (charCode != 41) //)
+ && (charCode != 42) //*
+ && (charCode != 43) //+
+ && (charCode != 46) //.
+ && (charCode != 63) //?
+ && (charCode != 91) //[
+ && (charCode != 92) //\
+ && (charCode != 94) //^
+ && (charCode != 124); //|
+}
+
+function decimalToHexString( n ) {
+ n = Number( n );
+ var h = "0x";
+
+ for ( var i = 3; i >= 0; i-- ) {
+ if ( n >= Math.pow(16, i) ){
+ var t = Math.floor( n / Math.pow(16, i));
+ n -= t * Math.pow(16, i);
+ if ( t >= 10 ) {
+ if ( t == 10 ) { h += "A"; }
+ if ( t == 11 ) { h += "B"; }
+ if ( t == 12 ) { h += "C"; }
+ if ( t == 13 ) { h += "D"; }
+ if ( t == 14 ) { h += "E"; }
+ if ( t == 15 ) { h += "F"; }
+ } else {
+ h += String( t );
+ }
+ } else {
+ h += "0";
+ }
+ }
+ return h;
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/include/unicodeUtil.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/include/unicodeUtil.as
new file mode 100644
index 000000000..51e5545c6
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/include/unicodeUtil.as
@@ -0,0 +1,289 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+import com.adobe.test.Assert;
+/*
+Description:
+Concatenate the unicode characters in the given range and test against it.
+For each char in the given range:
+ - search for the char in the test string
+ - search for a string of 3 chars in the test string
+ - match the char in the test string
+ - split the test string around the char
+ - insert a B, S, CS, WS char into the test string and split around the inserted char
+ - replace the char with an empty string
+ - replace the char with the first and last chars in the given unicode range
+
+Modifications:
+10/04/06 - cpeyer - change to single testcase for each range, to decrease # of
+testcases.
+
+*/
+
+function testUnicodeRange(hexFrom, hexTo)
+{
+ // split the range into smaller more mangeable set
+ var range = 250;
+ for (var i = hexFrom; i <= hexTo; i= i+range+1 ) {
+ var subHexFrom = i;
+ var subHexTo = (i+range <= hexTo) ? i+range:hexTo;
+ testUnicodeRangeHelper(subHexFrom, subHexTo);
+ }
+}
+
+function testUnicodeRangeHelper(hexFrom, hexTo) {
+ var offset:int = hexFrom;
+ var testStr = "";
+ for (var i = hexFrom; i <= hexTo; i++ ) {
+ testStr += String.fromCharCode(i);
+ }
+
+ // The following vars hold the results of the unicode tests in the for loop
+ var stringSearchResult:String = '';
+ var string3SearchResult:String = '';
+ var stringMatchResult:String = '';
+ var stringSplitResult:String = '';
+
+
+ for (var i = hexFrom; i <= hexTo; i++ ) {
+ var charStr = String.fromCharCode(i);
+ var charStrPattern = stringPatternFromCharCode(i);
+
+ // 1. String.search()
+ var searchExpect = i - offset;
+ var searchResult:int = testStr.search(charStrPattern);
+ if (searchExpect != searchResult) stringSearchResult += decimalToHexString(searchExpect) + ' ';
+
+ // search a string of 3 chars
+ var searchPattern = "";
+ for (var j = i; j <= hexTo && j < i + 3; j++) {
+ searchPattern += stringPatternFromCharCode(j);
+ }
+ searchResult = testStr.search(searchPattern);
+ if (searchExpect != searchResult) string3SearchResult += decimalToHexString(searchExpect) + ' ';
+
+ // 2. String.match()
+ var matchResult:Array = testStr.match(charStrPattern);
+ if (matchResult == null) {
+ stringMatchResult += "Failed to find match: " + charStrPattern + " ";
+ } else if (charStr != matchResult[0]) {
+ stringMatchResult += "Failed to match chars: "+charStr + " with " + matchResult[0] + ' ';
+ }
+
+ // 3. String.split()
+ var re = new RegExp("(" + charStrPattern + ")");
+ var splitResult:Array = testStr.split(re);
+ if (splitResult == null) {
+ stringSplitResult += "Failed to split string on: " + charStr + ' ';
+ } else {
+ // test string before searched char
+ if (testStr.substring(0,searchResult) != splitResult[0])
+ stringSplitResult += "split failed before: " + charStr + ' ';
+ // test searched char
+ if (charStr != splitResult[1])
+ stringSplitResult += "split failed on: " + charStr + ' ';
+ // test string after searched char
+ if (testStr.substring(searchResult + 1, testStr.length) != splitResult[2])
+ stringSplitResult += "split failed after: " + charStr + ' ';
+ }
+
+ } // for loop
+
+ // Output test results
+ this.array[this.item++] = Assert.expectEq(
+ "Unicode String.search from " + decimalToHexString(hexFrom) + " to " + decimalToHexString(hexFrom),
+ '', stringSearchResult);
+ this.array[this.item++] = Assert.expectEq(
+ "Unicode String.search for 3 chars from " + decimalToHexString(hexFrom) + " to " + decimalToHexString(hexFrom),
+ '', string3SearchResult);
+ this.array[this.item++] = Assert.expectEq(
+ "Unicode String.match", '', stringMatchResult);
+ this.array[this.item++] = Assert.expectEq(
+ "Unicode String.split", '', stringSplitResult);
+
+ testReplace(hexFrom, hexTo);
+
+ testSplitOnMark(testStr, B, "B");
+ testSplitOnMark(testStr, S, "S");
+ testSplitOnMark(testStr, CS, "CS");
+ testSplitOnMark(testStr, WS, "WS");
+}
+
+function testReplace(hexFrom, hexTo)
+{
+ var offset:int = hexFrom;
+ var testStr = "";
+ for (var i = hexFrom; i <= hexTo; i++ ) {
+ testStr += String.fromCharCode(i);
+ }
+
+ var stringReplaceResult:String = '';
+
+ for (var i = hexFrom; i <= hexTo; i++ ) {
+ var charStr = String.fromCharCode(i);
+ var charStrPattern = stringPatternFromCharCode(i);
+
+ // 4. String.replace()
+ var index = i - offset;
+
+ var replaceResult:String = testStr.replace(charStr, "");
+ var replaceExpect = testStr.substring(0, index);
+ replaceExpect += testStr.substring(index + 1, testStr.length);
+ if (replaceExpect != replaceResult)
+ stringReplaceResult += "Replace failed on: " + charStr + " ";
+
+ // replace with first and last char in given Unicode range
+ var firstLastChars = stringPatternFromCharCode(hexFrom) + stringPatternFromCharCode(hexTo);
+ var replaceResult2:String = testStr.replace(charStr, firstLastChars);
+ var replaceExpect2 = testStr.substring(0, index);
+ replaceExpect2 += firstLastChars;
+ replaceExpect2 += testStr.substring(index + 1, testStr.length);
+ if (replaceExpect2 != replaceResult2)
+ stringReplaceResult += "Replace failed swapping: " + firstLastChars + " ";
+ }
+
+ this.array[this.item++] = Assert.expectEq(
+ "Unicode String.replace", '', stringReplaceResult);
+
+}
+
+function testSplitOnMark(testStr:String, markArray:Array, markArrayName:String) {
+ var testSplitResult:String = ''; //holds results of splitting
+
+ for (var i = 0; i < markArray.length; i++) {
+ var mark = markArray[i];
+ var markStr = String.fromCharCode(mark);
+ var markStrPattern = stringPatternFromCharCode(mark);
+
+ // insert the mark character into the middle of testStr
+ var insertIndex = Math.floor(testStr.length / 2);
+ var markedStr = testStr.substring(0, insertIndex);
+ markedStr += markStr;
+ markedStr += testStr.substring(insertIndex, testStr.length);
+
+ // split around the mark
+
+ var markRE = new RegExp("(" + markStrPattern + ")");
+ var splitMarkedResult:Array = markedStr.split(markRE);
+ var splitMessage = "Split on " + markArrayName + " mark " + decimalToHexString(mark);
+ if (splitMarkedResult == null) {
+ testSplitResult += 'array is null, expected not null!';
+ } else {
+ var markIndex = markedStr.indexOf(markStr, 0);
+
+ // test segment before mark
+ if (markedStr.substring(0, markIndex) != splitMarkedResult[0])
+ testSplitResult += "Split failed before: " + decimalToHexString(mark);
+
+ // test the mark we split on
+ if (markedStr.substring(markIndex, markIndex + 1) != splitMarkedResult[1])
+ testSplitResult += "Split failed on: " + decimalToHexString(mark);
+
+ // test segment after mark
+ var segmentEnd = markedStr.indexOf(markStr, markIndex + 1);
+ if (segmentEnd == -1) {
+ segmentEnd = markedStr.length;
+ }
+ if (markedStr.substring(markIndex + 1, segmentEnd) != splitMarkedResult[2])
+ testSplitResult += "Split failed after: " + decimalToHexString(mark);
+ } // else
+ } // for
+
+ this.array[this.item++] = Assert.expectEq(
+ "Unicode Split on Mark", '', testSplitResult);
+
+}
+
+function regexpReserved(charCode) {
+ return (charCode == 36) // $
+ || (charCode == 40) // (
+ || (charCode == 41) // )
+ || (charCode == 42) // *
+ || (charCode == 43) // +
+ || (charCode == 46) // .
+ || (charCode == 63) // ?
+ || (charCode == 91) // [
+ || (charCode == 92) // \
+ || (charCode == 94) // ^
+ || (charCode == 124); // |
+}
+
+var B = new Array(0x000A, // line feed
+ 0x000D, // carriage return
+ 0x001C,
+ 0x001D,
+ 0x001E,
+ 0x0085,
+ 0x2029);
+
+var S = new Array(0x0009,
+ 0x000B,
+ 0x001F);
+
+var CS = new Array(0x002C,
+ 0x002E,
+ 0x002F,
+ 0x003A,
+ 0x00A0,
+ 0x060C,
+ 0x2044,
+ 0xFE50,
+ 0xFE52,
+ 0xFE55,
+ 0xFF0C,
+ 0xFF0E,
+ 0xFF1A);
+
+var WS = new Array(0x000C,
+ 0x0020,
+ 0x1680,
+ 0x180E,
+ 0x2000,
+ 0x2001,
+ 0x2002,
+ 0x2003,
+ 0x2004,
+ 0x2005,
+ 0x2006,
+ 0x2007,
+ 0x2008,
+ 0x2009,
+ 0x200A,
+ 0x2028,
+ 0x202F,
+ 0x205F,
+ 0x3000);
+
+function stringPatternFromCharCode(charCode) {
+ var result = "";
+ if (regexpReserved(charCode)) {
+ result += "\\";
+ }
+ result += String.fromCharCode(charCode);
+ return result;
+}
+
+function decimalToHexString( n ) {
+ n = Number( n );
+ var h = "0x";
+
+ for ( var i = 3; i >= 0; i-- ) {
+ if ( n >= Math.pow(16, i) ){
+ var t = Math.floor( n / Math.pow(16, i));
+ n -= t * Math.pow(16, i);
+ if ( t >= 10 ) {
+ if ( t == 10 ) { h += "A"; }
+ if ( t == 11 ) { h += "B"; }
+ if ( t == 12 ) { h += "C"; }
+ if ( t == 13 ) { h += "D"; }
+ if ( t == 14 ) { h += "E"; }
+ if ( t == 15 ) { h += "F"; }
+ } else {
+ h += String( t );
+ }
+ } else {
+ h += "0";
+ }
+ }
+ return h;
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0000_BasicLatin/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0000_BasicLatin/Test.as
new file mode 100644
index 000000000..15aa14cca
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0000_BasicLatin/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "Basic Latin";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // Basic Latin
+ testUnicodeRange(0x0001, 0x007F);
+ negativeTestUnicodeRange(0x0001, 0x007F);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0000_BasicLatin/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0000_BasicLatin/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0000_BasicLatin/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0000_BasicLatin/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0000_BasicLatin/output.txt
new file mode 100644
index 000000000..c395e3963
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0000_BasicLatin/output.txt
@@ -0,0 +1,21 @@
+Unicode String.search from 0x0001 to 0x0001 PASSED!
+Unicode String.search for 3 chars from 0x0001 to 0x0001 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0x0001 to 0x007F String.search(undefined) PASSED!
+0x0001 to 0x007F String.search() PASSED!
+Negative String.match PASSED!
+0x0001 to 0x007F String.match(undefined) PASSED!
+0x0001 to 0x007F String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x00010x007F) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0000_BasicLatin/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0000_BasicLatin/test.swf
new file mode 100644
index 000000000..0e14781b4
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0000_BasicLatin/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0000_BasicLatin/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0000_BasicLatin/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0000_BasicLatin/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0080_Latin_1Supplement/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0080_Latin_1Supplement/Test.as
new file mode 100644
index 000000000..7c85b5287
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0080_Latin_1Supplement/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "Latin-1 Supplement";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // Latin-1 Supplement
+ testUnicodeRange(0x0080, 0x00FF);
+ negativeTestUnicodeRange(0x0080, 0x00FF);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0080_Latin_1Supplement/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0080_Latin_1Supplement/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0080_Latin_1Supplement/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0080_Latin_1Supplement/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0080_Latin_1Supplement/output.txt
new file mode 100644
index 000000000..6978b70b5
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0080_Latin_1Supplement/output.txt
@@ -0,0 +1,21 @@
+Unicode String.search from 0x0080 to 0x0080 PASSED!
+Unicode String.search for 3 chars from 0x0080 to 0x0080 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0x0080 to 0x00FF String.search(undefined) PASSED!
+0x0080 to 0x00FF String.search() PASSED!
+Negative String.match PASSED!
+0x0080 to 0x00FF String.match(undefined) PASSED!
+0x0080 to 0x00FF String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x00800x00FF) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0080_Latin_1Supplement/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0080_Latin_1Supplement/test.swf
new file mode 100644
index 000000000..8200dc45f
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0080_Latin_1Supplement/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0080_Latin_1Supplement/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0080_Latin_1Supplement/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0080_Latin_1Supplement/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0100_LatinExtended_A/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0100_LatinExtended_A/Test.as
new file mode 100644
index 000000000..457b83758
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0100_LatinExtended_A/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "Latin Extended-A";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // Latin Extended-A
+ testUnicodeRange(0x0100, 0x017F);
+ negativeTestUnicodeRange(0x0100, 0x017F);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0100_LatinExtended_A/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0100_LatinExtended_A/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0100_LatinExtended_A/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0100_LatinExtended_A/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0100_LatinExtended_A/output.txt
new file mode 100644
index 000000000..3303ee20e
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0100_LatinExtended_A/output.txt
@@ -0,0 +1,21 @@
+Unicode String.search from 0x0100 to 0x0100 PASSED!
+Unicode String.search for 3 chars from 0x0100 to 0x0100 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0x0100 to 0x017F String.search(undefined) PASSED!
+0x0100 to 0x017F String.search() PASSED!
+Negative String.match PASSED!
+0x0100 to 0x017F String.match(undefined) PASSED!
+0x0100 to 0x017F String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x01000x017F) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0100_LatinExtended_A/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0100_LatinExtended_A/test.swf
new file mode 100644
index 000000000..68b09f860
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0100_LatinExtended_A/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0100_LatinExtended_A/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0100_LatinExtended_A/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0100_LatinExtended_A/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0180_LatinExtended_B/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0180_LatinExtended_B/Test.as
new file mode 100644
index 000000000..a35b14ea0
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0180_LatinExtended_B/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "Latin Extended-B";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // Latin Extended-B
+ testUnicodeRange(0x0180, 0x024F);
+ negativeTestUnicodeRange(0x0180, 0x024F);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0180_LatinExtended_B/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0180_LatinExtended_B/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0180_LatinExtended_B/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0180_LatinExtended_B/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0180_LatinExtended_B/output.txt
new file mode 100644
index 000000000..f3c0fba3f
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0180_LatinExtended_B/output.txt
@@ -0,0 +1,21 @@
+Unicode String.search from 0x0180 to 0x0180 PASSED!
+Unicode String.search for 3 chars from 0x0180 to 0x0180 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0x0180 to 0x024F String.search(undefined) PASSED!
+0x0180 to 0x024F String.search() PASSED!
+Negative String.match PASSED!
+0x0180 to 0x024F String.match(undefined) PASSED!
+0x0180 to 0x024F String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x01800x024F) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0180_LatinExtended_B/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0180_LatinExtended_B/test.swf
new file mode 100644
index 000000000..6c66a6c7f
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0180_LatinExtended_B/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0180_LatinExtended_B/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0180_LatinExtended_B/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0180_LatinExtended_B/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0250_IPAExtensions/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0250_IPAExtensions/Test.as
new file mode 100644
index 000000000..41276b379
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0250_IPAExtensions/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "IPA Extensions";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // IPA Extensions
+ testUnicodeRange(0x0250, 0x02AF);
+ negativeTestUnicodeRange(0x0250, 0x02AF);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0250_IPAExtensions/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0250_IPAExtensions/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0250_IPAExtensions/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0250_IPAExtensions/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0250_IPAExtensions/output.txt
new file mode 100644
index 000000000..ba9edb6be
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0250_IPAExtensions/output.txt
@@ -0,0 +1,21 @@
+Unicode String.search from 0x0250 to 0x0250 PASSED!
+Unicode String.search for 3 chars from 0x0250 to 0x0250 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0x0250 to 0x02AF String.search(undefined) PASSED!
+0x0250 to 0x02AF String.search() PASSED!
+Negative String.match PASSED!
+0x0250 to 0x02AF String.match(undefined) PASSED!
+0x0250 to 0x02AF String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x02500x02AF) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0250_IPAExtensions/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0250_IPAExtensions/test.swf
new file mode 100644
index 000000000..b58e14095
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0250_IPAExtensions/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0250_IPAExtensions/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0250_IPAExtensions/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0250_IPAExtensions/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u02B0_SpacingModifierLetters/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u02B0_SpacingModifierLetters/Test.as
new file mode 100644
index 000000000..5044b7666
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u02B0_SpacingModifierLetters/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "Spacing Modifier Letters";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // Spacing Modifier Letters
+ testUnicodeRange(0x02B0, 0x02FF);
+ negativeTestUnicodeRange(0x02B0, 0x02FF);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u02B0_SpacingModifierLetters/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u02B0_SpacingModifierLetters/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u02B0_SpacingModifierLetters/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u02B0_SpacingModifierLetters/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u02B0_SpacingModifierLetters/output.txt
new file mode 100644
index 000000000..2b3fd0c1b
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u02B0_SpacingModifierLetters/output.txt
@@ -0,0 +1,21 @@
+Unicode String.search from 0x02B0 to 0x02B0 PASSED!
+Unicode String.search for 3 chars from 0x02B0 to 0x02B0 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0x02B0 to 0x02FF String.search(undefined) PASSED!
+0x02B0 to 0x02FF String.search() PASSED!
+Negative String.match PASSED!
+0x02B0 to 0x02FF String.match(undefined) PASSED!
+0x02B0 to 0x02FF String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x02B00x02FF) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u02B0_SpacingModifierLetters/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u02B0_SpacingModifierLetters/test.swf
new file mode 100644
index 000000000..265aaf2cb
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u02B0_SpacingModifierLetters/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u02B0_SpacingModifierLetters/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u02B0_SpacingModifierLetters/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u02B0_SpacingModifierLetters/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0300_CombiningDiacriticalMarks/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0300_CombiningDiacriticalMarks/Test.as
new file mode 100644
index 000000000..f9aa8fbc8
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0300_CombiningDiacriticalMarks/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "Combining Diacritical Marks";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // Combining Diacritical Marks
+ testUnicodeRange(0x0300, 0x036F);
+ negativeTestUnicodeRange(0x0300, 0x036F);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0300_CombiningDiacriticalMarks/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0300_CombiningDiacriticalMarks/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0300_CombiningDiacriticalMarks/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0300_CombiningDiacriticalMarks/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0300_CombiningDiacriticalMarks/output.txt
new file mode 100644
index 000000000..a0cc5c3a0
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0300_CombiningDiacriticalMarks/output.txt
@@ -0,0 +1,21 @@
+Unicode String.search from 0x0300 to 0x0300 PASSED!
+Unicode String.search for 3 chars from 0x0300 to 0x0300 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0x0300 to 0x036F String.search(undefined) PASSED!
+0x0300 to 0x036F String.search() PASSED!
+Negative String.match PASSED!
+0x0300 to 0x036F String.match(undefined) PASSED!
+0x0300 to 0x036F String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x03000x036F) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0300_CombiningDiacriticalMarks/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0300_CombiningDiacriticalMarks/test.swf
new file mode 100644
index 000000000..6f5fec940
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0300_CombiningDiacriticalMarks/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0300_CombiningDiacriticalMarks/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0300_CombiningDiacriticalMarks/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0300_CombiningDiacriticalMarks/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0370_GreekandCoptic/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0370_GreekandCoptic/Test.as
new file mode 100644
index 000000000..977d04534
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0370_GreekandCoptic/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "Greek and Coptic";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // Greek and Coptic
+ testUnicodeRange(0x0370, 0x03FF);
+ negativeTestUnicodeRange(0x0370, 0x03FF);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0370_GreekandCoptic/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0370_GreekandCoptic/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0370_GreekandCoptic/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0370_GreekandCoptic/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0370_GreekandCoptic/output.txt
new file mode 100644
index 000000000..b1f3b765e
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0370_GreekandCoptic/output.txt
@@ -0,0 +1,21 @@
+Unicode String.search from 0x0370 to 0x0370 PASSED!
+Unicode String.search for 3 chars from 0x0370 to 0x0370 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0x0370 to 0x03FF String.search(undefined) PASSED!
+0x0370 to 0x03FF String.search() PASSED!
+Negative String.match PASSED!
+0x0370 to 0x03FF String.match(undefined) PASSED!
+0x0370 to 0x03FF String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x03700x03FF) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0370_GreekandCoptic/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0370_GreekandCoptic/test.swf
new file mode 100644
index 000000000..34b984d26
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0370_GreekandCoptic/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0370_GreekandCoptic/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0370_GreekandCoptic/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0370_GreekandCoptic/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0400_Cyrillic/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0400_Cyrillic/Test.as
new file mode 100644
index 000000000..608692edf
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0400_Cyrillic/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "Cyrillic";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // Cyrillic
+ testUnicodeRange(0x0400, 0x04FF);
+ negativeTestUnicodeRange(0x0400, 0x04FF);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0400_Cyrillic/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0400_Cyrillic/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0400_Cyrillic/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0400_Cyrillic/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0400_Cyrillic/output.txt
new file mode 100644
index 000000000..866e1d664
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0400_Cyrillic/output.txt
@@ -0,0 +1,42 @@
+Unicode String.search from 0x0400 to 0x0400 PASSED!
+Unicode String.search for 3 chars from 0x0400 to 0x0400 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x04FB to 0x04FB PASSED!
+Unicode String.search for 3 chars from 0x04FB to 0x04FB PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0x0400 to 0x04FA String.search(undefined) PASSED!
+0x0400 to 0x04FA String.search() PASSED!
+Negative String.match PASSED!
+0x0400 to 0x04FA String.match(undefined) PASSED!
+0x0400 to 0x04FA String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x04000x04FA) PASSED!
+Negative String.search PASSED!
+0x04FB to 0x04FF String.search(undefined) PASSED!
+0x04FB to 0x04FF String.search() PASSED!
+Negative String.match PASSED!
+0x04FB to 0x04FF String.match(undefined) PASSED!
+0x04FB to 0x04FF String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x04FB0x04FF) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0400_Cyrillic/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0400_Cyrillic/test.swf
new file mode 100644
index 000000000..3e5063aa9
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0400_Cyrillic/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0400_Cyrillic/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0400_Cyrillic/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0400_Cyrillic/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0500_CyrillicSupplementary/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0500_CyrillicSupplementary/Test.as
new file mode 100644
index 000000000..280aafbc6
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0500_CyrillicSupplementary/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "Cyrillic Supplementary";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // Cyrillic Supplementary
+ testUnicodeRange(0x0500, 0x052F);
+ negativeTestUnicodeRange(0x0500, 0x052F);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0500_CyrillicSupplementary/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0500_CyrillicSupplementary/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0500_CyrillicSupplementary/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0500_CyrillicSupplementary/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0500_CyrillicSupplementary/output.txt
new file mode 100644
index 000000000..b2c2921b4
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0500_CyrillicSupplementary/output.txt
@@ -0,0 +1,21 @@
+Unicode String.search from 0x0500 to 0x0500 PASSED!
+Unicode String.search for 3 chars from 0x0500 to 0x0500 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0x0500 to 0x052F String.search(undefined) PASSED!
+0x0500 to 0x052F String.search() PASSED!
+Negative String.match PASSED!
+0x0500 to 0x052F String.match(undefined) PASSED!
+0x0500 to 0x052F String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x05000x052F) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0500_CyrillicSupplementary/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0500_CyrillicSupplementary/test.swf
new file mode 100644
index 000000000..92d4808ce
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0500_CyrillicSupplementary/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0500_CyrillicSupplementary/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0500_CyrillicSupplementary/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0500_CyrillicSupplementary/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0530_Armenian/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0530_Armenian/Test.as
new file mode 100644
index 000000000..25ef405dd
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0530_Armenian/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "Armenian";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // Armenian
+ testUnicodeRange(0x0530, 0x058F);
+ negativeTestUnicodeRange(0x0530, 0x058F);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0530_Armenian/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0530_Armenian/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0530_Armenian/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0530_Armenian/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0530_Armenian/output.txt
new file mode 100644
index 000000000..51ac71ef1
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0530_Armenian/output.txt
@@ -0,0 +1,21 @@
+Unicode String.search from 0x0530 to 0x0530 PASSED!
+Unicode String.search for 3 chars from 0x0530 to 0x0530 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0x0530 to 0x058F String.search(undefined) PASSED!
+0x0530 to 0x058F String.search() PASSED!
+Negative String.match PASSED!
+0x0530 to 0x058F String.match(undefined) PASSED!
+0x0530 to 0x058F String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x05300x058F) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0530_Armenian/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0530_Armenian/test.swf
new file mode 100644
index 000000000..f026568fd
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0530_Armenian/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0530_Armenian/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0530_Armenian/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0530_Armenian/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0590_Hebrew/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0590_Hebrew/Test.as
new file mode 100644
index 000000000..0294b55df
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0590_Hebrew/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "Hebrew";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // Hebrew
+ testUnicodeRange(0x0590, 0x05FF);
+ negativeTestUnicodeRange(0x0590, 0x05FF);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0590_Hebrew/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0590_Hebrew/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0590_Hebrew/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0590_Hebrew/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0590_Hebrew/output.txt
new file mode 100644
index 000000000..a10026879
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0590_Hebrew/output.txt
@@ -0,0 +1,21 @@
+Unicode String.search from 0x0590 to 0x0590 PASSED!
+Unicode String.search for 3 chars from 0x0590 to 0x0590 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0x0590 to 0x05FF String.search(undefined) PASSED!
+0x0590 to 0x05FF String.search() PASSED!
+Negative String.match PASSED!
+0x0590 to 0x05FF String.match(undefined) PASSED!
+0x0590 to 0x05FF String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x05900x05FF) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0590_Hebrew/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0590_Hebrew/test.swf
new file mode 100644
index 000000000..242e414d7
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0590_Hebrew/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0590_Hebrew/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0590_Hebrew/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0590_Hebrew/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0600_Arabic/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0600_Arabic/Test.as
new file mode 100644
index 000000000..f86757ff1
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0600_Arabic/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "Arabic";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // Arabic
+ testUnicodeRange(0x0600, 0x06FF);
+ negativeTestUnicodeRange(0x0600, 0x06FF);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0600_Arabic/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0600_Arabic/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0600_Arabic/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0600_Arabic/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0600_Arabic/output.txt
new file mode 100644
index 000000000..9ab6c8d51
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0600_Arabic/output.txt
@@ -0,0 +1,42 @@
+Unicode String.search from 0x0600 to 0x0600 PASSED!
+Unicode String.search for 3 chars from 0x0600 to 0x0600 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x06FB to 0x06FB PASSED!
+Unicode String.search for 3 chars from 0x06FB to 0x06FB PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0x0600 to 0x06FA String.search(undefined) PASSED!
+0x0600 to 0x06FA String.search() PASSED!
+Negative String.match PASSED!
+0x0600 to 0x06FA String.match(undefined) PASSED!
+0x0600 to 0x06FA String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x06000x06FA) PASSED!
+Negative String.search PASSED!
+0x06FB to 0x06FF String.search(undefined) PASSED!
+0x06FB to 0x06FF String.search() PASSED!
+Negative String.match PASSED!
+0x06FB to 0x06FF String.match(undefined) PASSED!
+0x06FB to 0x06FF String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x06FB0x06FF) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0600_Arabic/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0600_Arabic/test.swf
new file mode 100644
index 000000000..aa78b9ecc
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0600_Arabic/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0600_Arabic/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0600_Arabic/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0600_Arabic/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0700_Syriac/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0700_Syriac/Test.as
new file mode 100644
index 000000000..695cafa15
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0700_Syriac/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "Syriac";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // Syriac
+ testUnicodeRange(0x0700, 0x074F);
+ negativeTestUnicodeRange(0x0700, 0x074F);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0700_Syriac/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0700_Syriac/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0700_Syriac/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0700_Syriac/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0700_Syriac/output.txt
new file mode 100644
index 000000000..aa64bc93c
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0700_Syriac/output.txt
@@ -0,0 +1,21 @@
+Unicode String.search from 0x0700 to 0x0700 PASSED!
+Unicode String.search for 3 chars from 0x0700 to 0x0700 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0x0700 to 0x074F String.search(undefined) PASSED!
+0x0700 to 0x074F String.search() PASSED!
+Negative String.match PASSED!
+0x0700 to 0x074F String.match(undefined) PASSED!
+0x0700 to 0x074F String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x07000x074F) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0700_Syriac/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0700_Syriac/test.swf
new file mode 100644
index 000000000..fd5ea433a
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0700_Syriac/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0700_Syriac/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0700_Syriac/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0700_Syriac/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0780_Thaana/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0780_Thaana/Test.as
new file mode 100644
index 000000000..7b7c5ead2
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0780_Thaana/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "Thaana";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // Thaana
+ testUnicodeRange(0x0780, 0x07BF);
+ negativeTestUnicodeRange(0x0780, 0x07BF);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0780_Thaana/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0780_Thaana/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0780_Thaana/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0780_Thaana/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0780_Thaana/output.txt
new file mode 100644
index 000000000..43f23a3e0
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0780_Thaana/output.txt
@@ -0,0 +1,21 @@
+Unicode String.search from 0x0780 to 0x0780 PASSED!
+Unicode String.search for 3 chars from 0x0780 to 0x0780 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0x0780 to 0x07BF String.search(undefined) PASSED!
+0x0780 to 0x07BF String.search() PASSED!
+Negative String.match PASSED!
+0x0780 to 0x07BF String.match(undefined) PASSED!
+0x0780 to 0x07BF String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x07800x07BF) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0780_Thaana/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0780_Thaana/test.swf
new file mode 100644
index 000000000..6778523e6
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0780_Thaana/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0780_Thaana/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0780_Thaana/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0780_Thaana/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0900_Devanagari/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0900_Devanagari/Test.as
new file mode 100644
index 000000000..ae0b07616
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0900_Devanagari/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "Devanagari";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // Devanagari
+ testUnicodeRange(0x0900, 0x097F);
+ negativeTestUnicodeRange(0x0900, 0x097F);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0900_Devanagari/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0900_Devanagari/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0900_Devanagari/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0900_Devanagari/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0900_Devanagari/output.txt
new file mode 100644
index 000000000..351953a3e
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0900_Devanagari/output.txt
@@ -0,0 +1,21 @@
+Unicode String.search from 0x0900 to 0x0900 PASSED!
+Unicode String.search for 3 chars from 0x0900 to 0x0900 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0x0900 to 0x097F String.search(undefined) PASSED!
+0x0900 to 0x097F String.search() PASSED!
+Negative String.match PASSED!
+0x0900 to 0x097F String.match(undefined) PASSED!
+0x0900 to 0x097F String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x09000x097F) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0900_Devanagari/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0900_Devanagari/test.swf
new file mode 100644
index 000000000..babb1d62d
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0900_Devanagari/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0900_Devanagari/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0900_Devanagari/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0900_Devanagari/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0980_Bengali/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0980_Bengali/Test.as
new file mode 100644
index 000000000..d26774023
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0980_Bengali/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "Bengali";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // Bengali
+ testUnicodeRange(0x0980, 0x09FF);
+ negativeTestUnicodeRange(0x0980, 0x09FF);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0980_Bengali/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0980_Bengali/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0980_Bengali/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0980_Bengali/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0980_Bengali/output.txt
new file mode 100644
index 000000000..2ba1332c3
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0980_Bengali/output.txt
@@ -0,0 +1,21 @@
+Unicode String.search from 0x0980 to 0x0980 PASSED!
+Unicode String.search for 3 chars from 0x0980 to 0x0980 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0x0980 to 0x09FF String.search(undefined) PASSED!
+0x0980 to 0x09FF String.search() PASSED!
+Negative String.match PASSED!
+0x0980 to 0x09FF String.match(undefined) PASSED!
+0x0980 to 0x09FF String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x09800x09FF) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0980_Bengali/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0980_Bengali/test.swf
new file mode 100644
index 000000000..26baa948a
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0980_Bengali/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0980_Bengali/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0980_Bengali/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0980_Bengali/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0A00_Gurmukhi/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0A00_Gurmukhi/Test.as
new file mode 100644
index 000000000..8c0af4383
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0A00_Gurmukhi/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "Gurmukhi";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // Gurmukhi
+ testUnicodeRange(0x0A00, 0x0A7F);
+ negativeTestUnicodeRange(0x0A00, 0x0A7F);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0A00_Gurmukhi/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0A00_Gurmukhi/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0A00_Gurmukhi/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0A00_Gurmukhi/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0A00_Gurmukhi/output.txt
new file mode 100644
index 000000000..2de5c76e1
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0A00_Gurmukhi/output.txt
@@ -0,0 +1,21 @@
+Unicode String.search from 0x0A00 to 0x0A00 PASSED!
+Unicode String.search for 3 chars from 0x0A00 to 0x0A00 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0x0A00 to 0x0A7F String.search(undefined) PASSED!
+0x0A00 to 0x0A7F String.search() PASSED!
+Negative String.match PASSED!
+0x0A00 to 0x0A7F String.match(undefined) PASSED!
+0x0A00 to 0x0A7F String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x0A000x0A7F) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0A00_Gurmukhi/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0A00_Gurmukhi/test.swf
new file mode 100644
index 000000000..21585477d
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0A00_Gurmukhi/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0A00_Gurmukhi/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0A00_Gurmukhi/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0A00_Gurmukhi/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0A80_Gujarati/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0A80_Gujarati/Test.as
new file mode 100644
index 000000000..e63ce0006
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0A80_Gujarati/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "Gujarati";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // Gujarati
+ testUnicodeRange(0x0A80, 0x0AFF);
+ negativeTestUnicodeRange(0x0A80, 0x0AFF);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0A80_Gujarati/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0A80_Gujarati/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0A80_Gujarati/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0A80_Gujarati/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0A80_Gujarati/output.txt
new file mode 100644
index 000000000..667f15a14
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0A80_Gujarati/output.txt
@@ -0,0 +1,21 @@
+Unicode String.search from 0x0A80 to 0x0A80 PASSED!
+Unicode String.search for 3 chars from 0x0A80 to 0x0A80 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0x0A80 to 0x0AFF String.search(undefined) PASSED!
+0x0A80 to 0x0AFF String.search() PASSED!
+Negative String.match PASSED!
+0x0A80 to 0x0AFF String.match(undefined) PASSED!
+0x0A80 to 0x0AFF String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x0A800x0AFF) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0A80_Gujarati/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0A80_Gujarati/test.swf
new file mode 100644
index 000000000..56d328eb5
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0A80_Gujarati/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0A80_Gujarati/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0A80_Gujarati/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0A80_Gujarati/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0B00_Oriya/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0B00_Oriya/Test.as
new file mode 100644
index 000000000..c1fb3089b
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0B00_Oriya/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "Oriya";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // Oriya
+ testUnicodeRange(0x0B00, 0x0B7F);
+ negativeTestUnicodeRange(0x0B00, 0x0B7F);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0B00_Oriya/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0B00_Oriya/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0B00_Oriya/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0B00_Oriya/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0B00_Oriya/output.txt
new file mode 100644
index 000000000..61037d245
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0B00_Oriya/output.txt
@@ -0,0 +1,21 @@
+Unicode String.search from 0x0B00 to 0x0B00 PASSED!
+Unicode String.search for 3 chars from 0x0B00 to 0x0B00 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0x0B00 to 0x0B7F String.search(undefined) PASSED!
+0x0B00 to 0x0B7F String.search() PASSED!
+Negative String.match PASSED!
+0x0B00 to 0x0B7F String.match(undefined) PASSED!
+0x0B00 to 0x0B7F String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x0B000x0B7F) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0B00_Oriya/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0B00_Oriya/test.swf
new file mode 100644
index 000000000..a68223d3f
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0B00_Oriya/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0B00_Oriya/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0B00_Oriya/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0B00_Oriya/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0B80_Tamil/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0B80_Tamil/Test.as
new file mode 100644
index 000000000..c3bf63076
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0B80_Tamil/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "Tamil";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // Tamil
+ testUnicodeRange(0x0B80, 0x0BFF);
+ negativeTestUnicodeRange(0x0B80, 0x0BFF);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0B80_Tamil/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0B80_Tamil/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0B80_Tamil/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0B80_Tamil/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0B80_Tamil/output.txt
new file mode 100644
index 000000000..ab2c121df
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0B80_Tamil/output.txt
@@ -0,0 +1,21 @@
+Unicode String.search from 0x0B80 to 0x0B80 PASSED!
+Unicode String.search for 3 chars from 0x0B80 to 0x0B80 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0x0B80 to 0x0BFF String.search(undefined) PASSED!
+0x0B80 to 0x0BFF String.search() PASSED!
+Negative String.match PASSED!
+0x0B80 to 0x0BFF String.match(undefined) PASSED!
+0x0B80 to 0x0BFF String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x0B800x0BFF) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0B80_Tamil/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0B80_Tamil/test.swf
new file mode 100644
index 000000000..bdb713ecf
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0B80_Tamil/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0B80_Tamil/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0B80_Tamil/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0B80_Tamil/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0C00_Telugu/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0C00_Telugu/Test.as
new file mode 100644
index 000000000..bf2aeb7ad
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0C00_Telugu/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "Telugu";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // Telugu
+ testUnicodeRange(0x0C00, 0x0C7F);
+ negativeTestUnicodeRange(0x0C00, 0x0C7F);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0C00_Telugu/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0C00_Telugu/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0C00_Telugu/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0C00_Telugu/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0C00_Telugu/output.txt
new file mode 100644
index 000000000..fcca42226
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0C00_Telugu/output.txt
@@ -0,0 +1,21 @@
+Unicode String.search from 0x0C00 to 0x0C00 PASSED!
+Unicode String.search for 3 chars from 0x0C00 to 0x0C00 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0x0C00 to 0x0C7F String.search(undefined) PASSED!
+0x0C00 to 0x0C7F String.search() PASSED!
+Negative String.match PASSED!
+0x0C00 to 0x0C7F String.match(undefined) PASSED!
+0x0C00 to 0x0C7F String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x0C000x0C7F) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0C00_Telugu/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0C00_Telugu/test.swf
new file mode 100644
index 000000000..12789983c
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0C00_Telugu/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0C00_Telugu/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0C00_Telugu/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0C00_Telugu/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0C80_Kannada/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0C80_Kannada/Test.as
new file mode 100644
index 000000000..58b237586
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0C80_Kannada/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "Kannada";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // Kannada
+ testUnicodeRange(0x0C80, 0x0CFF);
+ negativeTestUnicodeRange(0x0C80, 0x0CFF);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0C80_Kannada/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0C80_Kannada/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0C80_Kannada/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0C80_Kannada/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0C80_Kannada/output.txt
new file mode 100644
index 000000000..7b9862b5e
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0C80_Kannada/output.txt
@@ -0,0 +1,21 @@
+Unicode String.search from 0x0C80 to 0x0C80 PASSED!
+Unicode String.search for 3 chars from 0x0C80 to 0x0C80 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0x0C80 to 0x0CFF String.search(undefined) PASSED!
+0x0C80 to 0x0CFF String.search() PASSED!
+Negative String.match PASSED!
+0x0C80 to 0x0CFF String.match(undefined) PASSED!
+0x0C80 to 0x0CFF String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x0C800x0CFF) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0C80_Kannada/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0C80_Kannada/test.swf
new file mode 100644
index 000000000..2b3b745a5
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0C80_Kannada/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0C80_Kannada/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0C80_Kannada/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0C80_Kannada/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0D00_Malayalam/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0D00_Malayalam/Test.as
new file mode 100644
index 000000000..7060885ac
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0D00_Malayalam/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "Malayalam";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // Malayalam
+ testUnicodeRange(0x0D00, 0x0D7F);
+ negativeTestUnicodeRange(0x0D00, 0x0D7F);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0D00_Malayalam/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0D00_Malayalam/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0D00_Malayalam/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0D00_Malayalam/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0D00_Malayalam/output.txt
new file mode 100644
index 000000000..c3f90dca1
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0D00_Malayalam/output.txt
@@ -0,0 +1,21 @@
+Unicode String.search from 0x0D00 to 0x0D00 PASSED!
+Unicode String.search for 3 chars from 0x0D00 to 0x0D00 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0x0D00 to 0x0D7F String.search(undefined) PASSED!
+0x0D00 to 0x0D7F String.search() PASSED!
+Negative String.match PASSED!
+0x0D00 to 0x0D7F String.match(undefined) PASSED!
+0x0D00 to 0x0D7F String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x0D000x0D7F) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0D00_Malayalam/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0D00_Malayalam/test.swf
new file mode 100644
index 000000000..6ad9764d6
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0D00_Malayalam/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0D00_Malayalam/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0D00_Malayalam/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0D00_Malayalam/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0D80_Sinhala/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0D80_Sinhala/Test.as
new file mode 100644
index 000000000..cd50b4b3b
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0D80_Sinhala/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "Sinhala";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // Sinhala
+ testUnicodeRange(0x0D80, 0x0DFF);
+ negativeTestUnicodeRange(0x0D80, 0x0DFF);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0D80_Sinhala/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0D80_Sinhala/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0D80_Sinhala/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0D80_Sinhala/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0D80_Sinhala/output.txt
new file mode 100644
index 000000000..177a8fbdc
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0D80_Sinhala/output.txt
@@ -0,0 +1,21 @@
+Unicode String.search from 0x0D80 to 0x0D80 PASSED!
+Unicode String.search for 3 chars from 0x0D80 to 0x0D80 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0x0D80 to 0x0DFF String.search(undefined) PASSED!
+0x0D80 to 0x0DFF String.search() PASSED!
+Negative String.match PASSED!
+0x0D80 to 0x0DFF String.match(undefined) PASSED!
+0x0D80 to 0x0DFF String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x0D800x0DFF) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0D80_Sinhala/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0D80_Sinhala/test.swf
new file mode 100644
index 000000000..0bf41d82d
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0D80_Sinhala/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0D80_Sinhala/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0D80_Sinhala/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0D80_Sinhala/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0E00_Thai/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0E00_Thai/Test.as
new file mode 100644
index 000000000..141a44978
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0E00_Thai/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "Thai";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // Thai
+ testUnicodeRange(0x0E00, 0x0E7F);
+ negativeTestUnicodeRange(0x0E00, 0x0E7F);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0E00_Thai/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0E00_Thai/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0E00_Thai/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0E00_Thai/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0E00_Thai/output.txt
new file mode 100644
index 000000000..90298d183
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0E00_Thai/output.txt
@@ -0,0 +1,21 @@
+Unicode String.search from 0x0E00 to 0x0E00 PASSED!
+Unicode String.search for 3 chars from 0x0E00 to 0x0E00 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0x0E00 to 0x0E7F String.search(undefined) PASSED!
+0x0E00 to 0x0E7F String.search() PASSED!
+Negative String.match PASSED!
+0x0E00 to 0x0E7F String.match(undefined) PASSED!
+0x0E00 to 0x0E7F String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x0E000x0E7F) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0E00_Thai/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0E00_Thai/test.swf
new file mode 100644
index 000000000..fbf388177
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0E00_Thai/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0E00_Thai/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0E00_Thai/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0E00_Thai/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0E80_Lao/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0E80_Lao/Test.as
new file mode 100644
index 000000000..4fd04dd86
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0E80_Lao/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "Lao";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // Lao
+ testUnicodeRange(0x0E80, 0x0EFF);
+ negativeTestUnicodeRange(0x0E80, 0x0EFF);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0E80_Lao/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0E80_Lao/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0E80_Lao/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0E80_Lao/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0E80_Lao/output.txt
new file mode 100644
index 000000000..b12cd2751
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0E80_Lao/output.txt
@@ -0,0 +1,21 @@
+Unicode String.search from 0x0E80 to 0x0E80 PASSED!
+Unicode String.search for 3 chars from 0x0E80 to 0x0E80 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0x0E80 to 0x0EFF String.search(undefined) PASSED!
+0x0E80 to 0x0EFF String.search() PASSED!
+Negative String.match PASSED!
+0x0E80 to 0x0EFF String.match(undefined) PASSED!
+0x0E80 to 0x0EFF String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x0E800x0EFF) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0E80_Lao/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0E80_Lao/test.swf
new file mode 100644
index 000000000..9fb95f067
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0E80_Lao/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0E80_Lao/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0E80_Lao/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0E80_Lao/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0F00_Tibetan/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0F00_Tibetan/Test.as
new file mode 100644
index 000000000..112ccc7ee
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0F00_Tibetan/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "Tibetan";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // Tibetan
+ testUnicodeRange(0x0F00, 0x0FFF);
+ negativeTestUnicodeRange(0x0F00, 0x0FFF);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0F00_Tibetan/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0F00_Tibetan/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0F00_Tibetan/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0F00_Tibetan/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0F00_Tibetan/output.txt
new file mode 100644
index 000000000..15f1bf00d
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0F00_Tibetan/output.txt
@@ -0,0 +1,42 @@
+Unicode String.search from 0x0F00 to 0x0F00 PASSED!
+Unicode String.search for 3 chars from 0x0F00 to 0x0F00 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x0FFB to 0x0FFB PASSED!
+Unicode String.search for 3 chars from 0x0FFB to 0x0FFB PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0x0F00 to 0x0FFA String.search(undefined) PASSED!
+0x0F00 to 0x0FFA String.search() PASSED!
+Negative String.match PASSED!
+0x0F00 to 0x0FFA String.match(undefined) PASSED!
+0x0F00 to 0x0FFA String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x0F000x0FFA) PASSED!
+Negative String.search PASSED!
+0x0FFB to 0x0FFF String.search(undefined) PASSED!
+0x0FFB to 0x0FFF String.search() PASSED!
+Negative String.match PASSED!
+0x0FFB to 0x0FFF String.match(undefined) PASSED!
+0x0FFB to 0x0FFF String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x0FFB0x0FFF) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0F00_Tibetan/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0F00_Tibetan/test.swf
new file mode 100644
index 000000000..7ad73ea9f
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0F00_Tibetan/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0F00_Tibetan/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0F00_Tibetan/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u0F00_Tibetan/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1000_Myanmar/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1000_Myanmar/Test.as
new file mode 100644
index 000000000..16fbf91ec
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1000_Myanmar/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "Myanmar";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // Myanmar
+ testUnicodeRange(0x1000, 0x109F);
+ negativeTestUnicodeRange(0x1000, 0x109F);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1000_Myanmar/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1000_Myanmar/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1000_Myanmar/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1000_Myanmar/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1000_Myanmar/output.txt
new file mode 100644
index 000000000..9600f4af4
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1000_Myanmar/output.txt
@@ -0,0 +1,21 @@
+Unicode String.search from 0x1000 to 0x1000 PASSED!
+Unicode String.search for 3 chars from 0x1000 to 0x1000 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0x1000 to 0x109F String.search(undefined) PASSED!
+0x1000 to 0x109F String.search() PASSED!
+Negative String.match PASSED!
+0x1000 to 0x109F String.match(undefined) PASSED!
+0x1000 to 0x109F String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x10000x109F) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1000_Myanmar/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1000_Myanmar/test.swf
new file mode 100644
index 000000000..026312948
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1000_Myanmar/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1000_Myanmar/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1000_Myanmar/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1000_Myanmar/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u10A0_Georgian/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u10A0_Georgian/Test.as
new file mode 100644
index 000000000..f4b64a427
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u10A0_Georgian/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "Georgian";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // Georgian
+ testUnicodeRange(0x10A0, 0x10FF);
+ negativeTestUnicodeRange(0x10A0, 0x10FF);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u10A0_Georgian/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u10A0_Georgian/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u10A0_Georgian/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u10A0_Georgian/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u10A0_Georgian/output.txt
new file mode 100644
index 000000000..d1aae19c1
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u10A0_Georgian/output.txt
@@ -0,0 +1,21 @@
+Unicode String.search from 0x10A0 to 0x10A0 PASSED!
+Unicode String.search for 3 chars from 0x10A0 to 0x10A0 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0x10A0 to 0x10FF String.search(undefined) PASSED!
+0x10A0 to 0x10FF String.search() PASSED!
+Negative String.match PASSED!
+0x10A0 to 0x10FF String.match(undefined) PASSED!
+0x10A0 to 0x10FF String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x10A00x10FF) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u10A0_Georgian/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u10A0_Georgian/test.swf
new file mode 100644
index 000000000..22c0bd6bd
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u10A0_Georgian/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u10A0_Georgian/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u10A0_Georgian/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u10A0_Georgian/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1100_HangulJamo/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1100_HangulJamo/Test.as
new file mode 100644
index 000000000..e1a8341fa
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1100_HangulJamo/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "Hangul Jamo";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // Hangul Jamo
+ testUnicodeRange(0x1100, 0x11FF);
+ negativeTestUnicodeRange(0x1100, 0x11FF);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1100_HangulJamo/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1100_HangulJamo/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1100_HangulJamo/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1100_HangulJamo/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1100_HangulJamo/output.txt
new file mode 100644
index 000000000..049930193
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1100_HangulJamo/output.txt
@@ -0,0 +1,42 @@
+Unicode String.search from 0x1100 to 0x1100 PASSED!
+Unicode String.search for 3 chars from 0x1100 to 0x1100 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x11FB to 0x11FB PASSED!
+Unicode String.search for 3 chars from 0x11FB to 0x11FB PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0x1100 to 0x11FA String.search(undefined) PASSED!
+0x1100 to 0x11FA String.search() PASSED!
+Negative String.match PASSED!
+0x1100 to 0x11FA String.match(undefined) PASSED!
+0x1100 to 0x11FA String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x11000x11FA) PASSED!
+Negative String.search PASSED!
+0x11FB to 0x11FF String.search(undefined) PASSED!
+0x11FB to 0x11FF String.search() PASSED!
+Negative String.match PASSED!
+0x11FB to 0x11FF String.match(undefined) PASSED!
+0x11FB to 0x11FF String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x11FB0x11FF) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1100_HangulJamo/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1100_HangulJamo/test.swf
new file mode 100644
index 000000000..ce8b38d93
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1100_HangulJamo/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1100_HangulJamo/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1100_HangulJamo/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1100_HangulJamo/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1200_Ethiopic/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1200_Ethiopic/Test.as
new file mode 100644
index 000000000..8af31854a
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1200_Ethiopic/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "Ethiopic";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // Ethiopic
+ testUnicodeRange(0x1200, 0x137F);
+ negativeTestUnicodeRange(0x1200, 0x137F);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1200_Ethiopic/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1200_Ethiopic/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1200_Ethiopic/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1200_Ethiopic/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1200_Ethiopic/output.txt
new file mode 100644
index 000000000..228aa00ea
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1200_Ethiopic/output.txt
@@ -0,0 +1,42 @@
+Unicode String.search from 0x1200 to 0x1200 PASSED!
+Unicode String.search for 3 chars from 0x1200 to 0x1200 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x12FB to 0x12FB PASSED!
+Unicode String.search for 3 chars from 0x12FB to 0x12FB PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0x1200 to 0x12FA String.search(undefined) PASSED!
+0x1200 to 0x12FA String.search() PASSED!
+Negative String.match PASSED!
+0x1200 to 0x12FA String.match(undefined) PASSED!
+0x1200 to 0x12FA String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x12000x12FA) PASSED!
+Negative String.search PASSED!
+0x12FB to 0x137F String.search(undefined) PASSED!
+0x12FB to 0x137F String.search() PASSED!
+Negative String.match PASSED!
+0x12FB to 0x137F String.match(undefined) PASSED!
+0x12FB to 0x137F String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x12FB0x137F) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1200_Ethiopic/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1200_Ethiopic/test.swf
new file mode 100644
index 000000000..5bed67ebb
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1200_Ethiopic/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1200_Ethiopic/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1200_Ethiopic/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1200_Ethiopic/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u13A0_Cherokee/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u13A0_Cherokee/Test.as
new file mode 100644
index 000000000..a0fae10c9
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u13A0_Cherokee/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "Cherokee";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // Cherokee
+ testUnicodeRange(0x13A0, 0x13FF);
+ negativeTestUnicodeRange(0x13A0, 0x13FF);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u13A0_Cherokee/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u13A0_Cherokee/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u13A0_Cherokee/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u13A0_Cherokee/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u13A0_Cherokee/output.txt
new file mode 100644
index 000000000..6f0a3bb6c
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u13A0_Cherokee/output.txt
@@ -0,0 +1,21 @@
+Unicode String.search from 0x13A0 to 0x13A0 PASSED!
+Unicode String.search for 3 chars from 0x13A0 to 0x13A0 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0x13A0 to 0x13FF String.search(undefined) PASSED!
+0x13A0 to 0x13FF String.search() PASSED!
+Negative String.match PASSED!
+0x13A0 to 0x13FF String.match(undefined) PASSED!
+0x13A0 to 0x13FF String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x13A00x13FF) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u13A0_Cherokee/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u13A0_Cherokee/test.swf
new file mode 100644
index 000000000..37ba6966e
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u13A0_Cherokee/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u13A0_Cherokee/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u13A0_Cherokee/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u13A0_Cherokee/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1400_UnifiedCanadianAboriginalSyllabics/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1400_UnifiedCanadianAboriginalSyllabics/Test.as
new file mode 100644
index 000000000..d60bffc44
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1400_UnifiedCanadianAboriginalSyllabics/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "Unified Canadian Aboriginal Syllabics";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // Unified Canadian Aboriginal Syllabics
+ testUnicodeRange(0x1400, 0x167F);
+ negativeTestUnicodeRange(0x1400, 0x167F);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1400_UnifiedCanadianAboriginalSyllabics/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1400_UnifiedCanadianAboriginalSyllabics/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1400_UnifiedCanadianAboriginalSyllabics/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1400_UnifiedCanadianAboriginalSyllabics/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1400_UnifiedCanadianAboriginalSyllabics/output.txt
new file mode 100644
index 000000000..1919b2567
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1400_UnifiedCanadianAboriginalSyllabics/output.txt
@@ -0,0 +1,63 @@
+Unicode String.search from 0x1400 to 0x1400 PASSED!
+Unicode String.search for 3 chars from 0x1400 to 0x1400 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x14FB to 0x14FB PASSED!
+Unicode String.search for 3 chars from 0x14FB to 0x14FB PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x15F6 to 0x15F6 PASSED!
+Unicode String.search for 3 chars from 0x15F6 to 0x15F6 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0x1400 to 0x14FA String.search(undefined) PASSED!
+0x1400 to 0x14FA String.search() PASSED!
+Negative String.match PASSED!
+0x1400 to 0x14FA String.match(undefined) PASSED!
+0x1400 to 0x14FA String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x14000x14FA) PASSED!
+Negative String.search PASSED!
+0x14FB to 0x15F5 String.search(undefined) PASSED!
+0x14FB to 0x15F5 String.search() PASSED!
+Negative String.match PASSED!
+0x14FB to 0x15F5 String.match(undefined) PASSED!
+0x14FB to 0x15F5 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x14FB0x15F5) PASSED!
+Negative String.search PASSED!
+0x15F6 to 0x167F String.search(undefined) PASSED!
+0x15F6 to 0x167F String.search() PASSED!
+Negative String.match PASSED!
+0x15F6 to 0x167F String.match(undefined) PASSED!
+0x15F6 to 0x167F String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x15F60x167F) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1400_UnifiedCanadianAboriginalSyllabics/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1400_UnifiedCanadianAboriginalSyllabics/test.swf
new file mode 100644
index 000000000..f69d6b3f6
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1400_UnifiedCanadianAboriginalSyllabics/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1400_UnifiedCanadianAboriginalSyllabics/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1400_UnifiedCanadianAboriginalSyllabics/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1400_UnifiedCanadianAboriginalSyllabics/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1680_Ogham/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1680_Ogham/Test.as
new file mode 100644
index 000000000..f045b3d4b
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1680_Ogham/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "Ogham";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // Ogham
+ testUnicodeRange(0x1680, 0x169F);
+ negativeTestUnicodeRange(0x1680, 0x169F);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1680_Ogham/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1680_Ogham/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1680_Ogham/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1680_Ogham/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1680_Ogham/output.txt
new file mode 100644
index 000000000..5a12cdb22
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1680_Ogham/output.txt
@@ -0,0 +1,21 @@
+Unicode String.search from 0x1680 to 0x1680 PASSED!
+Unicode String.search for 3 chars from 0x1680 to 0x1680 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0x1680 to 0x169F String.search(undefined) PASSED!
+0x1680 to 0x169F String.search() PASSED!
+Negative String.match PASSED!
+0x1680 to 0x169F String.match(undefined) PASSED!
+0x1680 to 0x169F String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x16800x169F) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1680_Ogham/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1680_Ogham/test.swf
new file mode 100644
index 000000000..e641cf86f
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1680_Ogham/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1680_Ogham/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1680_Ogham/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1680_Ogham/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u16A0_Runic/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u16A0_Runic/Test.as
new file mode 100644
index 000000000..a5135f6d8
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u16A0_Runic/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "Runic";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // Runic
+ testUnicodeRange(0x16A0, 0x16FF);
+ negativeTestUnicodeRange(0x16A0, 0x16FF);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u16A0_Runic/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u16A0_Runic/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u16A0_Runic/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u16A0_Runic/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u16A0_Runic/output.txt
new file mode 100644
index 000000000..923cc38af
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u16A0_Runic/output.txt
@@ -0,0 +1,21 @@
+Unicode String.search from 0x16A0 to 0x16A0 PASSED!
+Unicode String.search for 3 chars from 0x16A0 to 0x16A0 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0x16A0 to 0x16FF String.search(undefined) PASSED!
+0x16A0 to 0x16FF String.search() PASSED!
+Negative String.match PASSED!
+0x16A0 to 0x16FF String.match(undefined) PASSED!
+0x16A0 to 0x16FF String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x16A00x16FF) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u16A0_Runic/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u16A0_Runic/test.swf
new file mode 100644
index 000000000..86920daac
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u16A0_Runic/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u16A0_Runic/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u16A0_Runic/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u16A0_Runic/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1700_Tagalog/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1700_Tagalog/Test.as
new file mode 100644
index 000000000..175c07f68
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1700_Tagalog/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "Tagalog";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // Tagalog
+ testUnicodeRange(0x1700, 0x171F);
+ negativeTestUnicodeRange(0x1700, 0x171F);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1700_Tagalog/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1700_Tagalog/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1700_Tagalog/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1700_Tagalog/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1700_Tagalog/output.txt
new file mode 100644
index 000000000..f21b3dfd6
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1700_Tagalog/output.txt
@@ -0,0 +1,21 @@
+Unicode String.search from 0x1700 to 0x1700 PASSED!
+Unicode String.search for 3 chars from 0x1700 to 0x1700 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0x1700 to 0x171F String.search(undefined) PASSED!
+0x1700 to 0x171F String.search() PASSED!
+Negative String.match PASSED!
+0x1700 to 0x171F String.match(undefined) PASSED!
+0x1700 to 0x171F String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x17000x171F) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1700_Tagalog/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1700_Tagalog/test.swf
new file mode 100644
index 000000000..562301715
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1700_Tagalog/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1700_Tagalog/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1700_Tagalog/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1700_Tagalog/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1720_Hanunoo/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1720_Hanunoo/Test.as
new file mode 100644
index 000000000..d25e07e79
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1720_Hanunoo/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "Hanunoo";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // Hanunoo
+ testUnicodeRange(0x1720, 0x173F);
+ negativeTestUnicodeRange(0x1720, 0x173F);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1720_Hanunoo/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1720_Hanunoo/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1720_Hanunoo/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1720_Hanunoo/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1720_Hanunoo/output.txt
new file mode 100644
index 000000000..9d84d49b4
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1720_Hanunoo/output.txt
@@ -0,0 +1,21 @@
+Unicode String.search from 0x1720 to 0x1720 PASSED!
+Unicode String.search for 3 chars from 0x1720 to 0x1720 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0x1720 to 0x173F String.search(undefined) PASSED!
+0x1720 to 0x173F String.search() PASSED!
+Negative String.match PASSED!
+0x1720 to 0x173F String.match(undefined) PASSED!
+0x1720 to 0x173F String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x17200x173F) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1720_Hanunoo/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1720_Hanunoo/test.swf
new file mode 100644
index 000000000..6c8f56386
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1720_Hanunoo/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1720_Hanunoo/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1720_Hanunoo/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1720_Hanunoo/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1740_Buhid/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1740_Buhid/Test.as
new file mode 100644
index 000000000..cf384a1dd
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1740_Buhid/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "Buhid";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // Buhid
+ testUnicodeRange(0x1740, 0x175F);
+ negativeTestUnicodeRange(0x1740, 0x175F);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1740_Buhid/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1740_Buhid/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1740_Buhid/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1740_Buhid/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1740_Buhid/output.txt
new file mode 100644
index 000000000..03772f3cc
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1740_Buhid/output.txt
@@ -0,0 +1,21 @@
+Unicode String.search from 0x1740 to 0x1740 PASSED!
+Unicode String.search for 3 chars from 0x1740 to 0x1740 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0x1740 to 0x175F String.search(undefined) PASSED!
+0x1740 to 0x175F String.search() PASSED!
+Negative String.match PASSED!
+0x1740 to 0x175F String.match(undefined) PASSED!
+0x1740 to 0x175F String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x17400x175F) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1740_Buhid/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1740_Buhid/test.swf
new file mode 100644
index 000000000..0b10f2adb
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1740_Buhid/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1740_Buhid/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1740_Buhid/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1740_Buhid/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1760_Tagbanwa/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1760_Tagbanwa/Test.as
new file mode 100644
index 000000000..18789c47a
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1760_Tagbanwa/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "Tagbanwa";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // Tagbanwa
+ testUnicodeRange(0x1760, 0x177F);
+ negativeTestUnicodeRange(0x1760, 0x177F);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1760_Tagbanwa/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1760_Tagbanwa/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1760_Tagbanwa/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1760_Tagbanwa/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1760_Tagbanwa/output.txt
new file mode 100644
index 000000000..6a0a35f3f
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1760_Tagbanwa/output.txt
@@ -0,0 +1,21 @@
+Unicode String.search from 0x1760 to 0x1760 PASSED!
+Unicode String.search for 3 chars from 0x1760 to 0x1760 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0x1760 to 0x177F String.search(undefined) PASSED!
+0x1760 to 0x177F String.search() PASSED!
+Negative String.match PASSED!
+0x1760 to 0x177F String.match(undefined) PASSED!
+0x1760 to 0x177F String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x17600x177F) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1760_Tagbanwa/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1760_Tagbanwa/test.swf
new file mode 100644
index 000000000..5ede8cfde
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1760_Tagbanwa/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1760_Tagbanwa/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1760_Tagbanwa/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1760_Tagbanwa/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1780_Khmer/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1780_Khmer/Test.as
new file mode 100644
index 000000000..4d3b0c12b
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1780_Khmer/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "Khmer";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // Khmer
+ testUnicodeRange(0x1780, 0x17FF);
+ negativeTestUnicodeRange(0x1780, 0x17FF);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1780_Khmer/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1780_Khmer/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1780_Khmer/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1780_Khmer/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1780_Khmer/output.txt
new file mode 100644
index 000000000..d3aa90819
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1780_Khmer/output.txt
@@ -0,0 +1,21 @@
+Unicode String.search from 0x1780 to 0x1780 PASSED!
+Unicode String.search for 3 chars from 0x1780 to 0x1780 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0x1780 to 0x17FF String.search(undefined) PASSED!
+0x1780 to 0x17FF String.search() PASSED!
+Negative String.match PASSED!
+0x1780 to 0x17FF String.match(undefined) PASSED!
+0x1780 to 0x17FF String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x17800x17FF) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1780_Khmer/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1780_Khmer/test.swf
new file mode 100644
index 000000000..4980b7cec
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1780_Khmer/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1780_Khmer/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1780_Khmer/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1780_Khmer/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1800_Mongolian/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1800_Mongolian/Test.as
new file mode 100644
index 000000000..51b1f1952
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1800_Mongolian/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "Mongolian";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // Mongolian
+ testUnicodeRange(0x1800, 0x18AF);
+ negativeTestUnicodeRange(0x1800, 0x18AF);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1800_Mongolian/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1800_Mongolian/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1800_Mongolian/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1800_Mongolian/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1800_Mongolian/output.txt
new file mode 100644
index 000000000..a95985a04
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1800_Mongolian/output.txt
@@ -0,0 +1,21 @@
+Unicode String.search from 0x1800 to 0x1800 PASSED!
+Unicode String.search for 3 chars from 0x1800 to 0x1800 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0x1800 to 0x18AF String.search(undefined) PASSED!
+0x1800 to 0x18AF String.search() PASSED!
+Negative String.match PASSED!
+0x1800 to 0x18AF String.match(undefined) PASSED!
+0x1800 to 0x18AF String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x18000x18AF) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1800_Mongolian/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1800_Mongolian/test.swf
new file mode 100644
index 000000000..343c860e8
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1800_Mongolian/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1800_Mongolian/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1800_Mongolian/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1800_Mongolian/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1E00_LatinExtendedAdditional/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1E00_LatinExtendedAdditional/Test.as
new file mode 100644
index 000000000..595d2c1e7
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1E00_LatinExtendedAdditional/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "Latin Extended Additional";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // Latin Extended Additional
+ testUnicodeRange(0x1E00, 0x1EFF);
+ negativeTestUnicodeRange(0x1E00, 0x1EFF);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1E00_LatinExtendedAdditional/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1E00_LatinExtendedAdditional/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1E00_LatinExtendedAdditional/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1E00_LatinExtendedAdditional/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1E00_LatinExtendedAdditional/output.txt
new file mode 100644
index 000000000..ac77a9c50
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1E00_LatinExtendedAdditional/output.txt
@@ -0,0 +1,42 @@
+Unicode String.search from 0x1E00 to 0x1E00 PASSED!
+Unicode String.search for 3 chars from 0x1E00 to 0x1E00 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x1EFB to 0x1EFB PASSED!
+Unicode String.search for 3 chars from 0x1EFB to 0x1EFB PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0x1E00 to 0x1EFA String.search(undefined) PASSED!
+0x1E00 to 0x1EFA String.search() PASSED!
+Negative String.match PASSED!
+0x1E00 to 0x1EFA String.match(undefined) PASSED!
+0x1E00 to 0x1EFA String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x1E000x1EFA) PASSED!
+Negative String.search PASSED!
+0x1EFB to 0x1EFF String.search(undefined) PASSED!
+0x1EFB to 0x1EFF String.search() PASSED!
+Negative String.match PASSED!
+0x1EFB to 0x1EFF String.match(undefined) PASSED!
+0x1EFB to 0x1EFF String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x1EFB0x1EFF) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1E00_LatinExtendedAdditional/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1E00_LatinExtendedAdditional/test.swf
new file mode 100644
index 000000000..7f9176e12
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1E00_LatinExtendedAdditional/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1E00_LatinExtendedAdditional/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1E00_LatinExtendedAdditional/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1E00_LatinExtendedAdditional/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1F00_GreekExtended/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1F00_GreekExtended/Test.as
new file mode 100644
index 000000000..adbac8088
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1F00_GreekExtended/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "Greek Extended";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // Greek Extended
+ testUnicodeRange(0x1F00, 0x1FFF);
+ negativeTestUnicodeRange(0x1F00, 0x1FFF);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1F00_GreekExtended/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1F00_GreekExtended/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1F00_GreekExtended/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1F00_GreekExtended/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1F00_GreekExtended/output.txt
new file mode 100644
index 000000000..d5234b07d
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1F00_GreekExtended/output.txt
@@ -0,0 +1,42 @@
+Unicode String.search from 0x1F00 to 0x1F00 PASSED!
+Unicode String.search for 3 chars from 0x1F00 to 0x1F00 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x1FFB to 0x1FFB PASSED!
+Unicode String.search for 3 chars from 0x1FFB to 0x1FFB PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0x1F00 to 0x1FFA String.search(undefined) PASSED!
+0x1F00 to 0x1FFA String.search() PASSED!
+Negative String.match PASSED!
+0x1F00 to 0x1FFA String.match(undefined) PASSED!
+0x1F00 to 0x1FFA String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x1F000x1FFA) PASSED!
+Negative String.search PASSED!
+0x1FFB to 0x1FFF String.search(undefined) PASSED!
+0x1FFB to 0x1FFF String.search() PASSED!
+Negative String.match PASSED!
+0x1FFB to 0x1FFF String.match(undefined) PASSED!
+0x1FFB to 0x1FFF String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x1FFB0x1FFF) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1F00_GreekExtended/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1F00_GreekExtended/test.swf
new file mode 100644
index 000000000..0aa90b5d7
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1F00_GreekExtended/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1F00_GreekExtended/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1F00_GreekExtended/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u1F00_GreekExtended/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2000_GeneralPunctuation/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2000_GeneralPunctuation/Test.as
new file mode 100644
index 000000000..f149bf930
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2000_GeneralPunctuation/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "General Punctuation";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // General Punctuation
+ testUnicodeRange(0x2000, 0x206F);
+ negativeTestUnicodeRange(0x2000, 0x206F);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2000_GeneralPunctuation/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2000_GeneralPunctuation/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2000_GeneralPunctuation/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2000_GeneralPunctuation/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2000_GeneralPunctuation/output.txt
new file mode 100644
index 000000000..c3ce5959b
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2000_GeneralPunctuation/output.txt
@@ -0,0 +1,21 @@
+Unicode String.search from 0x2000 to 0x2000 PASSED!
+Unicode String.search for 3 chars from 0x2000 to 0x2000 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0x2000 to 0x206F String.search(undefined) PASSED!
+0x2000 to 0x206F String.search() PASSED!
+Negative String.match PASSED!
+0x2000 to 0x206F String.match(undefined) PASSED!
+0x2000 to 0x206F String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x20000x206F) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2000_GeneralPunctuation/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2000_GeneralPunctuation/test.swf
new file mode 100644
index 000000000..9e908c645
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2000_GeneralPunctuation/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2000_GeneralPunctuation/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2000_GeneralPunctuation/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2000_GeneralPunctuation/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2070_SuperscriptsandSubscripts/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2070_SuperscriptsandSubscripts/Test.as
new file mode 100644
index 000000000..35893b5dd
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2070_SuperscriptsandSubscripts/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "Superscripts and Subscripts";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // Superscripts and Subscripts
+ testUnicodeRange(0x2070, 0x209F);
+ negativeTestUnicodeRange(0x2070, 0x209F);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2070_SuperscriptsandSubscripts/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2070_SuperscriptsandSubscripts/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2070_SuperscriptsandSubscripts/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2070_SuperscriptsandSubscripts/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2070_SuperscriptsandSubscripts/output.txt
new file mode 100644
index 000000000..092396cd9
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2070_SuperscriptsandSubscripts/output.txt
@@ -0,0 +1,21 @@
+Unicode String.search from 0x2070 to 0x2070 PASSED!
+Unicode String.search for 3 chars from 0x2070 to 0x2070 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0x2070 to 0x209F String.search(undefined) PASSED!
+0x2070 to 0x209F String.search() PASSED!
+Negative String.match PASSED!
+0x2070 to 0x209F String.match(undefined) PASSED!
+0x2070 to 0x209F String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x20700x209F) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2070_SuperscriptsandSubscripts/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2070_SuperscriptsandSubscripts/test.swf
new file mode 100644
index 000000000..d46973c24
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2070_SuperscriptsandSubscripts/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2070_SuperscriptsandSubscripts/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2070_SuperscriptsandSubscripts/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2070_SuperscriptsandSubscripts/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u20A0_CurrencySymbols/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u20A0_CurrencySymbols/Test.as
new file mode 100644
index 000000000..f914633e9
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u20A0_CurrencySymbols/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "Currency Symbols";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // Currency Symbols
+ testUnicodeRange(0x20A0, 0x20CF);
+ negativeTestUnicodeRange(0x20A0, 0x20CF);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u20A0_CurrencySymbols/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u20A0_CurrencySymbols/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u20A0_CurrencySymbols/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u20A0_CurrencySymbols/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u20A0_CurrencySymbols/output.txt
new file mode 100644
index 000000000..c4d66ddb0
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u20A0_CurrencySymbols/output.txt
@@ -0,0 +1,21 @@
+Unicode String.search from 0x20A0 to 0x20A0 PASSED!
+Unicode String.search for 3 chars from 0x20A0 to 0x20A0 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0x20A0 to 0x20CF String.search(undefined) PASSED!
+0x20A0 to 0x20CF String.search() PASSED!
+Negative String.match PASSED!
+0x20A0 to 0x20CF String.match(undefined) PASSED!
+0x20A0 to 0x20CF String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x20A00x20CF) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u20A0_CurrencySymbols/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u20A0_CurrencySymbols/test.swf
new file mode 100644
index 000000000..57aa1b00e
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u20A0_CurrencySymbols/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u20A0_CurrencySymbols/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u20A0_CurrencySymbols/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u20A0_CurrencySymbols/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u20D0_CombiningDiacriticalMarksforSymbols/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u20D0_CombiningDiacriticalMarksforSymbols/Test.as
new file mode 100644
index 000000000..ee033d972
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u20D0_CombiningDiacriticalMarksforSymbols/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "Combining Diacritical Marks for Symbols";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // Combining Diacritical Marks for Symbols
+ testUnicodeRange(0x20D0, 0x20FF);
+ negativeTestUnicodeRange(0x20D0, 0x20FF);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u20D0_CombiningDiacriticalMarksforSymbols/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u20D0_CombiningDiacriticalMarksforSymbols/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u20D0_CombiningDiacriticalMarksforSymbols/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u20D0_CombiningDiacriticalMarksforSymbols/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u20D0_CombiningDiacriticalMarksforSymbols/output.txt
new file mode 100644
index 000000000..70bea9361
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u20D0_CombiningDiacriticalMarksforSymbols/output.txt
@@ -0,0 +1,21 @@
+Unicode String.search from 0x20D0 to 0x20D0 PASSED!
+Unicode String.search for 3 chars from 0x20D0 to 0x20D0 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0x20D0 to 0x20FF String.search(undefined) PASSED!
+0x20D0 to 0x20FF String.search() PASSED!
+Negative String.match PASSED!
+0x20D0 to 0x20FF String.match(undefined) PASSED!
+0x20D0 to 0x20FF String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x20D00x20FF) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u20D0_CombiningDiacriticalMarksforSymbols/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u20D0_CombiningDiacriticalMarksforSymbols/test.swf
new file mode 100644
index 000000000..b7f941a35
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u20D0_CombiningDiacriticalMarksforSymbols/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u20D0_CombiningDiacriticalMarksforSymbols/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u20D0_CombiningDiacriticalMarksforSymbols/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u20D0_CombiningDiacriticalMarksforSymbols/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2100_LetterlikeSymbols/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2100_LetterlikeSymbols/Test.as
new file mode 100644
index 000000000..6db916141
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2100_LetterlikeSymbols/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "Letterlike Symbols";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // Letterlike Symbols
+ testUnicodeRange(0x2100, 0x214F);
+ negativeTestUnicodeRange(0x2100, 0x214F);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2100_LetterlikeSymbols/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2100_LetterlikeSymbols/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2100_LetterlikeSymbols/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2100_LetterlikeSymbols/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2100_LetterlikeSymbols/output.txt
new file mode 100644
index 000000000..5f19b9a73
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2100_LetterlikeSymbols/output.txt
@@ -0,0 +1,21 @@
+Unicode String.search from 0x2100 to 0x2100 PASSED!
+Unicode String.search for 3 chars from 0x2100 to 0x2100 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0x2100 to 0x214F String.search(undefined) PASSED!
+0x2100 to 0x214F String.search() PASSED!
+Negative String.match PASSED!
+0x2100 to 0x214F String.match(undefined) PASSED!
+0x2100 to 0x214F String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x21000x214F) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2100_LetterlikeSymbols/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2100_LetterlikeSymbols/test.swf
new file mode 100644
index 000000000..9bcebce87
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2100_LetterlikeSymbols/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2100_LetterlikeSymbols/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2100_LetterlikeSymbols/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2100_LetterlikeSymbols/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2150_NumberForms/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2150_NumberForms/Test.as
new file mode 100644
index 000000000..d175ddd82
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2150_NumberForms/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "Number Forms";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // Number Forms
+ testUnicodeRange(0x2150, 0x218F);
+ negativeTestUnicodeRange(0x2150, 0x218F);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2150_NumberForms/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2150_NumberForms/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2150_NumberForms/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2150_NumberForms/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2150_NumberForms/output.txt
new file mode 100644
index 000000000..b5b96cf28
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2150_NumberForms/output.txt
@@ -0,0 +1,21 @@
+Unicode String.search from 0x2150 to 0x2150 PASSED!
+Unicode String.search for 3 chars from 0x2150 to 0x2150 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0x2150 to 0x218F String.search(undefined) PASSED!
+0x2150 to 0x218F String.search() PASSED!
+Negative String.match PASSED!
+0x2150 to 0x218F String.match(undefined) PASSED!
+0x2150 to 0x218F String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x21500x218F) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2150_NumberForms/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2150_NumberForms/test.swf
new file mode 100644
index 000000000..073eb822c
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2150_NumberForms/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2150_NumberForms/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2150_NumberForms/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2150_NumberForms/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2190_Arrows/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2190_Arrows/Test.as
new file mode 100644
index 000000000..c6eb1cae1
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2190_Arrows/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "Arrows";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // Arrows
+ testUnicodeRange(0x2190, 0x21FF);
+ negativeTestUnicodeRange(0x2190, 0x21FF);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2190_Arrows/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2190_Arrows/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2190_Arrows/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2190_Arrows/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2190_Arrows/output.txt
new file mode 100644
index 000000000..5c0c8a988
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2190_Arrows/output.txt
@@ -0,0 +1,21 @@
+Unicode String.search from 0x2190 to 0x2190 PASSED!
+Unicode String.search for 3 chars from 0x2190 to 0x2190 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0x2190 to 0x21FF String.search(undefined) PASSED!
+0x2190 to 0x21FF String.search() PASSED!
+Negative String.match PASSED!
+0x2190 to 0x21FF String.match(undefined) PASSED!
+0x2190 to 0x21FF String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x21900x21FF) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2190_Arrows/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2190_Arrows/test.swf
new file mode 100644
index 000000000..9dcd50b6b
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2190_Arrows/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2190_Arrows/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2190_Arrows/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2190_Arrows/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2200_MathematicalOperators/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2200_MathematicalOperators/Test.as
new file mode 100644
index 000000000..3e6b34b15
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2200_MathematicalOperators/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "Mathematical Operators";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // Mathematical Operators
+ testUnicodeRange(0x2200, 0x22FF);
+ negativeTestUnicodeRange(0x2200, 0x22FF);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2200_MathematicalOperators/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2200_MathematicalOperators/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2200_MathematicalOperators/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2200_MathematicalOperators/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2200_MathematicalOperators/output.txt
new file mode 100644
index 000000000..687e30238
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2200_MathematicalOperators/output.txt
@@ -0,0 +1,42 @@
+Unicode String.search from 0x2200 to 0x2200 PASSED!
+Unicode String.search for 3 chars from 0x2200 to 0x2200 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x22FB to 0x22FB PASSED!
+Unicode String.search for 3 chars from 0x22FB to 0x22FB PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0x2200 to 0x22FA String.search(undefined) PASSED!
+0x2200 to 0x22FA String.search() PASSED!
+Negative String.match PASSED!
+0x2200 to 0x22FA String.match(undefined) PASSED!
+0x2200 to 0x22FA String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x22000x22FA) PASSED!
+Negative String.search PASSED!
+0x22FB to 0x22FF String.search(undefined) PASSED!
+0x22FB to 0x22FF String.search() PASSED!
+Negative String.match PASSED!
+0x22FB to 0x22FF String.match(undefined) PASSED!
+0x22FB to 0x22FF String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x22FB0x22FF) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2200_MathematicalOperators/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2200_MathematicalOperators/test.swf
new file mode 100644
index 000000000..742dcc1ca
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2200_MathematicalOperators/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2200_MathematicalOperators/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2200_MathematicalOperators/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2200_MathematicalOperators/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2300_MiscellaneousTechnical/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2300_MiscellaneousTechnical/Test.as
new file mode 100644
index 000000000..be39ffb13
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2300_MiscellaneousTechnical/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "Miscellaneous Technical";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // Miscellaneous Technical
+ testUnicodeRange(0x2300, 0x23FF);
+ negativeTestUnicodeRange(0x2300, 0x23FF);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2300_MiscellaneousTechnical/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2300_MiscellaneousTechnical/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2300_MiscellaneousTechnical/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2300_MiscellaneousTechnical/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2300_MiscellaneousTechnical/output.txt
new file mode 100644
index 000000000..337283884
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2300_MiscellaneousTechnical/output.txt
@@ -0,0 +1,42 @@
+Unicode String.search from 0x2300 to 0x2300 PASSED!
+Unicode String.search for 3 chars from 0x2300 to 0x2300 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x23FB to 0x23FB PASSED!
+Unicode String.search for 3 chars from 0x23FB to 0x23FB PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0x2300 to 0x23FA String.search(undefined) PASSED!
+0x2300 to 0x23FA String.search() PASSED!
+Negative String.match PASSED!
+0x2300 to 0x23FA String.match(undefined) PASSED!
+0x2300 to 0x23FA String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x23000x23FA) PASSED!
+Negative String.search PASSED!
+0x23FB to 0x23FF String.search(undefined) PASSED!
+0x23FB to 0x23FF String.search() PASSED!
+Negative String.match PASSED!
+0x23FB to 0x23FF String.match(undefined) PASSED!
+0x23FB to 0x23FF String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x23FB0x23FF) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2300_MiscellaneousTechnical/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2300_MiscellaneousTechnical/test.swf
new file mode 100644
index 000000000..6d2e82e69
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2300_MiscellaneousTechnical/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2300_MiscellaneousTechnical/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2300_MiscellaneousTechnical/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2300_MiscellaneousTechnical/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2400_ControlPictures/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2400_ControlPictures/Test.as
new file mode 100644
index 000000000..9cc235751
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2400_ControlPictures/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "Control Pictures";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // Control Pictures
+ testUnicodeRange(0x2400, 0x243F);
+ negativeTestUnicodeRange(0x2400, 0x243F);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2400_ControlPictures/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2400_ControlPictures/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2400_ControlPictures/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2400_ControlPictures/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2400_ControlPictures/output.txt
new file mode 100644
index 000000000..5d603c5a7
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2400_ControlPictures/output.txt
@@ -0,0 +1,21 @@
+Unicode String.search from 0x2400 to 0x2400 PASSED!
+Unicode String.search for 3 chars from 0x2400 to 0x2400 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0x2400 to 0x243F String.search(undefined) PASSED!
+0x2400 to 0x243F String.search() PASSED!
+Negative String.match PASSED!
+0x2400 to 0x243F String.match(undefined) PASSED!
+0x2400 to 0x243F String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x24000x243F) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2400_ControlPictures/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2400_ControlPictures/test.swf
new file mode 100644
index 000000000..30de7eae3
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2400_ControlPictures/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2400_ControlPictures/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2400_ControlPictures/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2400_ControlPictures/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2440_OpticalCharacterRecognition/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2440_OpticalCharacterRecognition/Test.as
new file mode 100644
index 000000000..06012f22c
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2440_OpticalCharacterRecognition/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "Optical Character Recognition";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // Optical Character Recognition
+ testUnicodeRange(0x2440, 0x245F);
+ negativeTestUnicodeRange(0x2440, 0x245F);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2440_OpticalCharacterRecognition/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2440_OpticalCharacterRecognition/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2440_OpticalCharacterRecognition/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2440_OpticalCharacterRecognition/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2440_OpticalCharacterRecognition/output.txt
new file mode 100644
index 000000000..428f92001
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2440_OpticalCharacterRecognition/output.txt
@@ -0,0 +1,21 @@
+Unicode String.search from 0x2440 to 0x2440 PASSED!
+Unicode String.search for 3 chars from 0x2440 to 0x2440 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0x2440 to 0x245F String.search(undefined) PASSED!
+0x2440 to 0x245F String.search() PASSED!
+Negative String.match PASSED!
+0x2440 to 0x245F String.match(undefined) PASSED!
+0x2440 to 0x245F String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x24400x245F) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2440_OpticalCharacterRecognition/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2440_OpticalCharacterRecognition/test.swf
new file mode 100644
index 000000000..1f36ff198
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2440_OpticalCharacterRecognition/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2440_OpticalCharacterRecognition/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2440_OpticalCharacterRecognition/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2440_OpticalCharacterRecognition/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2460_EnclosedAlphanumerics/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2460_EnclosedAlphanumerics/Test.as
new file mode 100644
index 000000000..c99337e82
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2460_EnclosedAlphanumerics/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "Enclosed Alphanumerics";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // Enclosed Alphanumerics
+ testUnicodeRange(0x2460, 0x24FF);
+ negativeTestUnicodeRange(0x2460, 0x24FF);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2460_EnclosedAlphanumerics/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2460_EnclosedAlphanumerics/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2460_EnclosedAlphanumerics/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2460_EnclosedAlphanumerics/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2460_EnclosedAlphanumerics/output.txt
new file mode 100644
index 000000000..7aaad19d7
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2460_EnclosedAlphanumerics/output.txt
@@ -0,0 +1,21 @@
+Unicode String.search from 0x2460 to 0x2460 PASSED!
+Unicode String.search for 3 chars from 0x2460 to 0x2460 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0x2460 to 0x24FF String.search(undefined) PASSED!
+0x2460 to 0x24FF String.search() PASSED!
+Negative String.match PASSED!
+0x2460 to 0x24FF String.match(undefined) PASSED!
+0x2460 to 0x24FF String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x24600x24FF) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2460_EnclosedAlphanumerics/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2460_EnclosedAlphanumerics/test.swf
new file mode 100644
index 000000000..a8210e539
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2460_EnclosedAlphanumerics/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2460_EnclosedAlphanumerics/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2460_EnclosedAlphanumerics/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2460_EnclosedAlphanumerics/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2500_BoxDrawing/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2500_BoxDrawing/Test.as
new file mode 100644
index 000000000..fcce2da84
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2500_BoxDrawing/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "Box Drawing";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // Box Drawing
+ testUnicodeRange(0x2500, 0x257F);
+ negativeTestUnicodeRange(0x2500, 0x257F);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2500_BoxDrawing/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2500_BoxDrawing/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2500_BoxDrawing/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2500_BoxDrawing/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2500_BoxDrawing/output.txt
new file mode 100644
index 000000000..8981b765f
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2500_BoxDrawing/output.txt
@@ -0,0 +1,21 @@
+Unicode String.search from 0x2500 to 0x2500 PASSED!
+Unicode String.search for 3 chars from 0x2500 to 0x2500 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0x2500 to 0x257F String.search(undefined) PASSED!
+0x2500 to 0x257F String.search() PASSED!
+Negative String.match PASSED!
+0x2500 to 0x257F String.match(undefined) PASSED!
+0x2500 to 0x257F String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x25000x257F) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2500_BoxDrawing/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2500_BoxDrawing/test.swf
new file mode 100644
index 000000000..522479199
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2500_BoxDrawing/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2500_BoxDrawing/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2500_BoxDrawing/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2500_BoxDrawing/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2580_BlockElements/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2580_BlockElements/Test.as
new file mode 100644
index 000000000..885857deb
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2580_BlockElements/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "Block Elements";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // Block Elements
+ testUnicodeRange(0x2580, 0x259F);
+ negativeTestUnicodeRange(0x2580, 0x259F);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2580_BlockElements/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2580_BlockElements/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2580_BlockElements/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2580_BlockElements/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2580_BlockElements/output.txt
new file mode 100644
index 000000000..8878bba1c
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2580_BlockElements/output.txt
@@ -0,0 +1,21 @@
+Unicode String.search from 0x2580 to 0x2580 PASSED!
+Unicode String.search for 3 chars from 0x2580 to 0x2580 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0x2580 to 0x259F String.search(undefined) PASSED!
+0x2580 to 0x259F String.search() PASSED!
+Negative String.match PASSED!
+0x2580 to 0x259F String.match(undefined) PASSED!
+0x2580 to 0x259F String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x25800x259F) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2580_BlockElements/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2580_BlockElements/test.swf
new file mode 100644
index 000000000..43cc59058
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2580_BlockElements/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2580_BlockElements/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2580_BlockElements/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2580_BlockElements/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u25A0_GeometricShapes/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u25A0_GeometricShapes/Test.as
new file mode 100644
index 000000000..eeea73cb5
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u25A0_GeometricShapes/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "Geometric Shapes";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // Geometric Shapes
+ testUnicodeRange(0x25A0, 0x25FF);
+ negativeTestUnicodeRange(0x25A0, 0x25FF);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u25A0_GeometricShapes/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u25A0_GeometricShapes/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u25A0_GeometricShapes/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u25A0_GeometricShapes/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u25A0_GeometricShapes/output.txt
new file mode 100644
index 000000000..e9fbe34ef
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u25A0_GeometricShapes/output.txt
@@ -0,0 +1,21 @@
+Unicode String.search from 0x25A0 to 0x25A0 PASSED!
+Unicode String.search for 3 chars from 0x25A0 to 0x25A0 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0x25A0 to 0x25FF String.search(undefined) PASSED!
+0x25A0 to 0x25FF String.search() PASSED!
+Negative String.match PASSED!
+0x25A0 to 0x25FF String.match(undefined) PASSED!
+0x25A0 to 0x25FF String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x25A00x25FF) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u25A0_GeometricShapes/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u25A0_GeometricShapes/test.swf
new file mode 100644
index 000000000..f10d6cd7b
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u25A0_GeometricShapes/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u25A0_GeometricShapes/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u25A0_GeometricShapes/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u25A0_GeometricShapes/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2600_MiscellaneousSymbols/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2600_MiscellaneousSymbols/Test.as
new file mode 100644
index 000000000..49cbd2932
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2600_MiscellaneousSymbols/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "Miscellaneous Symbols";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // Miscellaneous Symbols
+ testUnicodeRange(0x2600, 0x26FF);
+ negativeTestUnicodeRange(0x2600, 0x26FF);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2600_MiscellaneousSymbols/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2600_MiscellaneousSymbols/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2600_MiscellaneousSymbols/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2600_MiscellaneousSymbols/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2600_MiscellaneousSymbols/output.txt
new file mode 100644
index 000000000..e924791c1
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2600_MiscellaneousSymbols/output.txt
@@ -0,0 +1,42 @@
+Unicode String.search from 0x2600 to 0x2600 PASSED!
+Unicode String.search for 3 chars from 0x2600 to 0x2600 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x26FB to 0x26FB PASSED!
+Unicode String.search for 3 chars from 0x26FB to 0x26FB PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0x2600 to 0x26FA String.search(undefined) PASSED!
+0x2600 to 0x26FA String.search() PASSED!
+Negative String.match PASSED!
+0x2600 to 0x26FA String.match(undefined) PASSED!
+0x2600 to 0x26FA String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x26000x26FA) PASSED!
+Negative String.search PASSED!
+0x26FB to 0x26FF String.search(undefined) PASSED!
+0x26FB to 0x26FF String.search() PASSED!
+Negative String.match PASSED!
+0x26FB to 0x26FF String.match(undefined) PASSED!
+0x26FB to 0x26FF String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x26FB0x26FF) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2600_MiscellaneousSymbols/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2600_MiscellaneousSymbols/test.swf
new file mode 100644
index 000000000..7d94af12b
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2600_MiscellaneousSymbols/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2600_MiscellaneousSymbols/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2600_MiscellaneousSymbols/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2600_MiscellaneousSymbols/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2700_Dingbats/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2700_Dingbats/Test.as
new file mode 100644
index 000000000..74cf90f37
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2700_Dingbats/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "Dingbats";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // Dingbats
+ testUnicodeRange(0x2700, 0x27BF);
+ negativeTestUnicodeRange(0x2700, 0x27BF);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2700_Dingbats/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2700_Dingbats/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2700_Dingbats/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2700_Dingbats/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2700_Dingbats/output.txt
new file mode 100644
index 000000000..e12a33c27
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2700_Dingbats/output.txt
@@ -0,0 +1,21 @@
+Unicode String.search from 0x2700 to 0x2700 PASSED!
+Unicode String.search for 3 chars from 0x2700 to 0x2700 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0x2700 to 0x27BF String.search(undefined) PASSED!
+0x2700 to 0x27BF String.search() PASSED!
+Negative String.match PASSED!
+0x2700 to 0x27BF String.match(undefined) PASSED!
+0x2700 to 0x27BF String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x27000x27BF) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2700_Dingbats/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2700_Dingbats/test.swf
new file mode 100644
index 000000000..1ad71745c
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2700_Dingbats/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2700_Dingbats/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2700_Dingbats/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2700_Dingbats/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u27C0_MiscellaneousMathematicalSymbols_A/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u27C0_MiscellaneousMathematicalSymbols_A/Test.as
new file mode 100644
index 000000000..d49e7f5ec
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u27C0_MiscellaneousMathematicalSymbols_A/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "Miscellaneous Mathematical Symbols-A";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // Miscellaneous Mathematical Symbols-A
+ testUnicodeRange(0x27C0, 0x27EF);
+ negativeTestUnicodeRange(0x27C0, 0x27EF);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u27C0_MiscellaneousMathematicalSymbols_A/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u27C0_MiscellaneousMathematicalSymbols_A/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u27C0_MiscellaneousMathematicalSymbols_A/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u27C0_MiscellaneousMathematicalSymbols_A/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u27C0_MiscellaneousMathematicalSymbols_A/output.txt
new file mode 100644
index 000000000..feacbfb0f
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u27C0_MiscellaneousMathematicalSymbols_A/output.txt
@@ -0,0 +1,21 @@
+Unicode String.search from 0x27C0 to 0x27C0 PASSED!
+Unicode String.search for 3 chars from 0x27C0 to 0x27C0 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0x27C0 to 0x27EF String.search(undefined) PASSED!
+0x27C0 to 0x27EF String.search() PASSED!
+Negative String.match PASSED!
+0x27C0 to 0x27EF String.match(undefined) PASSED!
+0x27C0 to 0x27EF String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x27C00x27EF) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u27C0_MiscellaneousMathematicalSymbols_A/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u27C0_MiscellaneousMathematicalSymbols_A/test.swf
new file mode 100644
index 000000000..bcc2effa0
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u27C0_MiscellaneousMathematicalSymbols_A/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u27C0_MiscellaneousMathematicalSymbols_A/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u27C0_MiscellaneousMathematicalSymbols_A/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u27C0_MiscellaneousMathematicalSymbols_A/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u27F0_SupplementalArrows_A/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u27F0_SupplementalArrows_A/Test.as
new file mode 100644
index 000000000..046cc153e
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u27F0_SupplementalArrows_A/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "Supplemental Arrows-A";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // Supplemental Arrows-A
+ testUnicodeRange(0x27F0, 0x27FF);
+ negativeTestUnicodeRange(0x27F0, 0x27FF);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u27F0_SupplementalArrows_A/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u27F0_SupplementalArrows_A/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u27F0_SupplementalArrows_A/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u27F0_SupplementalArrows_A/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u27F0_SupplementalArrows_A/output.txt
new file mode 100644
index 000000000..1022d889a
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u27F0_SupplementalArrows_A/output.txt
@@ -0,0 +1,21 @@
+Unicode String.search from 0x27F0 to 0x27F0 PASSED!
+Unicode String.search for 3 chars from 0x27F0 to 0x27F0 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0x27F0 to 0x27FF String.search(undefined) PASSED!
+0x27F0 to 0x27FF String.search() PASSED!
+Negative String.match PASSED!
+0x27F0 to 0x27FF String.match(undefined) PASSED!
+0x27F0 to 0x27FF String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x27F00x27FF) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u27F0_SupplementalArrows_A/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u27F0_SupplementalArrows_A/test.swf
new file mode 100644
index 000000000..0e00ddb60
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u27F0_SupplementalArrows_A/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u27F0_SupplementalArrows_A/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u27F0_SupplementalArrows_A/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u27F0_SupplementalArrows_A/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2800_BraillePatterns/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2800_BraillePatterns/Test.as
new file mode 100644
index 000000000..b2b7e74b5
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2800_BraillePatterns/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "Braille Patterns";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // Braille Patterns
+ testUnicodeRange(0x2800, 0x28FF);
+ negativeTestUnicodeRange(0x2800, 0x28FF);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2800_BraillePatterns/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2800_BraillePatterns/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2800_BraillePatterns/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2800_BraillePatterns/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2800_BraillePatterns/output.txt
new file mode 100644
index 000000000..a1e047f48
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2800_BraillePatterns/output.txt
@@ -0,0 +1,42 @@
+Unicode String.search from 0x2800 to 0x2800 PASSED!
+Unicode String.search for 3 chars from 0x2800 to 0x2800 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x28FB to 0x28FB PASSED!
+Unicode String.search for 3 chars from 0x28FB to 0x28FB PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0x2800 to 0x28FA String.search(undefined) PASSED!
+0x2800 to 0x28FA String.search() PASSED!
+Negative String.match PASSED!
+0x2800 to 0x28FA String.match(undefined) PASSED!
+0x2800 to 0x28FA String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x28000x28FA) PASSED!
+Negative String.search PASSED!
+0x28FB to 0x28FF String.search(undefined) PASSED!
+0x28FB to 0x28FF String.search() PASSED!
+Negative String.match PASSED!
+0x28FB to 0x28FF String.match(undefined) PASSED!
+0x28FB to 0x28FF String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x28FB0x28FF) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2800_BraillePatterns/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2800_BraillePatterns/test.swf
new file mode 100644
index 000000000..41de4bca7
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2800_BraillePatterns/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2800_BraillePatterns/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2800_BraillePatterns/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2800_BraillePatterns/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2900_SupplementalArrows_B/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2900_SupplementalArrows_B/Test.as
new file mode 100644
index 000000000..8c3c13de0
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2900_SupplementalArrows_B/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "Supplemental Arrows-B";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // Supplemental Arrows-B
+ testUnicodeRange(0x2900, 0x297F);
+ negativeTestUnicodeRange(0x2900, 0x297F);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2900_SupplementalArrows_B/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2900_SupplementalArrows_B/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2900_SupplementalArrows_B/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2900_SupplementalArrows_B/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2900_SupplementalArrows_B/output.txt
new file mode 100644
index 000000000..735d92d05
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2900_SupplementalArrows_B/output.txt
@@ -0,0 +1,21 @@
+Unicode String.search from 0x2900 to 0x2900 PASSED!
+Unicode String.search for 3 chars from 0x2900 to 0x2900 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0x2900 to 0x297F String.search(undefined) PASSED!
+0x2900 to 0x297F String.search() PASSED!
+Negative String.match PASSED!
+0x2900 to 0x297F String.match(undefined) PASSED!
+0x2900 to 0x297F String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x29000x297F) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2900_SupplementalArrows_B/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2900_SupplementalArrows_B/test.swf
new file mode 100644
index 000000000..ba1156f14
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2900_SupplementalArrows_B/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2900_SupplementalArrows_B/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2900_SupplementalArrows_B/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2900_SupplementalArrows_B/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2980_MiscellaneousMathematicalSymbols_B/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2980_MiscellaneousMathematicalSymbols_B/Test.as
new file mode 100644
index 000000000..aa74bcad3
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2980_MiscellaneousMathematicalSymbols_B/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "Miscellaneous Mathematical Symbols-B";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // Miscellaneous Mathematical Symbols-B
+ testUnicodeRange(0x2980, 0x29FF);
+ negativeTestUnicodeRange(0x2980, 0x29FF);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2980_MiscellaneousMathematicalSymbols_B/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2980_MiscellaneousMathematicalSymbols_B/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2980_MiscellaneousMathematicalSymbols_B/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2980_MiscellaneousMathematicalSymbols_B/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2980_MiscellaneousMathematicalSymbols_B/output.txt
new file mode 100644
index 000000000..3f78225cd
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2980_MiscellaneousMathematicalSymbols_B/output.txt
@@ -0,0 +1,21 @@
+Unicode String.search from 0x2980 to 0x2980 PASSED!
+Unicode String.search for 3 chars from 0x2980 to 0x2980 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0x2980 to 0x29FF String.search(undefined) PASSED!
+0x2980 to 0x29FF String.search() PASSED!
+Negative String.match PASSED!
+0x2980 to 0x29FF String.match(undefined) PASSED!
+0x2980 to 0x29FF String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x29800x29FF) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2980_MiscellaneousMathematicalSymbols_B/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2980_MiscellaneousMathematicalSymbols_B/test.swf
new file mode 100644
index 000000000..4bc62f40d
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2980_MiscellaneousMathematicalSymbols_B/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2980_MiscellaneousMathematicalSymbols_B/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2980_MiscellaneousMathematicalSymbols_B/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2980_MiscellaneousMathematicalSymbols_B/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2A00_SupplementalMathematicalOperators/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2A00_SupplementalMathematicalOperators/Test.as
new file mode 100644
index 000000000..507f02e73
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2A00_SupplementalMathematicalOperators/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "Supplemental Mathematical Operators";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // Supplemental Mathematical Operators
+ testUnicodeRange(0x2A00, 0x2AFF);
+ negativeTestUnicodeRange(0x2A00, 0x2AFF);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2A00_SupplementalMathematicalOperators/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2A00_SupplementalMathematicalOperators/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2A00_SupplementalMathematicalOperators/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2A00_SupplementalMathematicalOperators/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2A00_SupplementalMathematicalOperators/output.txt
new file mode 100644
index 000000000..e0734488e
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2A00_SupplementalMathematicalOperators/output.txt
@@ -0,0 +1,42 @@
+Unicode String.search from 0x2A00 to 0x2A00 PASSED!
+Unicode String.search for 3 chars from 0x2A00 to 0x2A00 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x2AFB to 0x2AFB PASSED!
+Unicode String.search for 3 chars from 0x2AFB to 0x2AFB PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0x2A00 to 0x2AFA String.search(undefined) PASSED!
+0x2A00 to 0x2AFA String.search() PASSED!
+Negative String.match PASSED!
+0x2A00 to 0x2AFA String.match(undefined) PASSED!
+0x2A00 to 0x2AFA String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x2A000x2AFA) PASSED!
+Negative String.search PASSED!
+0x2AFB to 0x2AFF String.search(undefined) PASSED!
+0x2AFB to 0x2AFF String.search() PASSED!
+Negative String.match PASSED!
+0x2AFB to 0x2AFF String.match(undefined) PASSED!
+0x2AFB to 0x2AFF String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x2AFB0x2AFF) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2A00_SupplementalMathematicalOperators/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2A00_SupplementalMathematicalOperators/test.swf
new file mode 100644
index 000000000..2b218aace
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2A00_SupplementalMathematicalOperators/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2A00_SupplementalMathematicalOperators/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2A00_SupplementalMathematicalOperators/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2A00_SupplementalMathematicalOperators/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2E80_CJKRadicalsSupplement/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2E80_CJKRadicalsSupplement/Test.as
new file mode 100644
index 000000000..51c1b8fdf
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2E80_CJKRadicalsSupplement/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "CJK Radicals Supplement";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // CJK Radicals Supplement
+ testUnicodeRange(0x2E80, 0x2EFF);
+ negativeTestUnicodeRange(0x2E80, 0x2EFF);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2E80_CJKRadicalsSupplement/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2E80_CJKRadicalsSupplement/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2E80_CJKRadicalsSupplement/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2E80_CJKRadicalsSupplement/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2E80_CJKRadicalsSupplement/output.txt
new file mode 100644
index 000000000..e2131bac2
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2E80_CJKRadicalsSupplement/output.txt
@@ -0,0 +1,21 @@
+Unicode String.search from 0x2E80 to 0x2E80 PASSED!
+Unicode String.search for 3 chars from 0x2E80 to 0x2E80 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0x2E80 to 0x2EFF String.search(undefined) PASSED!
+0x2E80 to 0x2EFF String.search() PASSED!
+Negative String.match PASSED!
+0x2E80 to 0x2EFF String.match(undefined) PASSED!
+0x2E80 to 0x2EFF String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x2E800x2EFF) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2E80_CJKRadicalsSupplement/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2E80_CJKRadicalsSupplement/test.swf
new file mode 100644
index 000000000..fb3917eba
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2E80_CJKRadicalsSupplement/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2E80_CJKRadicalsSupplement/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2E80_CJKRadicalsSupplement/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2E80_CJKRadicalsSupplement/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2F00_KangxiRadicals/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2F00_KangxiRadicals/Test.as
new file mode 100644
index 000000000..3af1afa90
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2F00_KangxiRadicals/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "Kangxi Radicals";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // Kangxi Radicals
+ testUnicodeRange(0x2F00, 0x2FDF);
+ negativeTestUnicodeRange(0x2F00, 0x2FDF);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2F00_KangxiRadicals/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2F00_KangxiRadicals/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2F00_KangxiRadicals/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2F00_KangxiRadicals/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2F00_KangxiRadicals/output.txt
new file mode 100644
index 000000000..58aa96230
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2F00_KangxiRadicals/output.txt
@@ -0,0 +1,21 @@
+Unicode String.search from 0x2F00 to 0x2F00 PASSED!
+Unicode String.search for 3 chars from 0x2F00 to 0x2F00 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0x2F00 to 0x2FDF String.search(undefined) PASSED!
+0x2F00 to 0x2FDF String.search() PASSED!
+Negative String.match PASSED!
+0x2F00 to 0x2FDF String.match(undefined) PASSED!
+0x2F00 to 0x2FDF String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x2F000x2FDF) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2F00_KangxiRadicals/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2F00_KangxiRadicals/test.swf
new file mode 100644
index 000000000..d95cf1955
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2F00_KangxiRadicals/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2F00_KangxiRadicals/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2F00_KangxiRadicals/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2F00_KangxiRadicals/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2FF0_IdeographicDescriptionCharacters/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2FF0_IdeographicDescriptionCharacters/Test.as
new file mode 100644
index 000000000..67e8f44b2
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2FF0_IdeographicDescriptionCharacters/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "Ideographic Description Characters";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // Ideographic Description Characters
+ testUnicodeRange(0x2FF0, 0x2FFF);
+ negativeTestUnicodeRange(0x2FF0, 0x2FFF);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2FF0_IdeographicDescriptionCharacters/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2FF0_IdeographicDescriptionCharacters/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2FF0_IdeographicDescriptionCharacters/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2FF0_IdeographicDescriptionCharacters/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2FF0_IdeographicDescriptionCharacters/output.txt
new file mode 100644
index 000000000..001ee0ca0
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2FF0_IdeographicDescriptionCharacters/output.txt
@@ -0,0 +1,21 @@
+Unicode String.search from 0x2FF0 to 0x2FF0 PASSED!
+Unicode String.search for 3 chars from 0x2FF0 to 0x2FF0 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0x2FF0 to 0x2FFF String.search(undefined) PASSED!
+0x2FF0 to 0x2FFF String.search() PASSED!
+Negative String.match PASSED!
+0x2FF0 to 0x2FFF String.match(undefined) PASSED!
+0x2FF0 to 0x2FFF String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x2FF00x2FFF) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2FF0_IdeographicDescriptionCharacters/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2FF0_IdeographicDescriptionCharacters/test.swf
new file mode 100644
index 000000000..50c103ce0
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2FF0_IdeographicDescriptionCharacters/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2FF0_IdeographicDescriptionCharacters/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2FF0_IdeographicDescriptionCharacters/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u2FF0_IdeographicDescriptionCharacters/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3000_CJKSymbolsandPunctuation/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3000_CJKSymbolsandPunctuation/Test.as
new file mode 100644
index 000000000..8bf961357
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3000_CJKSymbolsandPunctuation/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "CJK Symbols and Punctuation";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // CJK Symbols and Punctuation
+ testUnicodeRange(0x3000, 0x303F);
+ negativeTestUnicodeRange(0x3000, 0x303F);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3000_CJKSymbolsandPunctuation/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3000_CJKSymbolsandPunctuation/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3000_CJKSymbolsandPunctuation/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3000_CJKSymbolsandPunctuation/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3000_CJKSymbolsandPunctuation/output.txt
new file mode 100644
index 000000000..6f2038b26
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3000_CJKSymbolsandPunctuation/output.txt
@@ -0,0 +1,21 @@
+Unicode String.search from 0x3000 to 0x3000 PASSED!
+Unicode String.search for 3 chars from 0x3000 to 0x3000 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0x3000 to 0x303F String.search(undefined) PASSED!
+0x3000 to 0x303F String.search() PASSED!
+Negative String.match PASSED!
+0x3000 to 0x303F String.match(undefined) PASSED!
+0x3000 to 0x303F String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x30000x303F) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3000_CJKSymbolsandPunctuation/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3000_CJKSymbolsandPunctuation/test.swf
new file mode 100644
index 000000000..6fd456725
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3000_CJKSymbolsandPunctuation/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3000_CJKSymbolsandPunctuation/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3000_CJKSymbolsandPunctuation/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3000_CJKSymbolsandPunctuation/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3040_Hiragana/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3040_Hiragana/Test.as
new file mode 100644
index 000000000..546d4afea
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3040_Hiragana/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "Hiragana";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // Hiragana
+ testUnicodeRange(0x3040, 0x309F);
+ negativeTestUnicodeRange(0x3040, 0x309F);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3040_Hiragana/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3040_Hiragana/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3040_Hiragana/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3040_Hiragana/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3040_Hiragana/output.txt
new file mode 100644
index 000000000..430099a33
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3040_Hiragana/output.txt
@@ -0,0 +1,21 @@
+Unicode String.search from 0x3040 to 0x3040 PASSED!
+Unicode String.search for 3 chars from 0x3040 to 0x3040 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0x3040 to 0x309F String.search(undefined) PASSED!
+0x3040 to 0x309F String.search() PASSED!
+Negative String.match PASSED!
+0x3040 to 0x309F String.match(undefined) PASSED!
+0x3040 to 0x309F String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x30400x309F) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3040_Hiragana/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3040_Hiragana/test.swf
new file mode 100644
index 000000000..d56d1a765
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3040_Hiragana/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3040_Hiragana/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3040_Hiragana/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3040_Hiragana/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u30A0_Katakana/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u30A0_Katakana/Test.as
new file mode 100644
index 000000000..964075e40
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u30A0_Katakana/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "Katakana";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // Katakana
+ testUnicodeRange(0x30A0, 0x30FF);
+ negativeTestUnicodeRange(0x30A0, 0x30FF);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u30A0_Katakana/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u30A0_Katakana/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u30A0_Katakana/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u30A0_Katakana/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u30A0_Katakana/output.txt
new file mode 100644
index 000000000..f3ce21298
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u30A0_Katakana/output.txt
@@ -0,0 +1,21 @@
+Unicode String.search from 0x30A0 to 0x30A0 PASSED!
+Unicode String.search for 3 chars from 0x30A0 to 0x30A0 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0x30A0 to 0x30FF String.search(undefined) PASSED!
+0x30A0 to 0x30FF String.search() PASSED!
+Negative String.match PASSED!
+0x30A0 to 0x30FF String.match(undefined) PASSED!
+0x30A0 to 0x30FF String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x30A00x30FF) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u30A0_Katakana/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u30A0_Katakana/test.swf
new file mode 100644
index 000000000..e7c5e0741
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u30A0_Katakana/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u30A0_Katakana/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u30A0_Katakana/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u30A0_Katakana/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3100_Bopomofo/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3100_Bopomofo/Test.as
new file mode 100644
index 000000000..7cff7ae72
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3100_Bopomofo/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "Bopomofo";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // Bopomofo
+ testUnicodeRange(0x3100, 0x312F);
+ negativeTestUnicodeRange(0x3100, 0x312F);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3100_Bopomofo/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3100_Bopomofo/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3100_Bopomofo/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3100_Bopomofo/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3100_Bopomofo/output.txt
new file mode 100644
index 000000000..32a7d6f83
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3100_Bopomofo/output.txt
@@ -0,0 +1,21 @@
+Unicode String.search from 0x3100 to 0x3100 PASSED!
+Unicode String.search for 3 chars from 0x3100 to 0x3100 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0x3100 to 0x312F String.search(undefined) PASSED!
+0x3100 to 0x312F String.search() PASSED!
+Negative String.match PASSED!
+0x3100 to 0x312F String.match(undefined) PASSED!
+0x3100 to 0x312F String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x31000x312F) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3100_Bopomofo/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3100_Bopomofo/test.swf
new file mode 100644
index 000000000..d4821c561
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3100_Bopomofo/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3100_Bopomofo/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3100_Bopomofo/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3100_Bopomofo/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3130_HangulCompatibilityJamo/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3130_HangulCompatibilityJamo/Test.as
new file mode 100644
index 000000000..cbb7d2fde
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3130_HangulCompatibilityJamo/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "Hangul Compatibility Jamo";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // Hangul Compatibility Jamo
+ testUnicodeRange(0x3130, 0x318F);
+ negativeTestUnicodeRange(0x3130, 0x318F);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3130_HangulCompatibilityJamo/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3130_HangulCompatibilityJamo/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3130_HangulCompatibilityJamo/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3130_HangulCompatibilityJamo/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3130_HangulCompatibilityJamo/output.txt
new file mode 100644
index 000000000..7e9da45a3
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3130_HangulCompatibilityJamo/output.txt
@@ -0,0 +1,21 @@
+Unicode String.search from 0x3130 to 0x3130 PASSED!
+Unicode String.search for 3 chars from 0x3130 to 0x3130 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0x3130 to 0x318F String.search(undefined) PASSED!
+0x3130 to 0x318F String.search() PASSED!
+Negative String.match PASSED!
+0x3130 to 0x318F String.match(undefined) PASSED!
+0x3130 to 0x318F String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x31300x318F) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3130_HangulCompatibilityJamo/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3130_HangulCompatibilityJamo/test.swf
new file mode 100644
index 000000000..b49946d20
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3130_HangulCompatibilityJamo/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3130_HangulCompatibilityJamo/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3130_HangulCompatibilityJamo/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3130_HangulCompatibilityJamo/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3190_Kanbun/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3190_Kanbun/Test.as
new file mode 100644
index 000000000..f60a67dcc
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3190_Kanbun/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "Kanbun";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // Kanbun
+ testUnicodeRange(0x3190, 0x319F);
+ negativeTestUnicodeRange(0x3190, 0x319F);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3190_Kanbun/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3190_Kanbun/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3190_Kanbun/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3190_Kanbun/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3190_Kanbun/output.txt
new file mode 100644
index 000000000..e5face1ae
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3190_Kanbun/output.txt
@@ -0,0 +1,21 @@
+Unicode String.search from 0x3190 to 0x3190 PASSED!
+Unicode String.search for 3 chars from 0x3190 to 0x3190 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0x3190 to 0x319F String.search(undefined) PASSED!
+0x3190 to 0x319F String.search() PASSED!
+Negative String.match PASSED!
+0x3190 to 0x319F String.match(undefined) PASSED!
+0x3190 to 0x319F String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x31900x319F) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3190_Kanbun/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3190_Kanbun/test.swf
new file mode 100644
index 000000000..21fc164c1
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3190_Kanbun/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3190_Kanbun/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3190_Kanbun/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3190_Kanbun/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u31A0_BopomofoExtended/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u31A0_BopomofoExtended/Test.as
new file mode 100644
index 000000000..43a338b8e
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u31A0_BopomofoExtended/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "Bopomofo Extended";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // Bopomofo Extended
+ testUnicodeRange(0x31A0, 0x31BF);
+ negativeTestUnicodeRange(0x31A0, 0x31BF);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u31A0_BopomofoExtended/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u31A0_BopomofoExtended/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u31A0_BopomofoExtended/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u31A0_BopomofoExtended/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u31A0_BopomofoExtended/output.txt
new file mode 100644
index 000000000..f4f35e112
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u31A0_BopomofoExtended/output.txt
@@ -0,0 +1,21 @@
+Unicode String.search from 0x31A0 to 0x31A0 PASSED!
+Unicode String.search for 3 chars from 0x31A0 to 0x31A0 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0x31A0 to 0x31BF String.search(undefined) PASSED!
+0x31A0 to 0x31BF String.search() PASSED!
+Negative String.match PASSED!
+0x31A0 to 0x31BF String.match(undefined) PASSED!
+0x31A0 to 0x31BF String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x31A00x31BF) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u31A0_BopomofoExtended/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u31A0_BopomofoExtended/test.swf
new file mode 100644
index 000000000..228a2b2a5
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u31A0_BopomofoExtended/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u31A0_BopomofoExtended/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u31A0_BopomofoExtended/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u31A0_BopomofoExtended/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u31F0_KatakanaPhoneticExtensions/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u31F0_KatakanaPhoneticExtensions/Test.as
new file mode 100644
index 000000000..b9ae1ae18
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u31F0_KatakanaPhoneticExtensions/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "Katakana Phonetic Extensions";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // Katakana Phonetic Extensions
+ testUnicodeRange(0x31F0, 0x31FF);
+ negativeTestUnicodeRange(0x31F0, 0x31FF);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u31F0_KatakanaPhoneticExtensions/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u31F0_KatakanaPhoneticExtensions/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u31F0_KatakanaPhoneticExtensions/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u31F0_KatakanaPhoneticExtensions/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u31F0_KatakanaPhoneticExtensions/output.txt
new file mode 100644
index 000000000..c44104c40
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u31F0_KatakanaPhoneticExtensions/output.txt
@@ -0,0 +1,21 @@
+Unicode String.search from 0x31F0 to 0x31F0 PASSED!
+Unicode String.search for 3 chars from 0x31F0 to 0x31F0 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0x31F0 to 0x31FF String.search(undefined) PASSED!
+0x31F0 to 0x31FF String.search() PASSED!
+Negative String.match PASSED!
+0x31F0 to 0x31FF String.match(undefined) PASSED!
+0x31F0 to 0x31FF String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x31F00x31FF) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u31F0_KatakanaPhoneticExtensions/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u31F0_KatakanaPhoneticExtensions/test.swf
new file mode 100644
index 000000000..fc40d87f3
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u31F0_KatakanaPhoneticExtensions/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u31F0_KatakanaPhoneticExtensions/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u31F0_KatakanaPhoneticExtensions/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u31F0_KatakanaPhoneticExtensions/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3200_EnclosedCJKLettersandMonths/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3200_EnclosedCJKLettersandMonths/Test.as
new file mode 100644
index 000000000..d33732ae3
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3200_EnclosedCJKLettersandMonths/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "Enclosed CJK Letters and Months";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // Enclosed CJK Letters and Months
+ testUnicodeRange(0x3200, 0x32FF);
+ negativeTestUnicodeRange(0x3200, 0x32FF);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3200_EnclosedCJKLettersandMonths/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3200_EnclosedCJKLettersandMonths/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3200_EnclosedCJKLettersandMonths/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3200_EnclosedCJKLettersandMonths/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3200_EnclosedCJKLettersandMonths/output.txt
new file mode 100644
index 000000000..bdeb8070b
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3200_EnclosedCJKLettersandMonths/output.txt
@@ -0,0 +1,42 @@
+Unicode String.search from 0x3200 to 0x3200 PASSED!
+Unicode String.search for 3 chars from 0x3200 to 0x3200 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x32FB to 0x32FB PASSED!
+Unicode String.search for 3 chars from 0x32FB to 0x32FB PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0x3200 to 0x32FA String.search(undefined) PASSED!
+0x3200 to 0x32FA String.search() PASSED!
+Negative String.match PASSED!
+0x3200 to 0x32FA String.match(undefined) PASSED!
+0x3200 to 0x32FA String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x32000x32FA) PASSED!
+Negative String.search PASSED!
+0x32FB to 0x32FF String.search(undefined) PASSED!
+0x32FB to 0x32FF String.search() PASSED!
+Negative String.match PASSED!
+0x32FB to 0x32FF String.match(undefined) PASSED!
+0x32FB to 0x32FF String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x32FB0x32FF) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3200_EnclosedCJKLettersandMonths/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3200_EnclosedCJKLettersandMonths/test.swf
new file mode 100644
index 000000000..41ada7781
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3200_EnclosedCJKLettersandMonths/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3200_EnclosedCJKLettersandMonths/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3200_EnclosedCJKLettersandMonths/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3200_EnclosedCJKLettersandMonths/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3300_CJKCompatibility/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3300_CJKCompatibility/Test.as
new file mode 100644
index 000000000..305d0d688
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3300_CJKCompatibility/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "CJK Compatibility";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // CJK Compatibility
+ testUnicodeRange(0x3300, 0x33FF);
+ negativeTestUnicodeRange(0x3300, 0x33FF);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3300_CJKCompatibility/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3300_CJKCompatibility/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3300_CJKCompatibility/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3300_CJKCompatibility/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3300_CJKCompatibility/output.txt
new file mode 100644
index 000000000..cd6c011c6
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3300_CJKCompatibility/output.txt
@@ -0,0 +1,42 @@
+Unicode String.search from 0x3300 to 0x3300 PASSED!
+Unicode String.search for 3 chars from 0x3300 to 0x3300 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x33FB to 0x33FB PASSED!
+Unicode String.search for 3 chars from 0x33FB to 0x33FB PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0x3300 to 0x33FA String.search(undefined) PASSED!
+0x3300 to 0x33FA String.search() PASSED!
+Negative String.match PASSED!
+0x3300 to 0x33FA String.match(undefined) PASSED!
+0x3300 to 0x33FA String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x33000x33FA) PASSED!
+Negative String.search PASSED!
+0x33FB to 0x33FF String.search(undefined) PASSED!
+0x33FB to 0x33FF String.search() PASSED!
+Negative String.match PASSED!
+0x33FB to 0x33FF String.match(undefined) PASSED!
+0x33FB to 0x33FF String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x33FB0x33FF) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3300_CJKCompatibility/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3300_CJKCompatibility/test.swf
new file mode 100644
index 000000000..5a2ce629f
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3300_CJKCompatibility/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3300_CJKCompatibility/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3300_CJKCompatibility/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3300_CJKCompatibility/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3400_CJKUnifiedIdeographsExtensionA/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3400_CJKUnifiedIdeographsExtensionA/Test.as
new file mode 100644
index 000000000..78db4e8f7
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3400_CJKUnifiedIdeographsExtensionA/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "CJK Unified Ideographs Extension A";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // CJK Unified Ideographs Extension A
+ testUnicodeRange(0x3400, 0x4DBF);
+ negativeTestUnicodeRange(0x3400, 0x4DBF);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3400_CJKUnifiedIdeographsExtensionA/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3400_CJKUnifiedIdeographsExtensionA/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3400_CJKUnifiedIdeographsExtensionA/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3400_CJKUnifiedIdeographsExtensionA/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3400_CJKUnifiedIdeographsExtensionA/output.txt
new file mode 100644
index 000000000..a9cc842e5
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3400_CJKUnifiedIdeographsExtensionA/output.txt
@@ -0,0 +1,567 @@
+Unicode String.search from 0x3400 to 0x3400 PASSED!
+Unicode String.search for 3 chars from 0x3400 to 0x3400 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x34FB to 0x34FB PASSED!
+Unicode String.search for 3 chars from 0x34FB to 0x34FB PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x35F6 to 0x35F6 PASSED!
+Unicode String.search for 3 chars from 0x35F6 to 0x35F6 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x36F1 to 0x36F1 PASSED!
+Unicode String.search for 3 chars from 0x36F1 to 0x36F1 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x37EC to 0x37EC PASSED!
+Unicode String.search for 3 chars from 0x37EC to 0x37EC PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x38E7 to 0x38E7 PASSED!
+Unicode String.search for 3 chars from 0x38E7 to 0x38E7 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x39E2 to 0x39E2 PASSED!
+Unicode String.search for 3 chars from 0x39E2 to 0x39E2 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x3ADD to 0x3ADD PASSED!
+Unicode String.search for 3 chars from 0x3ADD to 0x3ADD PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x3BD8 to 0x3BD8 PASSED!
+Unicode String.search for 3 chars from 0x3BD8 to 0x3BD8 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x3CD3 to 0x3CD3 PASSED!
+Unicode String.search for 3 chars from 0x3CD3 to 0x3CD3 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x3DCE to 0x3DCE PASSED!
+Unicode String.search for 3 chars from 0x3DCE to 0x3DCE PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x3EC9 to 0x3EC9 PASSED!
+Unicode String.search for 3 chars from 0x3EC9 to 0x3EC9 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x3FC4 to 0x3FC4 PASSED!
+Unicode String.search for 3 chars from 0x3FC4 to 0x3FC4 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x40BF to 0x40BF PASSED!
+Unicode String.search for 3 chars from 0x40BF to 0x40BF PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x41BA to 0x41BA PASSED!
+Unicode String.search for 3 chars from 0x41BA to 0x41BA PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x42B5 to 0x42B5 PASSED!
+Unicode String.search for 3 chars from 0x42B5 to 0x42B5 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x43B0 to 0x43B0 PASSED!
+Unicode String.search for 3 chars from 0x43B0 to 0x43B0 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x44AB to 0x44AB PASSED!
+Unicode String.search for 3 chars from 0x44AB to 0x44AB PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x45A6 to 0x45A6 PASSED!
+Unicode String.search for 3 chars from 0x45A6 to 0x45A6 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x46A1 to 0x46A1 PASSED!
+Unicode String.search for 3 chars from 0x46A1 to 0x46A1 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x479C to 0x479C PASSED!
+Unicode String.search for 3 chars from 0x479C to 0x479C PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x4897 to 0x4897 PASSED!
+Unicode String.search for 3 chars from 0x4897 to 0x4897 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x4992 to 0x4992 PASSED!
+Unicode String.search for 3 chars from 0x4992 to 0x4992 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x4A8D to 0x4A8D PASSED!
+Unicode String.search for 3 chars from 0x4A8D to 0x4A8D PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x4B88 to 0x4B88 PASSED!
+Unicode String.search for 3 chars from 0x4B88 to 0x4B88 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x4C83 to 0x4C83 PASSED!
+Unicode String.search for 3 chars from 0x4C83 to 0x4C83 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x4D7E to 0x4D7E PASSED!
+Unicode String.search for 3 chars from 0x4D7E to 0x4D7E PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0x3400 to 0x34FA String.search(undefined) PASSED!
+0x3400 to 0x34FA String.search() PASSED!
+Negative String.match PASSED!
+0x3400 to 0x34FA String.match(undefined) PASSED!
+0x3400 to 0x34FA String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x34000x34FA) PASSED!
+Negative String.search PASSED!
+0x34FB to 0x35F5 String.search(undefined) PASSED!
+0x34FB to 0x35F5 String.search() PASSED!
+Negative String.match PASSED!
+0x34FB to 0x35F5 String.match(undefined) PASSED!
+0x34FB to 0x35F5 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x34FB0x35F5) PASSED!
+Negative String.search PASSED!
+0x35F6 to 0x36F0 String.search(undefined) PASSED!
+0x35F6 to 0x36F0 String.search() PASSED!
+Negative String.match PASSED!
+0x35F6 to 0x36F0 String.match(undefined) PASSED!
+0x35F6 to 0x36F0 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x35F60x36F0) PASSED!
+Negative String.search PASSED!
+0x36F1 to 0x37EB String.search(undefined) PASSED!
+0x36F1 to 0x37EB String.search() PASSED!
+Negative String.match PASSED!
+0x36F1 to 0x37EB String.match(undefined) PASSED!
+0x36F1 to 0x37EB String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x36F10x37EB) PASSED!
+Negative String.search PASSED!
+0x37EC to 0x38E6 String.search(undefined) PASSED!
+0x37EC to 0x38E6 String.search() PASSED!
+Negative String.match PASSED!
+0x37EC to 0x38E6 String.match(undefined) PASSED!
+0x37EC to 0x38E6 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x37EC0x38E6) PASSED!
+Negative String.search PASSED!
+0x38E7 to 0x39E1 String.search(undefined) PASSED!
+0x38E7 to 0x39E1 String.search() PASSED!
+Negative String.match PASSED!
+0x38E7 to 0x39E1 String.match(undefined) PASSED!
+0x38E7 to 0x39E1 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x38E70x39E1) PASSED!
+Negative String.search PASSED!
+0x39E2 to 0x3ADC String.search(undefined) PASSED!
+0x39E2 to 0x3ADC String.search() PASSED!
+Negative String.match PASSED!
+0x39E2 to 0x3ADC String.match(undefined) PASSED!
+0x39E2 to 0x3ADC String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x39E20x3ADC) PASSED!
+Negative String.search PASSED!
+0x3ADD to 0x3BD7 String.search(undefined) PASSED!
+0x3ADD to 0x3BD7 String.search() PASSED!
+Negative String.match PASSED!
+0x3ADD to 0x3BD7 String.match(undefined) PASSED!
+0x3ADD to 0x3BD7 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x3ADD0x3BD7) PASSED!
+Negative String.search PASSED!
+0x3BD8 to 0x3CD2 String.search(undefined) PASSED!
+0x3BD8 to 0x3CD2 String.search() PASSED!
+Negative String.match PASSED!
+0x3BD8 to 0x3CD2 String.match(undefined) PASSED!
+0x3BD8 to 0x3CD2 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x3BD80x3CD2) PASSED!
+Negative String.search PASSED!
+0x3CD3 to 0x3DCD String.search(undefined) PASSED!
+0x3CD3 to 0x3DCD String.search() PASSED!
+Negative String.match PASSED!
+0x3CD3 to 0x3DCD String.match(undefined) PASSED!
+0x3CD3 to 0x3DCD String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x3CD30x3DCD) PASSED!
+Negative String.search PASSED!
+0x3DCE to 0x3EC8 String.search(undefined) PASSED!
+0x3DCE to 0x3EC8 String.search() PASSED!
+Negative String.match PASSED!
+0x3DCE to 0x3EC8 String.match(undefined) PASSED!
+0x3DCE to 0x3EC8 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x3DCE0x3EC8) PASSED!
+Negative String.search PASSED!
+0x3EC9 to 0x3FC3 String.search(undefined) PASSED!
+0x3EC9 to 0x3FC3 String.search() PASSED!
+Negative String.match PASSED!
+0x3EC9 to 0x3FC3 String.match(undefined) PASSED!
+0x3EC9 to 0x3FC3 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x3EC90x3FC3) PASSED!
+Negative String.search PASSED!
+0x3FC4 to 0x40BE String.search(undefined) PASSED!
+0x3FC4 to 0x40BE String.search() PASSED!
+Negative String.match PASSED!
+0x3FC4 to 0x40BE String.match(undefined) PASSED!
+0x3FC4 to 0x40BE String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x3FC40x40BE) PASSED!
+Negative String.search PASSED!
+0x40BF to 0x41B9 String.search(undefined) PASSED!
+0x40BF to 0x41B9 String.search() PASSED!
+Negative String.match PASSED!
+0x40BF to 0x41B9 String.match(undefined) PASSED!
+0x40BF to 0x41B9 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x40BF0x41B9) PASSED!
+Negative String.search PASSED!
+0x41BA to 0x42B4 String.search(undefined) PASSED!
+0x41BA to 0x42B4 String.search() PASSED!
+Negative String.match PASSED!
+0x41BA to 0x42B4 String.match(undefined) PASSED!
+0x41BA to 0x42B4 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x41BA0x42B4) PASSED!
+Negative String.search PASSED!
+0x42B5 to 0x43AF String.search(undefined) PASSED!
+0x42B5 to 0x43AF String.search() PASSED!
+Negative String.match PASSED!
+0x42B5 to 0x43AF String.match(undefined) PASSED!
+0x42B5 to 0x43AF String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x42B50x43AF) PASSED!
+Negative String.search PASSED!
+0x43B0 to 0x44AA String.search(undefined) PASSED!
+0x43B0 to 0x44AA String.search() PASSED!
+Negative String.match PASSED!
+0x43B0 to 0x44AA String.match(undefined) PASSED!
+0x43B0 to 0x44AA String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x43B00x44AA) PASSED!
+Negative String.search PASSED!
+0x44AB to 0x45A5 String.search(undefined) PASSED!
+0x44AB to 0x45A5 String.search() PASSED!
+Negative String.match PASSED!
+0x44AB to 0x45A5 String.match(undefined) PASSED!
+0x44AB to 0x45A5 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x44AB0x45A5) PASSED!
+Negative String.search PASSED!
+0x45A6 to 0x46A0 String.search(undefined) PASSED!
+0x45A6 to 0x46A0 String.search() PASSED!
+Negative String.match PASSED!
+0x45A6 to 0x46A0 String.match(undefined) PASSED!
+0x45A6 to 0x46A0 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x45A60x46A0) PASSED!
+Negative String.search PASSED!
+0x46A1 to 0x479B String.search(undefined) PASSED!
+0x46A1 to 0x479B String.search() PASSED!
+Negative String.match PASSED!
+0x46A1 to 0x479B String.match(undefined) PASSED!
+0x46A1 to 0x479B String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x46A10x479B) PASSED!
+Negative String.search PASSED!
+0x479C to 0x4896 String.search(undefined) PASSED!
+0x479C to 0x4896 String.search() PASSED!
+Negative String.match PASSED!
+0x479C to 0x4896 String.match(undefined) PASSED!
+0x479C to 0x4896 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x479C0x4896) PASSED!
+Negative String.search PASSED!
+0x4897 to 0x4991 String.search(undefined) PASSED!
+0x4897 to 0x4991 String.search() PASSED!
+Negative String.match PASSED!
+0x4897 to 0x4991 String.match(undefined) PASSED!
+0x4897 to 0x4991 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x48970x4991) PASSED!
+Negative String.search PASSED!
+0x4992 to 0x4A8C String.search(undefined) PASSED!
+0x4992 to 0x4A8C String.search() PASSED!
+Negative String.match PASSED!
+0x4992 to 0x4A8C String.match(undefined) PASSED!
+0x4992 to 0x4A8C String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x49920x4A8C) PASSED!
+Negative String.search PASSED!
+0x4A8D to 0x4B87 String.search(undefined) PASSED!
+0x4A8D to 0x4B87 String.search() PASSED!
+Negative String.match PASSED!
+0x4A8D to 0x4B87 String.match(undefined) PASSED!
+0x4A8D to 0x4B87 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x4A8D0x4B87) PASSED!
+Negative String.search PASSED!
+0x4B88 to 0x4C82 String.search(undefined) PASSED!
+0x4B88 to 0x4C82 String.search() PASSED!
+Negative String.match PASSED!
+0x4B88 to 0x4C82 String.match(undefined) PASSED!
+0x4B88 to 0x4C82 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x4B880x4C82) PASSED!
+Negative String.search PASSED!
+0x4C83 to 0x4D7D String.search(undefined) PASSED!
+0x4C83 to 0x4D7D String.search() PASSED!
+Negative String.match PASSED!
+0x4C83 to 0x4D7D String.match(undefined) PASSED!
+0x4C83 to 0x4D7D String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x4C830x4D7D) PASSED!
+Negative String.search PASSED!
+0x4D7E to 0x4DBF String.search(undefined) PASSED!
+0x4D7E to 0x4DBF String.search() PASSED!
+Negative String.match PASSED!
+0x4D7E to 0x4DBF String.match(undefined) PASSED!
+0x4D7E to 0x4DBF String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x4D7E0x4DBF) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3400_CJKUnifiedIdeographsExtensionA/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3400_CJKUnifiedIdeographsExtensionA/test.swf
new file mode 100644
index 000000000..36d87745b
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3400_CJKUnifiedIdeographsExtensionA/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3400_CJKUnifiedIdeographsExtensionA/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3400_CJKUnifiedIdeographsExtensionA/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u3400_CJKUnifiedIdeographsExtensionA/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u4E00_CJKUnifiedIdeographs/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u4E00_CJKUnifiedIdeographs/Test.as
new file mode 100644
index 000000000..09006566d
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u4E00_CJKUnifiedIdeographs/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "CJK Unified Ideographs";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // CJK Unified Ideographs
+ testUnicodeRange(0x4E00, 0x4FFF);
+ negativeTestUnicodeRange(0x4E00, 0x4FFF);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u4E00_CJKUnifiedIdeographs/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u4E00_CJKUnifiedIdeographs/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u4E00_CJKUnifiedIdeographs/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u4E00_CJKUnifiedIdeographs/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u4E00_CJKUnifiedIdeographs/output.txt
new file mode 100644
index 000000000..5a906d8e0
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u4E00_CJKUnifiedIdeographs/output.txt
@@ -0,0 +1,63 @@
+Unicode String.search from 0x4E00 to 0x4E00 PASSED!
+Unicode String.search for 3 chars from 0x4E00 to 0x4E00 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x4EFB to 0x4EFB PASSED!
+Unicode String.search for 3 chars from 0x4EFB to 0x4EFB PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x4FF6 to 0x4FF6 PASSED!
+Unicode String.search for 3 chars from 0x4FF6 to 0x4FF6 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0x4E00 to 0x4EFA String.search(undefined) PASSED!
+0x4E00 to 0x4EFA String.search() PASSED!
+Negative String.match PASSED!
+0x4E00 to 0x4EFA String.match(undefined) PASSED!
+0x4E00 to 0x4EFA String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x4E000x4EFA) PASSED!
+Negative String.search PASSED!
+0x4EFB to 0x4FF5 String.search(undefined) PASSED!
+0x4EFB to 0x4FF5 String.search() PASSED!
+Negative String.match PASSED!
+0x4EFB to 0x4FF5 String.match(undefined) PASSED!
+0x4EFB to 0x4FF5 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x4EFB0x4FF5) PASSED!
+Negative String.search PASSED!
+0x4FF6 to 0x4FFF String.search(undefined) PASSED!
+0x4FF6 to 0x4FFF String.search() PASSED!
+Negative String.match PASSED!
+0x4FF6 to 0x4FFF String.match(undefined) PASSED!
+0x4FF6 to 0x4FFF String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x4FF60x4FFF) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u4E00_CJKUnifiedIdeographs/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u4E00_CJKUnifiedIdeographs/test.swf
new file mode 100644
index 000000000..031ca2fb4
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u4E00_CJKUnifiedIdeographs/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u4E00_CJKUnifiedIdeographs/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u4E00_CJKUnifiedIdeographs/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u4E00_CJKUnifiedIdeographs/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u5000_CJKUnifiedIdeographs/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u5000_CJKUnifiedIdeographs/Test.as
new file mode 100644
index 000000000..83f66db8e
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u5000_CJKUnifiedIdeographs/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "CJK Unified Ideographs";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // CJK Unified Ideographs
+ testUnicodeRange(0x5000, 0x5FFF);
+ negativeTestUnicodeRange(0x5000, 0x5FFF);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u5000_CJKUnifiedIdeographs/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u5000_CJKUnifiedIdeographs/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u5000_CJKUnifiedIdeographs/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u5000_CJKUnifiedIdeographs/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u5000_CJKUnifiedIdeographs/output.txt
new file mode 100644
index 000000000..b7ae7ad58
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u5000_CJKUnifiedIdeographs/output.txt
@@ -0,0 +1,357 @@
+Unicode String.search from 0x5000 to 0x5000 PASSED!
+Unicode String.search for 3 chars from 0x5000 to 0x5000 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x50FB to 0x50FB PASSED!
+Unicode String.search for 3 chars from 0x50FB to 0x50FB PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x51F6 to 0x51F6 PASSED!
+Unicode String.search for 3 chars from 0x51F6 to 0x51F6 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x52F1 to 0x52F1 PASSED!
+Unicode String.search for 3 chars from 0x52F1 to 0x52F1 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x53EC to 0x53EC PASSED!
+Unicode String.search for 3 chars from 0x53EC to 0x53EC PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x54E7 to 0x54E7 PASSED!
+Unicode String.search for 3 chars from 0x54E7 to 0x54E7 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x55E2 to 0x55E2 PASSED!
+Unicode String.search for 3 chars from 0x55E2 to 0x55E2 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x56DD to 0x56DD PASSED!
+Unicode String.search for 3 chars from 0x56DD to 0x56DD PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x57D8 to 0x57D8 PASSED!
+Unicode String.search for 3 chars from 0x57D8 to 0x57D8 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x58D3 to 0x58D3 PASSED!
+Unicode String.search for 3 chars from 0x58D3 to 0x58D3 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x59CE to 0x59CE PASSED!
+Unicode String.search for 3 chars from 0x59CE to 0x59CE PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x5AC9 to 0x5AC9 PASSED!
+Unicode String.search for 3 chars from 0x5AC9 to 0x5AC9 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x5BC4 to 0x5BC4 PASSED!
+Unicode String.search for 3 chars from 0x5BC4 to 0x5BC4 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x5CBF to 0x5CBF PASSED!
+Unicode String.search for 3 chars from 0x5CBF to 0x5CBF PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x5DBA to 0x5DBA PASSED!
+Unicode String.search for 3 chars from 0x5DBA to 0x5DBA PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x5EB5 to 0x5EB5 PASSED!
+Unicode String.search for 3 chars from 0x5EB5 to 0x5EB5 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x5FB0 to 0x5FB0 PASSED!
+Unicode String.search for 3 chars from 0x5FB0 to 0x5FB0 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0x5000 to 0x50FA String.search(undefined) PASSED!
+0x5000 to 0x50FA String.search() PASSED!
+Negative String.match PASSED!
+0x5000 to 0x50FA String.match(undefined) PASSED!
+0x5000 to 0x50FA String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x50000x50FA) PASSED!
+Negative String.search PASSED!
+0x50FB to 0x51F5 String.search(undefined) PASSED!
+0x50FB to 0x51F5 String.search() PASSED!
+Negative String.match PASSED!
+0x50FB to 0x51F5 String.match(undefined) PASSED!
+0x50FB to 0x51F5 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x50FB0x51F5) PASSED!
+Negative String.search PASSED!
+0x51F6 to 0x52F0 String.search(undefined) PASSED!
+0x51F6 to 0x52F0 String.search() PASSED!
+Negative String.match PASSED!
+0x51F6 to 0x52F0 String.match(undefined) PASSED!
+0x51F6 to 0x52F0 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x51F60x52F0) PASSED!
+Negative String.search PASSED!
+0x52F1 to 0x53EB String.search(undefined) PASSED!
+0x52F1 to 0x53EB String.search() PASSED!
+Negative String.match PASSED!
+0x52F1 to 0x53EB String.match(undefined) PASSED!
+0x52F1 to 0x53EB String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x52F10x53EB) PASSED!
+Negative String.search PASSED!
+0x53EC to 0x54E6 String.search(undefined) PASSED!
+0x53EC to 0x54E6 String.search() PASSED!
+Negative String.match PASSED!
+0x53EC to 0x54E6 String.match(undefined) PASSED!
+0x53EC to 0x54E6 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x53EC0x54E6) PASSED!
+Negative String.search PASSED!
+0x54E7 to 0x55E1 String.search(undefined) PASSED!
+0x54E7 to 0x55E1 String.search() PASSED!
+Negative String.match PASSED!
+0x54E7 to 0x55E1 String.match(undefined) PASSED!
+0x54E7 to 0x55E1 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x54E70x55E1) PASSED!
+Negative String.search PASSED!
+0x55E2 to 0x56DC String.search(undefined) PASSED!
+0x55E2 to 0x56DC String.search() PASSED!
+Negative String.match PASSED!
+0x55E2 to 0x56DC String.match(undefined) PASSED!
+0x55E2 to 0x56DC String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x55E20x56DC) PASSED!
+Negative String.search PASSED!
+0x56DD to 0x57D7 String.search(undefined) PASSED!
+0x56DD to 0x57D7 String.search() PASSED!
+Negative String.match PASSED!
+0x56DD to 0x57D7 String.match(undefined) PASSED!
+0x56DD to 0x57D7 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x56DD0x57D7) PASSED!
+Negative String.search PASSED!
+0x57D8 to 0x58D2 String.search(undefined) PASSED!
+0x57D8 to 0x58D2 String.search() PASSED!
+Negative String.match PASSED!
+0x57D8 to 0x58D2 String.match(undefined) PASSED!
+0x57D8 to 0x58D2 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x57D80x58D2) PASSED!
+Negative String.search PASSED!
+0x58D3 to 0x59CD String.search(undefined) PASSED!
+0x58D3 to 0x59CD String.search() PASSED!
+Negative String.match PASSED!
+0x58D3 to 0x59CD String.match(undefined) PASSED!
+0x58D3 to 0x59CD String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x58D30x59CD) PASSED!
+Negative String.search PASSED!
+0x59CE to 0x5AC8 String.search(undefined) PASSED!
+0x59CE to 0x5AC8 String.search() PASSED!
+Negative String.match PASSED!
+0x59CE to 0x5AC8 String.match(undefined) PASSED!
+0x59CE to 0x5AC8 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x59CE0x5AC8) PASSED!
+Negative String.search PASSED!
+0x5AC9 to 0x5BC3 String.search(undefined) PASSED!
+0x5AC9 to 0x5BC3 String.search() PASSED!
+Negative String.match PASSED!
+0x5AC9 to 0x5BC3 String.match(undefined) PASSED!
+0x5AC9 to 0x5BC3 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x5AC90x5BC3) PASSED!
+Negative String.search PASSED!
+0x5BC4 to 0x5CBE String.search(undefined) PASSED!
+0x5BC4 to 0x5CBE String.search() PASSED!
+Negative String.match PASSED!
+0x5BC4 to 0x5CBE String.match(undefined) PASSED!
+0x5BC4 to 0x5CBE String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x5BC40x5CBE) PASSED!
+Negative String.search PASSED!
+0x5CBF to 0x5DB9 String.search(undefined) PASSED!
+0x5CBF to 0x5DB9 String.search() PASSED!
+Negative String.match PASSED!
+0x5CBF to 0x5DB9 String.match(undefined) PASSED!
+0x5CBF to 0x5DB9 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x5CBF0x5DB9) PASSED!
+Negative String.search PASSED!
+0x5DBA to 0x5EB4 String.search(undefined) PASSED!
+0x5DBA to 0x5EB4 String.search() PASSED!
+Negative String.match PASSED!
+0x5DBA to 0x5EB4 String.match(undefined) PASSED!
+0x5DBA to 0x5EB4 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x5DBA0x5EB4) PASSED!
+Negative String.search PASSED!
+0x5EB5 to 0x5FAF String.search(undefined) PASSED!
+0x5EB5 to 0x5FAF String.search() PASSED!
+Negative String.match PASSED!
+0x5EB5 to 0x5FAF String.match(undefined) PASSED!
+0x5EB5 to 0x5FAF String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x5EB50x5FAF) PASSED!
+Negative String.search PASSED!
+0x5FB0 to 0x5FFF String.search(undefined) PASSED!
+0x5FB0 to 0x5FFF String.search() PASSED!
+Negative String.match PASSED!
+0x5FB0 to 0x5FFF String.match(undefined) PASSED!
+0x5FB0 to 0x5FFF String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x5FB00x5FFF) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u5000_CJKUnifiedIdeographs/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u5000_CJKUnifiedIdeographs/test.swf
new file mode 100644
index 000000000..522000d6f
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u5000_CJKUnifiedIdeographs/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u5000_CJKUnifiedIdeographs/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u5000_CJKUnifiedIdeographs/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u5000_CJKUnifiedIdeographs/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u6000_CJKUnifiedIdeographs/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u6000_CJKUnifiedIdeographs/Test.as
new file mode 100644
index 000000000..08d43ed17
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u6000_CJKUnifiedIdeographs/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "CJK Unified Ideographs";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // CJK Unified Ideographs
+ testUnicodeRange(0x6000, 0x6FFF);
+ negativeTestUnicodeRange(0x6000, 0x6FFF);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u6000_CJKUnifiedIdeographs/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u6000_CJKUnifiedIdeographs/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u6000_CJKUnifiedIdeographs/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u6000_CJKUnifiedIdeographs/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u6000_CJKUnifiedIdeographs/output.txt
new file mode 100644
index 000000000..ab6763d9b
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u6000_CJKUnifiedIdeographs/output.txt
@@ -0,0 +1,357 @@
+Unicode String.search from 0x6000 to 0x6000 PASSED!
+Unicode String.search for 3 chars from 0x6000 to 0x6000 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x60FB to 0x60FB PASSED!
+Unicode String.search for 3 chars from 0x60FB to 0x60FB PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x61F6 to 0x61F6 PASSED!
+Unicode String.search for 3 chars from 0x61F6 to 0x61F6 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x62F1 to 0x62F1 PASSED!
+Unicode String.search for 3 chars from 0x62F1 to 0x62F1 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x63EC to 0x63EC PASSED!
+Unicode String.search for 3 chars from 0x63EC to 0x63EC PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x64E7 to 0x64E7 PASSED!
+Unicode String.search for 3 chars from 0x64E7 to 0x64E7 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x65E2 to 0x65E2 PASSED!
+Unicode String.search for 3 chars from 0x65E2 to 0x65E2 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x66DD to 0x66DD PASSED!
+Unicode String.search for 3 chars from 0x66DD to 0x66DD PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x67D8 to 0x67D8 PASSED!
+Unicode String.search for 3 chars from 0x67D8 to 0x67D8 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x68D3 to 0x68D3 PASSED!
+Unicode String.search for 3 chars from 0x68D3 to 0x68D3 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x69CE to 0x69CE PASSED!
+Unicode String.search for 3 chars from 0x69CE to 0x69CE PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x6AC9 to 0x6AC9 PASSED!
+Unicode String.search for 3 chars from 0x6AC9 to 0x6AC9 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x6BC4 to 0x6BC4 PASSED!
+Unicode String.search for 3 chars from 0x6BC4 to 0x6BC4 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x6CBF to 0x6CBF PASSED!
+Unicode String.search for 3 chars from 0x6CBF to 0x6CBF PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x6DBA to 0x6DBA PASSED!
+Unicode String.search for 3 chars from 0x6DBA to 0x6DBA PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x6EB5 to 0x6EB5 PASSED!
+Unicode String.search for 3 chars from 0x6EB5 to 0x6EB5 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x6FB0 to 0x6FB0 PASSED!
+Unicode String.search for 3 chars from 0x6FB0 to 0x6FB0 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0x6000 to 0x60FA String.search(undefined) PASSED!
+0x6000 to 0x60FA String.search() PASSED!
+Negative String.match PASSED!
+0x6000 to 0x60FA String.match(undefined) PASSED!
+0x6000 to 0x60FA String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x60000x60FA) PASSED!
+Negative String.search PASSED!
+0x60FB to 0x61F5 String.search(undefined) PASSED!
+0x60FB to 0x61F5 String.search() PASSED!
+Negative String.match PASSED!
+0x60FB to 0x61F5 String.match(undefined) PASSED!
+0x60FB to 0x61F5 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x60FB0x61F5) PASSED!
+Negative String.search PASSED!
+0x61F6 to 0x62F0 String.search(undefined) PASSED!
+0x61F6 to 0x62F0 String.search() PASSED!
+Negative String.match PASSED!
+0x61F6 to 0x62F0 String.match(undefined) PASSED!
+0x61F6 to 0x62F0 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x61F60x62F0) PASSED!
+Negative String.search PASSED!
+0x62F1 to 0x63EB String.search(undefined) PASSED!
+0x62F1 to 0x63EB String.search() PASSED!
+Negative String.match PASSED!
+0x62F1 to 0x63EB String.match(undefined) PASSED!
+0x62F1 to 0x63EB String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x62F10x63EB) PASSED!
+Negative String.search PASSED!
+0x63EC to 0x64E6 String.search(undefined) PASSED!
+0x63EC to 0x64E6 String.search() PASSED!
+Negative String.match PASSED!
+0x63EC to 0x64E6 String.match(undefined) PASSED!
+0x63EC to 0x64E6 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x63EC0x64E6) PASSED!
+Negative String.search PASSED!
+0x64E7 to 0x65E1 String.search(undefined) PASSED!
+0x64E7 to 0x65E1 String.search() PASSED!
+Negative String.match PASSED!
+0x64E7 to 0x65E1 String.match(undefined) PASSED!
+0x64E7 to 0x65E1 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x64E70x65E1) PASSED!
+Negative String.search PASSED!
+0x65E2 to 0x66DC String.search(undefined) PASSED!
+0x65E2 to 0x66DC String.search() PASSED!
+Negative String.match PASSED!
+0x65E2 to 0x66DC String.match(undefined) PASSED!
+0x65E2 to 0x66DC String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x65E20x66DC) PASSED!
+Negative String.search PASSED!
+0x66DD to 0x67D7 String.search(undefined) PASSED!
+0x66DD to 0x67D7 String.search() PASSED!
+Negative String.match PASSED!
+0x66DD to 0x67D7 String.match(undefined) PASSED!
+0x66DD to 0x67D7 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x66DD0x67D7) PASSED!
+Negative String.search PASSED!
+0x67D8 to 0x68D2 String.search(undefined) PASSED!
+0x67D8 to 0x68D2 String.search() PASSED!
+Negative String.match PASSED!
+0x67D8 to 0x68D2 String.match(undefined) PASSED!
+0x67D8 to 0x68D2 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x67D80x68D2) PASSED!
+Negative String.search PASSED!
+0x68D3 to 0x69CD String.search(undefined) PASSED!
+0x68D3 to 0x69CD String.search() PASSED!
+Negative String.match PASSED!
+0x68D3 to 0x69CD String.match(undefined) PASSED!
+0x68D3 to 0x69CD String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x68D30x69CD) PASSED!
+Negative String.search PASSED!
+0x69CE to 0x6AC8 String.search(undefined) PASSED!
+0x69CE to 0x6AC8 String.search() PASSED!
+Negative String.match PASSED!
+0x69CE to 0x6AC8 String.match(undefined) PASSED!
+0x69CE to 0x6AC8 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x69CE0x6AC8) PASSED!
+Negative String.search PASSED!
+0x6AC9 to 0x6BC3 String.search(undefined) PASSED!
+0x6AC9 to 0x6BC3 String.search() PASSED!
+Negative String.match PASSED!
+0x6AC9 to 0x6BC3 String.match(undefined) PASSED!
+0x6AC9 to 0x6BC3 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x6AC90x6BC3) PASSED!
+Negative String.search PASSED!
+0x6BC4 to 0x6CBE String.search(undefined) PASSED!
+0x6BC4 to 0x6CBE String.search() PASSED!
+Negative String.match PASSED!
+0x6BC4 to 0x6CBE String.match(undefined) PASSED!
+0x6BC4 to 0x6CBE String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x6BC40x6CBE) PASSED!
+Negative String.search PASSED!
+0x6CBF to 0x6DB9 String.search(undefined) PASSED!
+0x6CBF to 0x6DB9 String.search() PASSED!
+Negative String.match PASSED!
+0x6CBF to 0x6DB9 String.match(undefined) PASSED!
+0x6CBF to 0x6DB9 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x6CBF0x6DB9) PASSED!
+Negative String.search PASSED!
+0x6DBA to 0x6EB4 String.search(undefined) PASSED!
+0x6DBA to 0x6EB4 String.search() PASSED!
+Negative String.match PASSED!
+0x6DBA to 0x6EB4 String.match(undefined) PASSED!
+0x6DBA to 0x6EB4 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x6DBA0x6EB4) PASSED!
+Negative String.search PASSED!
+0x6EB5 to 0x6FAF String.search(undefined) PASSED!
+0x6EB5 to 0x6FAF String.search() PASSED!
+Negative String.match PASSED!
+0x6EB5 to 0x6FAF String.match(undefined) PASSED!
+0x6EB5 to 0x6FAF String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x6EB50x6FAF) PASSED!
+Negative String.search PASSED!
+0x6FB0 to 0x6FFF String.search(undefined) PASSED!
+0x6FB0 to 0x6FFF String.search() PASSED!
+Negative String.match PASSED!
+0x6FB0 to 0x6FFF String.match(undefined) PASSED!
+0x6FB0 to 0x6FFF String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x6FB00x6FFF) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u6000_CJKUnifiedIdeographs/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u6000_CJKUnifiedIdeographs/test.swf
new file mode 100644
index 000000000..04941ebb9
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u6000_CJKUnifiedIdeographs/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u6000_CJKUnifiedIdeographs/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u6000_CJKUnifiedIdeographs/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u6000_CJKUnifiedIdeographs/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u7000_CJKUnifiedIdeographs/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u7000_CJKUnifiedIdeographs/Test.as
new file mode 100644
index 000000000..436d02119
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u7000_CJKUnifiedIdeographs/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "CJK Unified Ideographs";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // CJK Unified Ideographs
+ testUnicodeRange(0x7000, 0x7FFF);
+ negativeTestUnicodeRange(0x7000, 0x7FFF);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u7000_CJKUnifiedIdeographs/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u7000_CJKUnifiedIdeographs/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u7000_CJKUnifiedIdeographs/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u7000_CJKUnifiedIdeographs/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u7000_CJKUnifiedIdeographs/output.txt
new file mode 100644
index 000000000..c185375fa
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u7000_CJKUnifiedIdeographs/output.txt
@@ -0,0 +1,357 @@
+Unicode String.search from 0x7000 to 0x7000 PASSED!
+Unicode String.search for 3 chars from 0x7000 to 0x7000 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x70FB to 0x70FB PASSED!
+Unicode String.search for 3 chars from 0x70FB to 0x70FB PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x71F6 to 0x71F6 PASSED!
+Unicode String.search for 3 chars from 0x71F6 to 0x71F6 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x72F1 to 0x72F1 PASSED!
+Unicode String.search for 3 chars from 0x72F1 to 0x72F1 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x73EC to 0x73EC PASSED!
+Unicode String.search for 3 chars from 0x73EC to 0x73EC PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x74E7 to 0x74E7 PASSED!
+Unicode String.search for 3 chars from 0x74E7 to 0x74E7 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x75E2 to 0x75E2 PASSED!
+Unicode String.search for 3 chars from 0x75E2 to 0x75E2 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x76DD to 0x76DD PASSED!
+Unicode String.search for 3 chars from 0x76DD to 0x76DD PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x77D8 to 0x77D8 PASSED!
+Unicode String.search for 3 chars from 0x77D8 to 0x77D8 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x78D3 to 0x78D3 PASSED!
+Unicode String.search for 3 chars from 0x78D3 to 0x78D3 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x79CE to 0x79CE PASSED!
+Unicode String.search for 3 chars from 0x79CE to 0x79CE PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x7AC9 to 0x7AC9 PASSED!
+Unicode String.search for 3 chars from 0x7AC9 to 0x7AC9 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x7BC4 to 0x7BC4 PASSED!
+Unicode String.search for 3 chars from 0x7BC4 to 0x7BC4 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x7CBF to 0x7CBF PASSED!
+Unicode String.search for 3 chars from 0x7CBF to 0x7CBF PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x7DBA to 0x7DBA PASSED!
+Unicode String.search for 3 chars from 0x7DBA to 0x7DBA PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x7EB5 to 0x7EB5 PASSED!
+Unicode String.search for 3 chars from 0x7EB5 to 0x7EB5 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x7FB0 to 0x7FB0 PASSED!
+Unicode String.search for 3 chars from 0x7FB0 to 0x7FB0 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0x7000 to 0x70FA String.search(undefined) PASSED!
+0x7000 to 0x70FA String.search() PASSED!
+Negative String.match PASSED!
+0x7000 to 0x70FA String.match(undefined) PASSED!
+0x7000 to 0x70FA String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x70000x70FA) PASSED!
+Negative String.search PASSED!
+0x70FB to 0x71F5 String.search(undefined) PASSED!
+0x70FB to 0x71F5 String.search() PASSED!
+Negative String.match PASSED!
+0x70FB to 0x71F5 String.match(undefined) PASSED!
+0x70FB to 0x71F5 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x70FB0x71F5) PASSED!
+Negative String.search PASSED!
+0x71F6 to 0x72F0 String.search(undefined) PASSED!
+0x71F6 to 0x72F0 String.search() PASSED!
+Negative String.match PASSED!
+0x71F6 to 0x72F0 String.match(undefined) PASSED!
+0x71F6 to 0x72F0 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x71F60x72F0) PASSED!
+Negative String.search PASSED!
+0x72F1 to 0x73EB String.search(undefined) PASSED!
+0x72F1 to 0x73EB String.search() PASSED!
+Negative String.match PASSED!
+0x72F1 to 0x73EB String.match(undefined) PASSED!
+0x72F1 to 0x73EB String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x72F10x73EB) PASSED!
+Negative String.search PASSED!
+0x73EC to 0x74E6 String.search(undefined) PASSED!
+0x73EC to 0x74E6 String.search() PASSED!
+Negative String.match PASSED!
+0x73EC to 0x74E6 String.match(undefined) PASSED!
+0x73EC to 0x74E6 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x73EC0x74E6) PASSED!
+Negative String.search PASSED!
+0x74E7 to 0x75E1 String.search(undefined) PASSED!
+0x74E7 to 0x75E1 String.search() PASSED!
+Negative String.match PASSED!
+0x74E7 to 0x75E1 String.match(undefined) PASSED!
+0x74E7 to 0x75E1 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x74E70x75E1) PASSED!
+Negative String.search PASSED!
+0x75E2 to 0x76DC String.search(undefined) PASSED!
+0x75E2 to 0x76DC String.search() PASSED!
+Negative String.match PASSED!
+0x75E2 to 0x76DC String.match(undefined) PASSED!
+0x75E2 to 0x76DC String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x75E20x76DC) PASSED!
+Negative String.search PASSED!
+0x76DD to 0x77D7 String.search(undefined) PASSED!
+0x76DD to 0x77D7 String.search() PASSED!
+Negative String.match PASSED!
+0x76DD to 0x77D7 String.match(undefined) PASSED!
+0x76DD to 0x77D7 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x76DD0x77D7) PASSED!
+Negative String.search PASSED!
+0x77D8 to 0x78D2 String.search(undefined) PASSED!
+0x77D8 to 0x78D2 String.search() PASSED!
+Negative String.match PASSED!
+0x77D8 to 0x78D2 String.match(undefined) PASSED!
+0x77D8 to 0x78D2 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x77D80x78D2) PASSED!
+Negative String.search PASSED!
+0x78D3 to 0x79CD String.search(undefined) PASSED!
+0x78D3 to 0x79CD String.search() PASSED!
+Negative String.match PASSED!
+0x78D3 to 0x79CD String.match(undefined) PASSED!
+0x78D3 to 0x79CD String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x78D30x79CD) PASSED!
+Negative String.search PASSED!
+0x79CE to 0x7AC8 String.search(undefined) PASSED!
+0x79CE to 0x7AC8 String.search() PASSED!
+Negative String.match PASSED!
+0x79CE to 0x7AC8 String.match(undefined) PASSED!
+0x79CE to 0x7AC8 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x79CE0x7AC8) PASSED!
+Negative String.search PASSED!
+0x7AC9 to 0x7BC3 String.search(undefined) PASSED!
+0x7AC9 to 0x7BC3 String.search() PASSED!
+Negative String.match PASSED!
+0x7AC9 to 0x7BC3 String.match(undefined) PASSED!
+0x7AC9 to 0x7BC3 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x7AC90x7BC3) PASSED!
+Negative String.search PASSED!
+0x7BC4 to 0x7CBE String.search(undefined) PASSED!
+0x7BC4 to 0x7CBE String.search() PASSED!
+Negative String.match PASSED!
+0x7BC4 to 0x7CBE String.match(undefined) PASSED!
+0x7BC4 to 0x7CBE String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x7BC40x7CBE) PASSED!
+Negative String.search PASSED!
+0x7CBF to 0x7DB9 String.search(undefined) PASSED!
+0x7CBF to 0x7DB9 String.search() PASSED!
+Negative String.match PASSED!
+0x7CBF to 0x7DB9 String.match(undefined) PASSED!
+0x7CBF to 0x7DB9 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x7CBF0x7DB9) PASSED!
+Negative String.search PASSED!
+0x7DBA to 0x7EB4 String.search(undefined) PASSED!
+0x7DBA to 0x7EB4 String.search() PASSED!
+Negative String.match PASSED!
+0x7DBA to 0x7EB4 String.match(undefined) PASSED!
+0x7DBA to 0x7EB4 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x7DBA0x7EB4) PASSED!
+Negative String.search PASSED!
+0x7EB5 to 0x7FAF String.search(undefined) PASSED!
+0x7EB5 to 0x7FAF String.search() PASSED!
+Negative String.match PASSED!
+0x7EB5 to 0x7FAF String.match(undefined) PASSED!
+0x7EB5 to 0x7FAF String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x7EB50x7FAF) PASSED!
+Negative String.search PASSED!
+0x7FB0 to 0x7FFF String.search(undefined) PASSED!
+0x7FB0 to 0x7FFF String.search() PASSED!
+Negative String.match PASSED!
+0x7FB0 to 0x7FFF String.match(undefined) PASSED!
+0x7FB0 to 0x7FFF String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x7FB00x7FFF) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u7000_CJKUnifiedIdeographs/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u7000_CJKUnifiedIdeographs/test.swf
new file mode 100644
index 000000000..016f8b155
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u7000_CJKUnifiedIdeographs/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u7000_CJKUnifiedIdeographs/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u7000_CJKUnifiedIdeographs/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u7000_CJKUnifiedIdeographs/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u8000_CJKUnifiedIdeographs/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u8000_CJKUnifiedIdeographs/Test.as
new file mode 100644
index 000000000..0122d8b04
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u8000_CJKUnifiedIdeographs/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "CJK Unified Ideographs";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // CJK Unified Ideographs
+ testUnicodeRange(0x8000, 0x8FFF);
+ negativeTestUnicodeRange(0x8000, 0x8FFF);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u8000_CJKUnifiedIdeographs/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u8000_CJKUnifiedIdeographs/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u8000_CJKUnifiedIdeographs/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u8000_CJKUnifiedIdeographs/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u8000_CJKUnifiedIdeographs/output.txt
new file mode 100644
index 000000000..a3137acdd
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u8000_CJKUnifiedIdeographs/output.txt
@@ -0,0 +1,357 @@
+Unicode String.search from 0x8000 to 0x8000 PASSED!
+Unicode String.search for 3 chars from 0x8000 to 0x8000 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x80FB to 0x80FB PASSED!
+Unicode String.search for 3 chars from 0x80FB to 0x80FB PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x81F6 to 0x81F6 PASSED!
+Unicode String.search for 3 chars from 0x81F6 to 0x81F6 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x82F1 to 0x82F1 PASSED!
+Unicode String.search for 3 chars from 0x82F1 to 0x82F1 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x83EC to 0x83EC PASSED!
+Unicode String.search for 3 chars from 0x83EC to 0x83EC PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x84E7 to 0x84E7 PASSED!
+Unicode String.search for 3 chars from 0x84E7 to 0x84E7 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x85E2 to 0x85E2 PASSED!
+Unicode String.search for 3 chars from 0x85E2 to 0x85E2 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x86DD to 0x86DD PASSED!
+Unicode String.search for 3 chars from 0x86DD to 0x86DD PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x87D8 to 0x87D8 PASSED!
+Unicode String.search for 3 chars from 0x87D8 to 0x87D8 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x88D3 to 0x88D3 PASSED!
+Unicode String.search for 3 chars from 0x88D3 to 0x88D3 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x89CE to 0x89CE PASSED!
+Unicode String.search for 3 chars from 0x89CE to 0x89CE PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x8AC9 to 0x8AC9 PASSED!
+Unicode String.search for 3 chars from 0x8AC9 to 0x8AC9 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x8BC4 to 0x8BC4 PASSED!
+Unicode String.search for 3 chars from 0x8BC4 to 0x8BC4 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x8CBF to 0x8CBF PASSED!
+Unicode String.search for 3 chars from 0x8CBF to 0x8CBF PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x8DBA to 0x8DBA PASSED!
+Unicode String.search for 3 chars from 0x8DBA to 0x8DBA PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x8EB5 to 0x8EB5 PASSED!
+Unicode String.search for 3 chars from 0x8EB5 to 0x8EB5 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x8FB0 to 0x8FB0 PASSED!
+Unicode String.search for 3 chars from 0x8FB0 to 0x8FB0 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0x8000 to 0x80FA String.search(undefined) PASSED!
+0x8000 to 0x80FA String.search() PASSED!
+Negative String.match PASSED!
+0x8000 to 0x80FA String.match(undefined) PASSED!
+0x8000 to 0x80FA String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x80000x80FA) PASSED!
+Negative String.search PASSED!
+0x80FB to 0x81F5 String.search(undefined) PASSED!
+0x80FB to 0x81F5 String.search() PASSED!
+Negative String.match PASSED!
+0x80FB to 0x81F5 String.match(undefined) PASSED!
+0x80FB to 0x81F5 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x80FB0x81F5) PASSED!
+Negative String.search PASSED!
+0x81F6 to 0x82F0 String.search(undefined) PASSED!
+0x81F6 to 0x82F0 String.search() PASSED!
+Negative String.match PASSED!
+0x81F6 to 0x82F0 String.match(undefined) PASSED!
+0x81F6 to 0x82F0 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x81F60x82F0) PASSED!
+Negative String.search PASSED!
+0x82F1 to 0x83EB String.search(undefined) PASSED!
+0x82F1 to 0x83EB String.search() PASSED!
+Negative String.match PASSED!
+0x82F1 to 0x83EB String.match(undefined) PASSED!
+0x82F1 to 0x83EB String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x82F10x83EB) PASSED!
+Negative String.search PASSED!
+0x83EC to 0x84E6 String.search(undefined) PASSED!
+0x83EC to 0x84E6 String.search() PASSED!
+Negative String.match PASSED!
+0x83EC to 0x84E6 String.match(undefined) PASSED!
+0x83EC to 0x84E6 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x83EC0x84E6) PASSED!
+Negative String.search PASSED!
+0x84E7 to 0x85E1 String.search(undefined) PASSED!
+0x84E7 to 0x85E1 String.search() PASSED!
+Negative String.match PASSED!
+0x84E7 to 0x85E1 String.match(undefined) PASSED!
+0x84E7 to 0x85E1 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x84E70x85E1) PASSED!
+Negative String.search PASSED!
+0x85E2 to 0x86DC String.search(undefined) PASSED!
+0x85E2 to 0x86DC String.search() PASSED!
+Negative String.match PASSED!
+0x85E2 to 0x86DC String.match(undefined) PASSED!
+0x85E2 to 0x86DC String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x85E20x86DC) PASSED!
+Negative String.search PASSED!
+0x86DD to 0x87D7 String.search(undefined) PASSED!
+0x86DD to 0x87D7 String.search() PASSED!
+Negative String.match PASSED!
+0x86DD to 0x87D7 String.match(undefined) PASSED!
+0x86DD to 0x87D7 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x86DD0x87D7) PASSED!
+Negative String.search PASSED!
+0x87D8 to 0x88D2 String.search(undefined) PASSED!
+0x87D8 to 0x88D2 String.search() PASSED!
+Negative String.match PASSED!
+0x87D8 to 0x88D2 String.match(undefined) PASSED!
+0x87D8 to 0x88D2 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x87D80x88D2) PASSED!
+Negative String.search PASSED!
+0x88D3 to 0x89CD String.search(undefined) PASSED!
+0x88D3 to 0x89CD String.search() PASSED!
+Negative String.match PASSED!
+0x88D3 to 0x89CD String.match(undefined) PASSED!
+0x88D3 to 0x89CD String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x88D30x89CD) PASSED!
+Negative String.search PASSED!
+0x89CE to 0x8AC8 String.search(undefined) PASSED!
+0x89CE to 0x8AC8 String.search() PASSED!
+Negative String.match PASSED!
+0x89CE to 0x8AC8 String.match(undefined) PASSED!
+0x89CE to 0x8AC8 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x89CE0x8AC8) PASSED!
+Negative String.search PASSED!
+0x8AC9 to 0x8BC3 String.search(undefined) PASSED!
+0x8AC9 to 0x8BC3 String.search() PASSED!
+Negative String.match PASSED!
+0x8AC9 to 0x8BC3 String.match(undefined) PASSED!
+0x8AC9 to 0x8BC3 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x8AC90x8BC3) PASSED!
+Negative String.search PASSED!
+0x8BC4 to 0x8CBE String.search(undefined) PASSED!
+0x8BC4 to 0x8CBE String.search() PASSED!
+Negative String.match PASSED!
+0x8BC4 to 0x8CBE String.match(undefined) PASSED!
+0x8BC4 to 0x8CBE String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x8BC40x8CBE) PASSED!
+Negative String.search PASSED!
+0x8CBF to 0x8DB9 String.search(undefined) PASSED!
+0x8CBF to 0x8DB9 String.search() PASSED!
+Negative String.match PASSED!
+0x8CBF to 0x8DB9 String.match(undefined) PASSED!
+0x8CBF to 0x8DB9 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x8CBF0x8DB9) PASSED!
+Negative String.search PASSED!
+0x8DBA to 0x8EB4 String.search(undefined) PASSED!
+0x8DBA to 0x8EB4 String.search() PASSED!
+Negative String.match PASSED!
+0x8DBA to 0x8EB4 String.match(undefined) PASSED!
+0x8DBA to 0x8EB4 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x8DBA0x8EB4) PASSED!
+Negative String.search PASSED!
+0x8EB5 to 0x8FAF String.search(undefined) PASSED!
+0x8EB5 to 0x8FAF String.search() PASSED!
+Negative String.match PASSED!
+0x8EB5 to 0x8FAF String.match(undefined) PASSED!
+0x8EB5 to 0x8FAF String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x8EB50x8FAF) PASSED!
+Negative String.search PASSED!
+0x8FB0 to 0x8FFF String.search(undefined) PASSED!
+0x8FB0 to 0x8FFF String.search() PASSED!
+Negative String.match PASSED!
+0x8FB0 to 0x8FFF String.match(undefined) PASSED!
+0x8FB0 to 0x8FFF String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x8FB00x8FFF) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u8000_CJKUnifiedIdeographs/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u8000_CJKUnifiedIdeographs/test.swf
new file mode 100644
index 000000000..43da118ea
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u8000_CJKUnifiedIdeographs/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u8000_CJKUnifiedIdeographs/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u8000_CJKUnifiedIdeographs/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u8000_CJKUnifiedIdeographs/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u9000_CJKUnifiedIdeographs/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u9000_CJKUnifiedIdeographs/Test.as
new file mode 100644
index 000000000..802798857
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u9000_CJKUnifiedIdeographs/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "CJK Unified Ideographs";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // CJK Unified Ideographs
+ testUnicodeRange(0x9000, 0x9FFF);
+ negativeTestUnicodeRange(0x9000, 0x9FFF);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u9000_CJKUnifiedIdeographs/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u9000_CJKUnifiedIdeographs/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u9000_CJKUnifiedIdeographs/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u9000_CJKUnifiedIdeographs/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u9000_CJKUnifiedIdeographs/output.txt
new file mode 100644
index 000000000..2e0ed9b98
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u9000_CJKUnifiedIdeographs/output.txt
@@ -0,0 +1,357 @@
+Unicode String.search from 0x9000 to 0x9000 PASSED!
+Unicode String.search for 3 chars from 0x9000 to 0x9000 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x90FB to 0x90FB PASSED!
+Unicode String.search for 3 chars from 0x90FB to 0x90FB PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x91F6 to 0x91F6 PASSED!
+Unicode String.search for 3 chars from 0x91F6 to 0x91F6 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x92F1 to 0x92F1 PASSED!
+Unicode String.search for 3 chars from 0x92F1 to 0x92F1 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x93EC to 0x93EC PASSED!
+Unicode String.search for 3 chars from 0x93EC to 0x93EC PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x94E7 to 0x94E7 PASSED!
+Unicode String.search for 3 chars from 0x94E7 to 0x94E7 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x95E2 to 0x95E2 PASSED!
+Unicode String.search for 3 chars from 0x95E2 to 0x95E2 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x96DD to 0x96DD PASSED!
+Unicode String.search for 3 chars from 0x96DD to 0x96DD PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x97D8 to 0x97D8 PASSED!
+Unicode String.search for 3 chars from 0x97D8 to 0x97D8 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x98D3 to 0x98D3 PASSED!
+Unicode String.search for 3 chars from 0x98D3 to 0x98D3 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x99CE to 0x99CE PASSED!
+Unicode String.search for 3 chars from 0x99CE to 0x99CE PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x9AC9 to 0x9AC9 PASSED!
+Unicode String.search for 3 chars from 0x9AC9 to 0x9AC9 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x9BC4 to 0x9BC4 PASSED!
+Unicode String.search for 3 chars from 0x9BC4 to 0x9BC4 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x9CBF to 0x9CBF PASSED!
+Unicode String.search for 3 chars from 0x9CBF to 0x9CBF PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x9DBA to 0x9DBA PASSED!
+Unicode String.search for 3 chars from 0x9DBA to 0x9DBA PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x9EB5 to 0x9EB5 PASSED!
+Unicode String.search for 3 chars from 0x9EB5 to 0x9EB5 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0x9FB0 to 0x9FB0 PASSED!
+Unicode String.search for 3 chars from 0x9FB0 to 0x9FB0 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0x9000 to 0x90FA String.search(undefined) PASSED!
+0x9000 to 0x90FA String.search() PASSED!
+Negative String.match PASSED!
+0x9000 to 0x90FA String.match(undefined) PASSED!
+0x9000 to 0x90FA String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x90000x90FA) PASSED!
+Negative String.search PASSED!
+0x90FB to 0x91F5 String.search(undefined) PASSED!
+0x90FB to 0x91F5 String.search() PASSED!
+Negative String.match PASSED!
+0x90FB to 0x91F5 String.match(undefined) PASSED!
+0x90FB to 0x91F5 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x90FB0x91F5) PASSED!
+Negative String.search PASSED!
+0x91F6 to 0x92F0 String.search(undefined) PASSED!
+0x91F6 to 0x92F0 String.search() PASSED!
+Negative String.match PASSED!
+0x91F6 to 0x92F0 String.match(undefined) PASSED!
+0x91F6 to 0x92F0 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x91F60x92F0) PASSED!
+Negative String.search PASSED!
+0x92F1 to 0x93EB String.search(undefined) PASSED!
+0x92F1 to 0x93EB String.search() PASSED!
+Negative String.match PASSED!
+0x92F1 to 0x93EB String.match(undefined) PASSED!
+0x92F1 to 0x93EB String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x92F10x93EB) PASSED!
+Negative String.search PASSED!
+0x93EC to 0x94E6 String.search(undefined) PASSED!
+0x93EC to 0x94E6 String.search() PASSED!
+Negative String.match PASSED!
+0x93EC to 0x94E6 String.match(undefined) PASSED!
+0x93EC to 0x94E6 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x93EC0x94E6) PASSED!
+Negative String.search PASSED!
+0x94E7 to 0x95E1 String.search(undefined) PASSED!
+0x94E7 to 0x95E1 String.search() PASSED!
+Negative String.match PASSED!
+0x94E7 to 0x95E1 String.match(undefined) PASSED!
+0x94E7 to 0x95E1 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x94E70x95E1) PASSED!
+Negative String.search PASSED!
+0x95E2 to 0x96DC String.search(undefined) PASSED!
+0x95E2 to 0x96DC String.search() PASSED!
+Negative String.match PASSED!
+0x95E2 to 0x96DC String.match(undefined) PASSED!
+0x95E2 to 0x96DC String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x95E20x96DC) PASSED!
+Negative String.search PASSED!
+0x96DD to 0x97D7 String.search(undefined) PASSED!
+0x96DD to 0x97D7 String.search() PASSED!
+Negative String.match PASSED!
+0x96DD to 0x97D7 String.match(undefined) PASSED!
+0x96DD to 0x97D7 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x96DD0x97D7) PASSED!
+Negative String.search PASSED!
+0x97D8 to 0x98D2 String.search(undefined) PASSED!
+0x97D8 to 0x98D2 String.search() PASSED!
+Negative String.match PASSED!
+0x97D8 to 0x98D2 String.match(undefined) PASSED!
+0x97D8 to 0x98D2 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x97D80x98D2) PASSED!
+Negative String.search PASSED!
+0x98D3 to 0x99CD String.search(undefined) PASSED!
+0x98D3 to 0x99CD String.search() PASSED!
+Negative String.match PASSED!
+0x98D3 to 0x99CD String.match(undefined) PASSED!
+0x98D3 to 0x99CD String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x98D30x99CD) PASSED!
+Negative String.search PASSED!
+0x99CE to 0x9AC8 String.search(undefined) PASSED!
+0x99CE to 0x9AC8 String.search() PASSED!
+Negative String.match PASSED!
+0x99CE to 0x9AC8 String.match(undefined) PASSED!
+0x99CE to 0x9AC8 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x99CE0x9AC8) PASSED!
+Negative String.search PASSED!
+0x9AC9 to 0x9BC3 String.search(undefined) PASSED!
+0x9AC9 to 0x9BC3 String.search() PASSED!
+Negative String.match PASSED!
+0x9AC9 to 0x9BC3 String.match(undefined) PASSED!
+0x9AC9 to 0x9BC3 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x9AC90x9BC3) PASSED!
+Negative String.search PASSED!
+0x9BC4 to 0x9CBE String.search(undefined) PASSED!
+0x9BC4 to 0x9CBE String.search() PASSED!
+Negative String.match PASSED!
+0x9BC4 to 0x9CBE String.match(undefined) PASSED!
+0x9BC4 to 0x9CBE String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x9BC40x9CBE) PASSED!
+Negative String.search PASSED!
+0x9CBF to 0x9DB9 String.search(undefined) PASSED!
+0x9CBF to 0x9DB9 String.search() PASSED!
+Negative String.match PASSED!
+0x9CBF to 0x9DB9 String.match(undefined) PASSED!
+0x9CBF to 0x9DB9 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x9CBF0x9DB9) PASSED!
+Negative String.search PASSED!
+0x9DBA to 0x9EB4 String.search(undefined) PASSED!
+0x9DBA to 0x9EB4 String.search() PASSED!
+Negative String.match PASSED!
+0x9DBA to 0x9EB4 String.match(undefined) PASSED!
+0x9DBA to 0x9EB4 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x9DBA0x9EB4) PASSED!
+Negative String.search PASSED!
+0x9EB5 to 0x9FAF String.search(undefined) PASSED!
+0x9EB5 to 0x9FAF String.search() PASSED!
+Negative String.match PASSED!
+0x9EB5 to 0x9FAF String.match(undefined) PASSED!
+0x9EB5 to 0x9FAF String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x9EB50x9FAF) PASSED!
+Negative String.search PASSED!
+0x9FB0 to 0x9FFF String.search(undefined) PASSED!
+0x9FB0 to 0x9FFF String.search() PASSED!
+Negative String.match PASSED!
+0x9FB0 to 0x9FFF String.match(undefined) PASSED!
+0x9FB0 to 0x9FFF String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0x9FB00x9FFF) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u9000_CJKUnifiedIdeographs/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u9000_CJKUnifiedIdeographs/test.swf
new file mode 100644
index 000000000..bfe911484
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u9000_CJKUnifiedIdeographs/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u9000_CJKUnifiedIdeographs/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u9000_CJKUnifiedIdeographs/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/u9000_CJKUnifiedIdeographs/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uA000_YiSyllables/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uA000_YiSyllables/Test.as
new file mode 100644
index 000000000..18656f1c8
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uA000_YiSyllables/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "Yi Syllables";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // Yi Syllables
+ testUnicodeRange(0xA000, 0xA48F);
+ negativeTestUnicodeRange(0xA000, 0xA48F);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uA000_YiSyllables/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uA000_YiSyllables/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uA000_YiSyllables/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uA000_YiSyllables/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uA000_YiSyllables/output.txt
new file mode 100644
index 000000000..ba051b907
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uA000_YiSyllables/output.txt
@@ -0,0 +1,105 @@
+Unicode String.search from 0xA000 to 0xA000 PASSED!
+Unicode String.search for 3 chars from 0xA000 to 0xA000 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0xA0FB to 0xA0FB PASSED!
+Unicode String.search for 3 chars from 0xA0FB to 0xA0FB PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0xA1F6 to 0xA1F6 PASSED!
+Unicode String.search for 3 chars from 0xA1F6 to 0xA1F6 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0xA2F1 to 0xA2F1 PASSED!
+Unicode String.search for 3 chars from 0xA2F1 to 0xA2F1 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0xA3EC to 0xA3EC PASSED!
+Unicode String.search for 3 chars from 0xA3EC to 0xA3EC PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0xA000 to 0xA0FA String.search(undefined) PASSED!
+0xA000 to 0xA0FA String.search() PASSED!
+Negative String.match PASSED!
+0xA000 to 0xA0FA String.match(undefined) PASSED!
+0xA000 to 0xA0FA String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xA0000xA0FA) PASSED!
+Negative String.search PASSED!
+0xA0FB to 0xA1F5 String.search(undefined) PASSED!
+0xA0FB to 0xA1F5 String.search() PASSED!
+Negative String.match PASSED!
+0xA0FB to 0xA1F5 String.match(undefined) PASSED!
+0xA0FB to 0xA1F5 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xA0FB0xA1F5) PASSED!
+Negative String.search PASSED!
+0xA1F6 to 0xA2F0 String.search(undefined) PASSED!
+0xA1F6 to 0xA2F0 String.search() PASSED!
+Negative String.match PASSED!
+0xA1F6 to 0xA2F0 String.match(undefined) PASSED!
+0xA1F6 to 0xA2F0 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xA1F60xA2F0) PASSED!
+Negative String.search PASSED!
+0xA2F1 to 0xA3EB String.search(undefined) PASSED!
+0xA2F1 to 0xA3EB String.search() PASSED!
+Negative String.match PASSED!
+0xA2F1 to 0xA3EB String.match(undefined) PASSED!
+0xA2F1 to 0xA3EB String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xA2F10xA3EB) PASSED!
+Negative String.search PASSED!
+0xA3EC to 0xA48F String.search(undefined) PASSED!
+0xA3EC to 0xA48F String.search() PASSED!
+Negative String.match PASSED!
+0xA3EC to 0xA48F String.match(undefined) PASSED!
+0xA3EC to 0xA48F String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xA3EC0xA48F) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uA000_YiSyllables/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uA000_YiSyllables/test.swf
new file mode 100644
index 000000000..4a15f0545
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uA000_YiSyllables/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uA000_YiSyllables/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uA000_YiSyllables/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uA000_YiSyllables/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uA490_YiRadicals/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uA490_YiRadicals/Test.as
new file mode 100644
index 000000000..6e3fff859
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uA490_YiRadicals/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "Yi Radicals";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // Yi Radicals
+ testUnicodeRange(0xA490, 0xA4CF);
+ negativeTestUnicodeRange(0xA490, 0xA4CF);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uA490_YiRadicals/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uA490_YiRadicals/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uA490_YiRadicals/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uA490_YiRadicals/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uA490_YiRadicals/output.txt
new file mode 100644
index 000000000..3a4cdefe6
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uA490_YiRadicals/output.txt
@@ -0,0 +1,21 @@
+Unicode String.search from 0xA490 to 0xA490 PASSED!
+Unicode String.search for 3 chars from 0xA490 to 0xA490 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0xA490 to 0xA4CF String.search(undefined) PASSED!
+0xA490 to 0xA4CF String.search() PASSED!
+Negative String.match PASSED!
+0xA490 to 0xA4CF String.match(undefined) PASSED!
+0xA490 to 0xA4CF String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xA4900xA4CF) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uA490_YiRadicals/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uA490_YiRadicals/test.swf
new file mode 100644
index 000000000..e1b375300
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uA490_YiRadicals/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uA490_YiRadicals/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uA490_YiRadicals/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uA490_YiRadicals/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uAC00_HangulSyllables/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uAC00_HangulSyllables/Test.as
new file mode 100644
index 000000000..f461dbe12
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uAC00_HangulSyllables/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "Hangul Syllables";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // Hangul Syllables
+ testUnicodeRange(0xAC00, 0xD7AF);
+ negativeTestUnicodeRange(0xAC00, 0xD7AF);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uAC00_HangulSyllables/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uAC00_HangulSyllables/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uAC00_HangulSyllables/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uAC00_HangulSyllables/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uAC00_HangulSyllables/output.txt
new file mode 100644
index 000000000..01895882b
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uAC00_HangulSyllables/output.txt
@@ -0,0 +1,945 @@
+Unicode String.search from 0xAC00 to 0xAC00 PASSED!
+Unicode String.search for 3 chars from 0xAC00 to 0xAC00 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0xACFB to 0xACFB PASSED!
+Unicode String.search for 3 chars from 0xACFB to 0xACFB PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0xADF6 to 0xADF6 PASSED!
+Unicode String.search for 3 chars from 0xADF6 to 0xADF6 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0xAEF1 to 0xAEF1 PASSED!
+Unicode String.search for 3 chars from 0xAEF1 to 0xAEF1 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0xAFEC to 0xAFEC PASSED!
+Unicode String.search for 3 chars from 0xAFEC to 0xAFEC PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0xB0E7 to 0xB0E7 PASSED!
+Unicode String.search for 3 chars from 0xB0E7 to 0xB0E7 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0xB1E2 to 0xB1E2 PASSED!
+Unicode String.search for 3 chars from 0xB1E2 to 0xB1E2 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0xB2DD to 0xB2DD PASSED!
+Unicode String.search for 3 chars from 0xB2DD to 0xB2DD PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0xB3D8 to 0xB3D8 PASSED!
+Unicode String.search for 3 chars from 0xB3D8 to 0xB3D8 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0xB4D3 to 0xB4D3 PASSED!
+Unicode String.search for 3 chars from 0xB4D3 to 0xB4D3 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0xB5CE to 0xB5CE PASSED!
+Unicode String.search for 3 chars from 0xB5CE to 0xB5CE PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0xB6C9 to 0xB6C9 PASSED!
+Unicode String.search for 3 chars from 0xB6C9 to 0xB6C9 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0xB7C4 to 0xB7C4 PASSED!
+Unicode String.search for 3 chars from 0xB7C4 to 0xB7C4 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0xB8BF to 0xB8BF PASSED!
+Unicode String.search for 3 chars from 0xB8BF to 0xB8BF PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0xB9BA to 0xB9BA PASSED!
+Unicode String.search for 3 chars from 0xB9BA to 0xB9BA PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0xBAB5 to 0xBAB5 PASSED!
+Unicode String.search for 3 chars from 0xBAB5 to 0xBAB5 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0xBBB0 to 0xBBB0 PASSED!
+Unicode String.search for 3 chars from 0xBBB0 to 0xBBB0 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0xBCAB to 0xBCAB PASSED!
+Unicode String.search for 3 chars from 0xBCAB to 0xBCAB PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0xBDA6 to 0xBDA6 PASSED!
+Unicode String.search for 3 chars from 0xBDA6 to 0xBDA6 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0xBEA1 to 0xBEA1 PASSED!
+Unicode String.search for 3 chars from 0xBEA1 to 0xBEA1 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0xBF9C to 0xBF9C PASSED!
+Unicode String.search for 3 chars from 0xBF9C to 0xBF9C PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0xC097 to 0xC097 PASSED!
+Unicode String.search for 3 chars from 0xC097 to 0xC097 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0xC192 to 0xC192 PASSED!
+Unicode String.search for 3 chars from 0xC192 to 0xC192 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0xC28D to 0xC28D PASSED!
+Unicode String.search for 3 chars from 0xC28D to 0xC28D PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0xC388 to 0xC388 PASSED!
+Unicode String.search for 3 chars from 0xC388 to 0xC388 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0xC483 to 0xC483 PASSED!
+Unicode String.search for 3 chars from 0xC483 to 0xC483 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0xC57E to 0xC57E PASSED!
+Unicode String.search for 3 chars from 0xC57E to 0xC57E PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0xC679 to 0xC679 PASSED!
+Unicode String.search for 3 chars from 0xC679 to 0xC679 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0xC774 to 0xC774 PASSED!
+Unicode String.search for 3 chars from 0xC774 to 0xC774 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0xC86F to 0xC86F PASSED!
+Unicode String.search for 3 chars from 0xC86F to 0xC86F PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0xC96A to 0xC96A PASSED!
+Unicode String.search for 3 chars from 0xC96A to 0xC96A PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0xCA65 to 0xCA65 PASSED!
+Unicode String.search for 3 chars from 0xCA65 to 0xCA65 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0xCB60 to 0xCB60 PASSED!
+Unicode String.search for 3 chars from 0xCB60 to 0xCB60 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0xCC5B to 0xCC5B PASSED!
+Unicode String.search for 3 chars from 0xCC5B to 0xCC5B PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0xCD56 to 0xCD56 PASSED!
+Unicode String.search for 3 chars from 0xCD56 to 0xCD56 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0xCE51 to 0xCE51 PASSED!
+Unicode String.search for 3 chars from 0xCE51 to 0xCE51 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0xCF4C to 0xCF4C PASSED!
+Unicode String.search for 3 chars from 0xCF4C to 0xCF4C PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0xD047 to 0xD047 PASSED!
+Unicode String.search for 3 chars from 0xD047 to 0xD047 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0xD142 to 0xD142 PASSED!
+Unicode String.search for 3 chars from 0xD142 to 0xD142 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0xD23D to 0xD23D PASSED!
+Unicode String.search for 3 chars from 0xD23D to 0xD23D PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0xD338 to 0xD338 PASSED!
+Unicode String.search for 3 chars from 0xD338 to 0xD338 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0xD433 to 0xD433 PASSED!
+Unicode String.search for 3 chars from 0xD433 to 0xD433 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0xD52E to 0xD52E PASSED!
+Unicode String.search for 3 chars from 0xD52E to 0xD52E PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0xD629 to 0xD629 PASSED!
+Unicode String.search for 3 chars from 0xD629 to 0xD629 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0xD724 to 0xD724 PASSED!
+Unicode String.search for 3 chars from 0xD724 to 0xD724 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0xAC00 to 0xACFA String.search(undefined) PASSED!
+0xAC00 to 0xACFA String.search() PASSED!
+Negative String.match PASSED!
+0xAC00 to 0xACFA String.match(undefined) PASSED!
+0xAC00 to 0xACFA String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xAC000xACFA) PASSED!
+Negative String.search PASSED!
+0xACFB to 0xADF5 String.search(undefined) PASSED!
+0xACFB to 0xADF5 String.search() PASSED!
+Negative String.match PASSED!
+0xACFB to 0xADF5 String.match(undefined) PASSED!
+0xACFB to 0xADF5 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xACFB0xADF5) PASSED!
+Negative String.search PASSED!
+0xADF6 to 0xAEF0 String.search(undefined) PASSED!
+0xADF6 to 0xAEF0 String.search() PASSED!
+Negative String.match PASSED!
+0xADF6 to 0xAEF0 String.match(undefined) PASSED!
+0xADF6 to 0xAEF0 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xADF60xAEF0) PASSED!
+Negative String.search PASSED!
+0xAEF1 to 0xAFEB String.search(undefined) PASSED!
+0xAEF1 to 0xAFEB String.search() PASSED!
+Negative String.match PASSED!
+0xAEF1 to 0xAFEB String.match(undefined) PASSED!
+0xAEF1 to 0xAFEB String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xAEF10xAFEB) PASSED!
+Negative String.search PASSED!
+0xAFEC to 0xB0E6 String.search(undefined) PASSED!
+0xAFEC to 0xB0E6 String.search() PASSED!
+Negative String.match PASSED!
+0xAFEC to 0xB0E6 String.match(undefined) PASSED!
+0xAFEC to 0xB0E6 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xAFEC0xB0E6) PASSED!
+Negative String.search PASSED!
+0xB0E7 to 0xB1E1 String.search(undefined) PASSED!
+0xB0E7 to 0xB1E1 String.search() PASSED!
+Negative String.match PASSED!
+0xB0E7 to 0xB1E1 String.match(undefined) PASSED!
+0xB0E7 to 0xB1E1 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xB0E70xB1E1) PASSED!
+Negative String.search PASSED!
+0xB1E2 to 0xB2DC String.search(undefined) PASSED!
+0xB1E2 to 0xB2DC String.search() PASSED!
+Negative String.match PASSED!
+0xB1E2 to 0xB2DC String.match(undefined) PASSED!
+0xB1E2 to 0xB2DC String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xB1E20xB2DC) PASSED!
+Negative String.search PASSED!
+0xB2DD to 0xB3D7 String.search(undefined) PASSED!
+0xB2DD to 0xB3D7 String.search() PASSED!
+Negative String.match PASSED!
+0xB2DD to 0xB3D7 String.match(undefined) PASSED!
+0xB2DD to 0xB3D7 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xB2DD0xB3D7) PASSED!
+Negative String.search PASSED!
+0xB3D8 to 0xB4D2 String.search(undefined) PASSED!
+0xB3D8 to 0xB4D2 String.search() PASSED!
+Negative String.match PASSED!
+0xB3D8 to 0xB4D2 String.match(undefined) PASSED!
+0xB3D8 to 0xB4D2 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xB3D80xB4D2) PASSED!
+Negative String.search PASSED!
+0xB4D3 to 0xB5CD String.search(undefined) PASSED!
+0xB4D3 to 0xB5CD String.search() PASSED!
+Negative String.match PASSED!
+0xB4D3 to 0xB5CD String.match(undefined) PASSED!
+0xB4D3 to 0xB5CD String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xB4D30xB5CD) PASSED!
+Negative String.search PASSED!
+0xB5CE to 0xB6C8 String.search(undefined) PASSED!
+0xB5CE to 0xB6C8 String.search() PASSED!
+Negative String.match PASSED!
+0xB5CE to 0xB6C8 String.match(undefined) PASSED!
+0xB5CE to 0xB6C8 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xB5CE0xB6C8) PASSED!
+Negative String.search PASSED!
+0xB6C9 to 0xB7C3 String.search(undefined) PASSED!
+0xB6C9 to 0xB7C3 String.search() PASSED!
+Negative String.match PASSED!
+0xB6C9 to 0xB7C3 String.match(undefined) PASSED!
+0xB6C9 to 0xB7C3 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xB6C90xB7C3) PASSED!
+Negative String.search PASSED!
+0xB7C4 to 0xB8BE String.search(undefined) PASSED!
+0xB7C4 to 0xB8BE String.search() PASSED!
+Negative String.match PASSED!
+0xB7C4 to 0xB8BE String.match(undefined) PASSED!
+0xB7C4 to 0xB8BE String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xB7C40xB8BE) PASSED!
+Negative String.search PASSED!
+0xB8BF to 0xB9B9 String.search(undefined) PASSED!
+0xB8BF to 0xB9B9 String.search() PASSED!
+Negative String.match PASSED!
+0xB8BF to 0xB9B9 String.match(undefined) PASSED!
+0xB8BF to 0xB9B9 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xB8BF0xB9B9) PASSED!
+Negative String.search PASSED!
+0xB9BA to 0xBAB4 String.search(undefined) PASSED!
+0xB9BA to 0xBAB4 String.search() PASSED!
+Negative String.match PASSED!
+0xB9BA to 0xBAB4 String.match(undefined) PASSED!
+0xB9BA to 0xBAB4 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xB9BA0xBAB4) PASSED!
+Negative String.search PASSED!
+0xBAB5 to 0xBBAF String.search(undefined) PASSED!
+0xBAB5 to 0xBBAF String.search() PASSED!
+Negative String.match PASSED!
+0xBAB5 to 0xBBAF String.match(undefined) PASSED!
+0xBAB5 to 0xBBAF String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xBAB50xBBAF) PASSED!
+Negative String.search PASSED!
+0xBBB0 to 0xBCAA String.search(undefined) PASSED!
+0xBBB0 to 0xBCAA String.search() PASSED!
+Negative String.match PASSED!
+0xBBB0 to 0xBCAA String.match(undefined) PASSED!
+0xBBB0 to 0xBCAA String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xBBB00xBCAA) PASSED!
+Negative String.search PASSED!
+0xBCAB to 0xBDA5 String.search(undefined) PASSED!
+0xBCAB to 0xBDA5 String.search() PASSED!
+Negative String.match PASSED!
+0xBCAB to 0xBDA5 String.match(undefined) PASSED!
+0xBCAB to 0xBDA5 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xBCAB0xBDA5) PASSED!
+Negative String.search PASSED!
+0xBDA6 to 0xBEA0 String.search(undefined) PASSED!
+0xBDA6 to 0xBEA0 String.search() PASSED!
+Negative String.match PASSED!
+0xBDA6 to 0xBEA0 String.match(undefined) PASSED!
+0xBDA6 to 0xBEA0 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xBDA60xBEA0) PASSED!
+Negative String.search PASSED!
+0xBEA1 to 0xBF9B String.search(undefined) PASSED!
+0xBEA1 to 0xBF9B String.search() PASSED!
+Negative String.match PASSED!
+0xBEA1 to 0xBF9B String.match(undefined) PASSED!
+0xBEA1 to 0xBF9B String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xBEA10xBF9B) PASSED!
+Negative String.search PASSED!
+0xBF9C to 0xC096 String.search(undefined) PASSED!
+0xBF9C to 0xC096 String.search() PASSED!
+Negative String.match PASSED!
+0xBF9C to 0xC096 String.match(undefined) PASSED!
+0xBF9C to 0xC096 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xBF9C0xC096) PASSED!
+Negative String.search PASSED!
+0xC097 to 0xC191 String.search(undefined) PASSED!
+0xC097 to 0xC191 String.search() PASSED!
+Negative String.match PASSED!
+0xC097 to 0xC191 String.match(undefined) PASSED!
+0xC097 to 0xC191 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xC0970xC191) PASSED!
+Negative String.search PASSED!
+0xC192 to 0xC28C String.search(undefined) PASSED!
+0xC192 to 0xC28C String.search() PASSED!
+Negative String.match PASSED!
+0xC192 to 0xC28C String.match(undefined) PASSED!
+0xC192 to 0xC28C String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xC1920xC28C) PASSED!
+Negative String.search PASSED!
+0xC28D to 0xC387 String.search(undefined) PASSED!
+0xC28D to 0xC387 String.search() PASSED!
+Negative String.match PASSED!
+0xC28D to 0xC387 String.match(undefined) PASSED!
+0xC28D to 0xC387 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xC28D0xC387) PASSED!
+Negative String.search PASSED!
+0xC388 to 0xC482 String.search(undefined) PASSED!
+0xC388 to 0xC482 String.search() PASSED!
+Negative String.match PASSED!
+0xC388 to 0xC482 String.match(undefined) PASSED!
+0xC388 to 0xC482 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xC3880xC482) PASSED!
+Negative String.search PASSED!
+0xC483 to 0xC57D String.search(undefined) PASSED!
+0xC483 to 0xC57D String.search() PASSED!
+Negative String.match PASSED!
+0xC483 to 0xC57D String.match(undefined) PASSED!
+0xC483 to 0xC57D String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xC4830xC57D) PASSED!
+Negative String.search PASSED!
+0xC57E to 0xC678 String.search(undefined) PASSED!
+0xC57E to 0xC678 String.search() PASSED!
+Negative String.match PASSED!
+0xC57E to 0xC678 String.match(undefined) PASSED!
+0xC57E to 0xC678 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xC57E0xC678) PASSED!
+Negative String.search PASSED!
+0xC679 to 0xC773 String.search(undefined) PASSED!
+0xC679 to 0xC773 String.search() PASSED!
+Negative String.match PASSED!
+0xC679 to 0xC773 String.match(undefined) PASSED!
+0xC679 to 0xC773 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xC6790xC773) PASSED!
+Negative String.search PASSED!
+0xC774 to 0xC86E String.search(undefined) PASSED!
+0xC774 to 0xC86E String.search() PASSED!
+Negative String.match PASSED!
+0xC774 to 0xC86E String.match(undefined) PASSED!
+0xC774 to 0xC86E String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xC7740xC86E) PASSED!
+Negative String.search PASSED!
+0xC86F to 0xC969 String.search(undefined) PASSED!
+0xC86F to 0xC969 String.search() PASSED!
+Negative String.match PASSED!
+0xC86F to 0xC969 String.match(undefined) PASSED!
+0xC86F to 0xC969 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xC86F0xC969) PASSED!
+Negative String.search PASSED!
+0xC96A to 0xCA64 String.search(undefined) PASSED!
+0xC96A to 0xCA64 String.search() PASSED!
+Negative String.match PASSED!
+0xC96A to 0xCA64 String.match(undefined) PASSED!
+0xC96A to 0xCA64 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xC96A0xCA64) PASSED!
+Negative String.search PASSED!
+0xCA65 to 0xCB5F String.search(undefined) PASSED!
+0xCA65 to 0xCB5F String.search() PASSED!
+Negative String.match PASSED!
+0xCA65 to 0xCB5F String.match(undefined) PASSED!
+0xCA65 to 0xCB5F String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xCA650xCB5F) PASSED!
+Negative String.search PASSED!
+0xCB60 to 0xCC5A String.search(undefined) PASSED!
+0xCB60 to 0xCC5A String.search() PASSED!
+Negative String.match PASSED!
+0xCB60 to 0xCC5A String.match(undefined) PASSED!
+0xCB60 to 0xCC5A String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xCB600xCC5A) PASSED!
+Negative String.search PASSED!
+0xCC5B to 0xCD55 String.search(undefined) PASSED!
+0xCC5B to 0xCD55 String.search() PASSED!
+Negative String.match PASSED!
+0xCC5B to 0xCD55 String.match(undefined) PASSED!
+0xCC5B to 0xCD55 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xCC5B0xCD55) PASSED!
+Negative String.search PASSED!
+0xCD56 to 0xCE50 String.search(undefined) PASSED!
+0xCD56 to 0xCE50 String.search() PASSED!
+Negative String.match PASSED!
+0xCD56 to 0xCE50 String.match(undefined) PASSED!
+0xCD56 to 0xCE50 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xCD560xCE50) PASSED!
+Negative String.search PASSED!
+0xCE51 to 0xCF4B String.search(undefined) PASSED!
+0xCE51 to 0xCF4B String.search() PASSED!
+Negative String.match PASSED!
+0xCE51 to 0xCF4B String.match(undefined) PASSED!
+0xCE51 to 0xCF4B String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xCE510xCF4B) PASSED!
+Negative String.search PASSED!
+0xCF4C to 0xD046 String.search(undefined) PASSED!
+0xCF4C to 0xD046 String.search() PASSED!
+Negative String.match PASSED!
+0xCF4C to 0xD046 String.match(undefined) PASSED!
+0xCF4C to 0xD046 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xCF4C0xD046) PASSED!
+Negative String.search PASSED!
+0xD047 to 0xD141 String.search(undefined) PASSED!
+0xD047 to 0xD141 String.search() PASSED!
+Negative String.match PASSED!
+0xD047 to 0xD141 String.match(undefined) PASSED!
+0xD047 to 0xD141 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xD0470xD141) PASSED!
+Negative String.search PASSED!
+0xD142 to 0xD23C String.search(undefined) PASSED!
+0xD142 to 0xD23C String.search() PASSED!
+Negative String.match PASSED!
+0xD142 to 0xD23C String.match(undefined) PASSED!
+0xD142 to 0xD23C String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xD1420xD23C) PASSED!
+Negative String.search PASSED!
+0xD23D to 0xD337 String.search(undefined) PASSED!
+0xD23D to 0xD337 String.search() PASSED!
+Negative String.match PASSED!
+0xD23D to 0xD337 String.match(undefined) PASSED!
+0xD23D to 0xD337 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xD23D0xD337) PASSED!
+Negative String.search PASSED!
+0xD338 to 0xD432 String.search(undefined) PASSED!
+0xD338 to 0xD432 String.search() PASSED!
+Negative String.match PASSED!
+0xD338 to 0xD432 String.match(undefined) PASSED!
+0xD338 to 0xD432 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xD3380xD432) PASSED!
+Negative String.search PASSED!
+0xD433 to 0xD52D String.search(undefined) PASSED!
+0xD433 to 0xD52D String.search() PASSED!
+Negative String.match PASSED!
+0xD433 to 0xD52D String.match(undefined) PASSED!
+0xD433 to 0xD52D String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xD4330xD52D) PASSED!
+Negative String.search PASSED!
+0xD52E to 0xD628 String.search(undefined) PASSED!
+0xD52E to 0xD628 String.search() PASSED!
+Negative String.match PASSED!
+0xD52E to 0xD628 String.match(undefined) PASSED!
+0xD52E to 0xD628 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xD52E0xD628) PASSED!
+Negative String.search PASSED!
+0xD629 to 0xD723 String.search(undefined) PASSED!
+0xD629 to 0xD723 String.search() PASSED!
+Negative String.match PASSED!
+0xD629 to 0xD723 String.match(undefined) PASSED!
+0xD629 to 0xD723 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xD6290xD723) PASSED!
+Negative String.search PASSED!
+0xD724 to 0xD7AF String.search(undefined) PASSED!
+0xD724 to 0xD7AF String.search() PASSED!
+Negative String.match PASSED!
+0xD724 to 0xD7AF String.match(undefined) PASSED!
+0xD724 to 0xD7AF String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xD7240xD7AF) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uAC00_HangulSyllables/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uAC00_HangulSyllables/test.swf
new file mode 100644
index 000000000..be2d30345
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uAC00_HangulSyllables/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uAC00_HangulSyllables/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uAC00_HangulSyllables/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uAC00_HangulSyllables/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uE000_PrivateUseArea/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uE000_PrivateUseArea/Test.as
new file mode 100644
index 000000000..32c4b4fad
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uE000_PrivateUseArea/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "Private Use Area";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // Private Use Area
+ testUnicodeRange(0xE000, 0xF8FF);
+ negativeTestUnicodeRange(0xE000, 0xF8FF);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uE000_PrivateUseArea/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uE000_PrivateUseArea/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uE000_PrivateUseArea/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uE000_PrivateUseArea/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uE000_PrivateUseArea/output.txt
new file mode 100644
index 000000000..b579f6310
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uE000_PrivateUseArea/output.txt
@@ -0,0 +1,546 @@
+Unicode String.search from 0xE000 to 0xE000 PASSED!
+Unicode String.search for 3 chars from 0xE000 to 0xE000 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0xE0FB to 0xE0FB PASSED!
+Unicode String.search for 3 chars from 0xE0FB to 0xE0FB PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0xE1F6 to 0xE1F6 PASSED!
+Unicode String.search for 3 chars from 0xE1F6 to 0xE1F6 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0xE2F1 to 0xE2F1 PASSED!
+Unicode String.search for 3 chars from 0xE2F1 to 0xE2F1 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0xE3EC to 0xE3EC PASSED!
+Unicode String.search for 3 chars from 0xE3EC to 0xE3EC PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0xE4E7 to 0xE4E7 PASSED!
+Unicode String.search for 3 chars from 0xE4E7 to 0xE4E7 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0xE5E2 to 0xE5E2 PASSED!
+Unicode String.search for 3 chars from 0xE5E2 to 0xE5E2 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0xE6DD to 0xE6DD PASSED!
+Unicode String.search for 3 chars from 0xE6DD to 0xE6DD PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0xE7D8 to 0xE7D8 PASSED!
+Unicode String.search for 3 chars from 0xE7D8 to 0xE7D8 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0xE8D3 to 0xE8D3 PASSED!
+Unicode String.search for 3 chars from 0xE8D3 to 0xE8D3 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0xE9CE to 0xE9CE PASSED!
+Unicode String.search for 3 chars from 0xE9CE to 0xE9CE PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0xEAC9 to 0xEAC9 PASSED!
+Unicode String.search for 3 chars from 0xEAC9 to 0xEAC9 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0xEBC4 to 0xEBC4 PASSED!
+Unicode String.search for 3 chars from 0xEBC4 to 0xEBC4 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0xECBF to 0xECBF PASSED!
+Unicode String.search for 3 chars from 0xECBF to 0xECBF PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0xEDBA to 0xEDBA PASSED!
+Unicode String.search for 3 chars from 0xEDBA to 0xEDBA PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0xEEB5 to 0xEEB5 PASSED!
+Unicode String.search for 3 chars from 0xEEB5 to 0xEEB5 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0xEFB0 to 0xEFB0 PASSED!
+Unicode String.search for 3 chars from 0xEFB0 to 0xEFB0 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0xF0AB to 0xF0AB PASSED!
+Unicode String.search for 3 chars from 0xF0AB to 0xF0AB PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0xF1A6 to 0xF1A6 PASSED!
+Unicode String.search for 3 chars from 0xF1A6 to 0xF1A6 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0xF2A1 to 0xF2A1 PASSED!
+Unicode String.search for 3 chars from 0xF2A1 to 0xF2A1 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0xF39C to 0xF39C PASSED!
+Unicode String.search for 3 chars from 0xF39C to 0xF39C PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0xF497 to 0xF497 PASSED!
+Unicode String.search for 3 chars from 0xF497 to 0xF497 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0xF592 to 0xF592 PASSED!
+Unicode String.search for 3 chars from 0xF592 to 0xF592 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0xF68D to 0xF68D PASSED!
+Unicode String.search for 3 chars from 0xF68D to 0xF68D PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0xF788 to 0xF788 PASSED!
+Unicode String.search for 3 chars from 0xF788 to 0xF788 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0xF883 to 0xF883 PASSED!
+Unicode String.search for 3 chars from 0xF883 to 0xF883 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0xE000 to 0xE0FA String.search(undefined) PASSED!
+0xE000 to 0xE0FA String.search() PASSED!
+Negative String.match PASSED!
+0xE000 to 0xE0FA String.match(undefined) PASSED!
+0xE000 to 0xE0FA String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xE0000xE0FA) PASSED!
+Negative String.search PASSED!
+0xE0FB to 0xE1F5 String.search(undefined) PASSED!
+0xE0FB to 0xE1F5 String.search() PASSED!
+Negative String.match PASSED!
+0xE0FB to 0xE1F5 String.match(undefined) PASSED!
+0xE0FB to 0xE1F5 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xE0FB0xE1F5) PASSED!
+Negative String.search PASSED!
+0xE1F6 to 0xE2F0 String.search(undefined) PASSED!
+0xE1F6 to 0xE2F0 String.search() PASSED!
+Negative String.match PASSED!
+0xE1F6 to 0xE2F0 String.match(undefined) PASSED!
+0xE1F6 to 0xE2F0 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xE1F60xE2F0) PASSED!
+Negative String.search PASSED!
+0xE2F1 to 0xE3EB String.search(undefined) PASSED!
+0xE2F1 to 0xE3EB String.search() PASSED!
+Negative String.match PASSED!
+0xE2F1 to 0xE3EB String.match(undefined) PASSED!
+0xE2F1 to 0xE3EB String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xE2F10xE3EB) PASSED!
+Negative String.search PASSED!
+0xE3EC to 0xE4E6 String.search(undefined) PASSED!
+0xE3EC to 0xE4E6 String.search() PASSED!
+Negative String.match PASSED!
+0xE3EC to 0xE4E6 String.match(undefined) PASSED!
+0xE3EC to 0xE4E6 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xE3EC0xE4E6) PASSED!
+Negative String.search PASSED!
+0xE4E7 to 0xE5E1 String.search(undefined) PASSED!
+0xE4E7 to 0xE5E1 String.search() PASSED!
+Negative String.match PASSED!
+0xE4E7 to 0xE5E1 String.match(undefined) PASSED!
+0xE4E7 to 0xE5E1 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xE4E70xE5E1) PASSED!
+Negative String.search PASSED!
+0xE5E2 to 0xE6DC String.search(undefined) PASSED!
+0xE5E2 to 0xE6DC String.search() PASSED!
+Negative String.match PASSED!
+0xE5E2 to 0xE6DC String.match(undefined) PASSED!
+0xE5E2 to 0xE6DC String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xE5E20xE6DC) PASSED!
+Negative String.search PASSED!
+0xE6DD to 0xE7D7 String.search(undefined) PASSED!
+0xE6DD to 0xE7D7 String.search() PASSED!
+Negative String.match PASSED!
+0xE6DD to 0xE7D7 String.match(undefined) PASSED!
+0xE6DD to 0xE7D7 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xE6DD0xE7D7) PASSED!
+Negative String.search PASSED!
+0xE7D8 to 0xE8D2 String.search(undefined) PASSED!
+0xE7D8 to 0xE8D2 String.search() PASSED!
+Negative String.match PASSED!
+0xE7D8 to 0xE8D2 String.match(undefined) PASSED!
+0xE7D8 to 0xE8D2 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xE7D80xE8D2) PASSED!
+Negative String.search PASSED!
+0xE8D3 to 0xE9CD String.search(undefined) PASSED!
+0xE8D3 to 0xE9CD String.search() PASSED!
+Negative String.match PASSED!
+0xE8D3 to 0xE9CD String.match(undefined) PASSED!
+0xE8D3 to 0xE9CD String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xE8D30xE9CD) PASSED!
+Negative String.search PASSED!
+0xE9CE to 0xEAC8 String.search(undefined) PASSED!
+0xE9CE to 0xEAC8 String.search() PASSED!
+Negative String.match PASSED!
+0xE9CE to 0xEAC8 String.match(undefined) PASSED!
+0xE9CE to 0xEAC8 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xE9CE0xEAC8) PASSED!
+Negative String.search PASSED!
+0xEAC9 to 0xEBC3 String.search(undefined) PASSED!
+0xEAC9 to 0xEBC3 String.search() PASSED!
+Negative String.match PASSED!
+0xEAC9 to 0xEBC3 String.match(undefined) PASSED!
+0xEAC9 to 0xEBC3 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xEAC90xEBC3) PASSED!
+Negative String.search PASSED!
+0xEBC4 to 0xECBE String.search(undefined) PASSED!
+0xEBC4 to 0xECBE String.search() PASSED!
+Negative String.match PASSED!
+0xEBC4 to 0xECBE String.match(undefined) PASSED!
+0xEBC4 to 0xECBE String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xEBC40xECBE) PASSED!
+Negative String.search PASSED!
+0xECBF to 0xEDB9 String.search(undefined) PASSED!
+0xECBF to 0xEDB9 String.search() PASSED!
+Negative String.match PASSED!
+0xECBF to 0xEDB9 String.match(undefined) PASSED!
+0xECBF to 0xEDB9 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xECBF0xEDB9) PASSED!
+Negative String.search PASSED!
+0xEDBA to 0xEEB4 String.search(undefined) PASSED!
+0xEDBA to 0xEEB4 String.search() PASSED!
+Negative String.match PASSED!
+0xEDBA to 0xEEB4 String.match(undefined) PASSED!
+0xEDBA to 0xEEB4 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xEDBA0xEEB4) PASSED!
+Negative String.search PASSED!
+0xEEB5 to 0xEFAF String.search(undefined) PASSED!
+0xEEB5 to 0xEFAF String.search() PASSED!
+Negative String.match PASSED!
+0xEEB5 to 0xEFAF String.match(undefined) PASSED!
+0xEEB5 to 0xEFAF String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xEEB50xEFAF) PASSED!
+Negative String.search PASSED!
+0xEFB0 to 0xF0AA String.search(undefined) PASSED!
+0xEFB0 to 0xF0AA String.search() PASSED!
+Negative String.match PASSED!
+0xEFB0 to 0xF0AA String.match(undefined) PASSED!
+0xEFB0 to 0xF0AA String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xEFB00xF0AA) PASSED!
+Negative String.search PASSED!
+0xF0AB to 0xF1A5 String.search(undefined) PASSED!
+0xF0AB to 0xF1A5 String.search() PASSED!
+Negative String.match PASSED!
+0xF0AB to 0xF1A5 String.match(undefined) PASSED!
+0xF0AB to 0xF1A5 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xF0AB0xF1A5) PASSED!
+Negative String.search PASSED!
+0xF1A6 to 0xF2A0 String.search(undefined) PASSED!
+0xF1A6 to 0xF2A0 String.search() PASSED!
+Negative String.match PASSED!
+0xF1A6 to 0xF2A0 String.match(undefined) PASSED!
+0xF1A6 to 0xF2A0 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xF1A60xF2A0) PASSED!
+Negative String.search PASSED!
+0xF2A1 to 0xF39B String.search(undefined) PASSED!
+0xF2A1 to 0xF39B String.search() PASSED!
+Negative String.match PASSED!
+0xF2A1 to 0xF39B String.match(undefined) PASSED!
+0xF2A1 to 0xF39B String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xF2A10xF39B) PASSED!
+Negative String.search PASSED!
+0xF39C to 0xF496 String.search(undefined) PASSED!
+0xF39C to 0xF496 String.search() PASSED!
+Negative String.match PASSED!
+0xF39C to 0xF496 String.match(undefined) PASSED!
+0xF39C to 0xF496 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xF39C0xF496) PASSED!
+Negative String.search PASSED!
+0xF497 to 0xF591 String.search(undefined) PASSED!
+0xF497 to 0xF591 String.search() PASSED!
+Negative String.match PASSED!
+0xF497 to 0xF591 String.match(undefined) PASSED!
+0xF497 to 0xF591 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xF4970xF591) PASSED!
+Negative String.search PASSED!
+0xF592 to 0xF68C String.search(undefined) PASSED!
+0xF592 to 0xF68C String.search() PASSED!
+Negative String.match PASSED!
+0xF592 to 0xF68C String.match(undefined) PASSED!
+0xF592 to 0xF68C String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xF5920xF68C) PASSED!
+Negative String.search PASSED!
+0xF68D to 0xF787 String.search(undefined) PASSED!
+0xF68D to 0xF787 String.search() PASSED!
+Negative String.match PASSED!
+0xF68D to 0xF787 String.match(undefined) PASSED!
+0xF68D to 0xF787 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xF68D0xF787) PASSED!
+Negative String.search PASSED!
+0xF788 to 0xF882 String.search(undefined) PASSED!
+0xF788 to 0xF882 String.search() PASSED!
+Negative String.match PASSED!
+0xF788 to 0xF882 String.match(undefined) PASSED!
+0xF788 to 0xF882 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xF7880xF882) PASSED!
+Negative String.search PASSED!
+0xF883 to 0xF8FF String.search(undefined) PASSED!
+0xF883 to 0xF8FF String.search() PASSED!
+Negative String.match PASSED!
+0xF883 to 0xF8FF String.match(undefined) PASSED!
+0xF883 to 0xF8FF String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xF8830xF8FF) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uE000_PrivateUseArea/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uE000_PrivateUseArea/test.swf
new file mode 100644
index 000000000..c21aa1413
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uE000_PrivateUseArea/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uE000_PrivateUseArea/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uE000_PrivateUseArea/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uE000_PrivateUseArea/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uF900_CJKCompatibilityIdeographs/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uF900_CJKCompatibilityIdeographs/Test.as
new file mode 100644
index 000000000..1f7f9273b
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uF900_CJKCompatibilityIdeographs/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "CJK Compatibility Ideographs";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // CJK Compatibility Ideographs
+ testUnicodeRange(0xF900, 0xFAFF);
+ negativeTestUnicodeRange(0xF900, 0xFAFF);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uF900_CJKCompatibilityIdeographs/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uF900_CJKCompatibilityIdeographs/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uF900_CJKCompatibilityIdeographs/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uF900_CJKCompatibilityIdeographs/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uF900_CJKCompatibilityIdeographs/output.txt
new file mode 100644
index 000000000..6a372a053
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uF900_CJKCompatibilityIdeographs/output.txt
@@ -0,0 +1,63 @@
+Unicode String.search from 0xF900 to 0xF900 PASSED!
+Unicode String.search for 3 chars from 0xF900 to 0xF900 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0xF9FB to 0xF9FB PASSED!
+Unicode String.search for 3 chars from 0xF9FB to 0xF9FB PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0xFAF6 to 0xFAF6 PASSED!
+Unicode String.search for 3 chars from 0xFAF6 to 0xFAF6 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0xF900 to 0xF9FA String.search(undefined) PASSED!
+0xF900 to 0xF9FA String.search() PASSED!
+Negative String.match PASSED!
+0xF900 to 0xF9FA String.match(undefined) PASSED!
+0xF900 to 0xF9FA String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xF9000xF9FA) PASSED!
+Negative String.search PASSED!
+0xF9FB to 0xFAF5 String.search(undefined) PASSED!
+0xF9FB to 0xFAF5 String.search() PASSED!
+Negative String.match PASSED!
+0xF9FB to 0xFAF5 String.match(undefined) PASSED!
+0xF9FB to 0xFAF5 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xF9FB0xFAF5) PASSED!
+Negative String.search PASSED!
+0xFAF6 to 0xFAFF String.search(undefined) PASSED!
+0xFAF6 to 0xFAFF String.search() PASSED!
+Negative String.match PASSED!
+0xFAF6 to 0xFAFF String.match(undefined) PASSED!
+0xFAF6 to 0xFAFF String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xFAF60xFAFF) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uF900_CJKCompatibilityIdeographs/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uF900_CJKCompatibilityIdeographs/test.swf
new file mode 100644
index 000000000..bcb0b73d8
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uF900_CJKCompatibilityIdeographs/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uF900_CJKCompatibilityIdeographs/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uF900_CJKCompatibilityIdeographs/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uF900_CJKCompatibilityIdeographs/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFB00_AlphabeticPresentationForms/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFB00_AlphabeticPresentationForms/Test.as
new file mode 100644
index 000000000..0bf6939aa
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFB00_AlphabeticPresentationForms/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "Alphabetic Presentation Forms";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // Alphabetic Presentation Forms
+ testUnicodeRange(0xFB00, 0xFB4F);
+ negativeTestUnicodeRange(0xFB00, 0xFB4F);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFB00_AlphabeticPresentationForms/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFB00_AlphabeticPresentationForms/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFB00_AlphabeticPresentationForms/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFB00_AlphabeticPresentationForms/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFB00_AlphabeticPresentationForms/output.txt
new file mode 100644
index 000000000..82460e2c1
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFB00_AlphabeticPresentationForms/output.txt
@@ -0,0 +1,21 @@
+Unicode String.search from 0xFB00 to 0xFB00 PASSED!
+Unicode String.search for 3 chars from 0xFB00 to 0xFB00 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0xFB00 to 0xFB4F String.search(undefined) PASSED!
+0xFB00 to 0xFB4F String.search() PASSED!
+Negative String.match PASSED!
+0xFB00 to 0xFB4F String.match(undefined) PASSED!
+0xFB00 to 0xFB4F String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xFB000xFB4F) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFB00_AlphabeticPresentationForms/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFB00_AlphabeticPresentationForms/test.swf
new file mode 100644
index 000000000..a7942dd1d
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFB00_AlphabeticPresentationForms/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFB00_AlphabeticPresentationForms/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFB00_AlphabeticPresentationForms/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFB00_AlphabeticPresentationForms/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFB50_ArabicPresentationForms_A/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFB50_ArabicPresentationForms_A/Test.as
new file mode 100644
index 000000000..579140347
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFB50_ArabicPresentationForms_A/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "Arabic Presentation Forms-A";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // Arabic Presentation Forms-A
+ testUnicodeRange(0xFB50, 0xFDFF);
+ negativeTestUnicodeRange(0xFB50, 0xFDFF);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFB50_ArabicPresentationForms_A/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFB50_ArabicPresentationForms_A/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFB50_ArabicPresentationForms_A/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFB50_ArabicPresentationForms_A/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFB50_ArabicPresentationForms_A/output.txt
new file mode 100644
index 000000000..be5100455
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFB50_ArabicPresentationForms_A/output.txt
@@ -0,0 +1,63 @@
+Unicode String.search from 0xFB50 to 0xFB50 PASSED!
+Unicode String.search for 3 chars from 0xFB50 to 0xFB50 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0xFC4B to 0xFC4B PASSED!
+Unicode String.search for 3 chars from 0xFC4B to 0xFC4B PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode String.search from 0xFD46 to 0xFD46 PASSED!
+Unicode String.search for 3 chars from 0xFD46 to 0xFD46 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0xFB50 to 0xFC4A String.search(undefined) PASSED!
+0xFB50 to 0xFC4A String.search() PASSED!
+Negative String.match PASSED!
+0xFB50 to 0xFC4A String.match(undefined) PASSED!
+0xFB50 to 0xFC4A String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xFB500xFC4A) PASSED!
+Negative String.search PASSED!
+0xFC4B to 0xFD45 String.search(undefined) PASSED!
+0xFC4B to 0xFD45 String.search() PASSED!
+Negative String.match PASSED!
+0xFC4B to 0xFD45 String.match(undefined) PASSED!
+0xFC4B to 0xFD45 String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xFC4B0xFD45) PASSED!
+Negative String.search PASSED!
+0xFD46 to 0xFDFF String.search(undefined) PASSED!
+0xFD46 to 0xFDFF String.search() PASSED!
+Negative String.match PASSED!
+0xFD46 to 0xFDFF String.match(undefined) PASSED!
+0xFD46 to 0xFDFF String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xFD460xFDFF) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFB50_ArabicPresentationForms_A/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFB50_ArabicPresentationForms_A/test.swf
new file mode 100644
index 000000000..de24b6427
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFB50_ArabicPresentationForms_A/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFB50_ArabicPresentationForms_A/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFB50_ArabicPresentationForms_A/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFB50_ArabicPresentationForms_A/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFE00_VariationSelectors/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFE00_VariationSelectors/Test.as
new file mode 100644
index 000000000..50dbee87e
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFE00_VariationSelectors/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "Variation Selectors";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // Variation Selectors
+ testUnicodeRange(0xFE00, 0xFE0F);
+ negativeTestUnicodeRange(0xFE00, 0xFE0F);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFE00_VariationSelectors/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFE00_VariationSelectors/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFE00_VariationSelectors/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFE00_VariationSelectors/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFE00_VariationSelectors/output.txt
new file mode 100644
index 000000000..ae76a5e24
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFE00_VariationSelectors/output.txt
@@ -0,0 +1,21 @@
+Unicode String.search from 0xFE00 to 0xFE00 PASSED!
+Unicode String.search for 3 chars from 0xFE00 to 0xFE00 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0xFE00 to 0xFE0F String.search(undefined) PASSED!
+0xFE00 to 0xFE0F String.search() PASSED!
+Negative String.match PASSED!
+0xFE00 to 0xFE0F String.match(undefined) PASSED!
+0xFE00 to 0xFE0F String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xFE000xFE0F) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFE00_VariationSelectors/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFE00_VariationSelectors/test.swf
new file mode 100644
index 000000000..06018da5c
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFE00_VariationSelectors/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFE00_VariationSelectors/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFE00_VariationSelectors/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFE00_VariationSelectors/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFE20_CombiningHalfMarks/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFE20_CombiningHalfMarks/Test.as
new file mode 100644
index 000000000..c22fa4c8f
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFE20_CombiningHalfMarks/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "Combining Half Marks";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // Combining Half Marks
+ testUnicodeRange(0xFE20, 0xFE2F);
+ negativeTestUnicodeRange(0xFE20, 0xFE2F);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFE20_CombiningHalfMarks/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFE20_CombiningHalfMarks/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFE20_CombiningHalfMarks/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFE20_CombiningHalfMarks/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFE20_CombiningHalfMarks/output.txt
new file mode 100644
index 000000000..cf6860595
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFE20_CombiningHalfMarks/output.txt
@@ -0,0 +1,21 @@
+Unicode String.search from 0xFE20 to 0xFE20 PASSED!
+Unicode String.search for 3 chars from 0xFE20 to 0xFE20 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0xFE20 to 0xFE2F String.search(undefined) PASSED!
+0xFE20 to 0xFE2F String.search() PASSED!
+Negative String.match PASSED!
+0xFE20 to 0xFE2F String.match(undefined) PASSED!
+0xFE20 to 0xFE2F String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xFE200xFE2F) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFE20_CombiningHalfMarks/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFE20_CombiningHalfMarks/test.swf
new file mode 100644
index 000000000..67dc0c13a
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFE20_CombiningHalfMarks/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFE20_CombiningHalfMarks/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFE20_CombiningHalfMarks/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFE20_CombiningHalfMarks/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFE30_CJKCompatibilityForms/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFE30_CJKCompatibilityForms/Test.as
new file mode 100644
index 000000000..4c2495d50
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFE30_CJKCompatibilityForms/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "CJK Compatibility Forms";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // CJK Compatibility Forms
+ testUnicodeRange(0xFE30, 0xFE4F);
+ negativeTestUnicodeRange(0xFE30, 0xFE4F);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFE30_CJKCompatibilityForms/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFE30_CJKCompatibilityForms/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFE30_CJKCompatibilityForms/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFE30_CJKCompatibilityForms/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFE30_CJKCompatibilityForms/output.txt
new file mode 100644
index 000000000..6bfcbfbf5
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFE30_CJKCompatibilityForms/output.txt
@@ -0,0 +1,21 @@
+Unicode String.search from 0xFE30 to 0xFE30 PASSED!
+Unicode String.search for 3 chars from 0xFE30 to 0xFE30 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0xFE30 to 0xFE4F String.search(undefined) PASSED!
+0xFE30 to 0xFE4F String.search() PASSED!
+Negative String.match PASSED!
+0xFE30 to 0xFE4F String.match(undefined) PASSED!
+0xFE30 to 0xFE4F String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xFE300xFE4F) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFE30_CJKCompatibilityForms/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFE30_CJKCompatibilityForms/test.swf
new file mode 100644
index 000000000..68bf36a80
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFE30_CJKCompatibilityForms/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFE30_CJKCompatibilityForms/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFE30_CJKCompatibilityForms/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFE30_CJKCompatibilityForms/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFE50_SmallFormVariants/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFE50_SmallFormVariants/Test.as
new file mode 100644
index 000000000..5f2c55ca6
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFE50_SmallFormVariants/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "Small Form Variants";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // Small Form Variants
+ testUnicodeRange(0xFE50, 0xFE6F);
+ negativeTestUnicodeRange(0xFE50, 0xFE6F);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFE50_SmallFormVariants/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFE50_SmallFormVariants/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFE50_SmallFormVariants/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFE50_SmallFormVariants/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFE50_SmallFormVariants/output.txt
new file mode 100644
index 000000000..81c57e9ff
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFE50_SmallFormVariants/output.txt
@@ -0,0 +1,21 @@
+Unicode String.search from 0xFE50 to 0xFE50 PASSED!
+Unicode String.search for 3 chars from 0xFE50 to 0xFE50 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0xFE50 to 0xFE6F String.search(undefined) PASSED!
+0xFE50 to 0xFE6F String.search() PASSED!
+Negative String.match PASSED!
+0xFE50 to 0xFE6F String.match(undefined) PASSED!
+0xFE50 to 0xFE6F String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xFE500xFE6F) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFE50_SmallFormVariants/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFE50_SmallFormVariants/test.swf
new file mode 100644
index 000000000..73a93d5b9
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFE50_SmallFormVariants/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFE50_SmallFormVariants/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFE50_SmallFormVariants/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFE50_SmallFormVariants/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFE70_ArabicPresentationForms_B/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFE70_ArabicPresentationForms_B/Test.as
new file mode 100644
index 000000000..d76cffd65
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFE70_ArabicPresentationForms_B/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "Arabic Presentation Forms-B";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // Arabic Presentation Forms-B
+ testUnicodeRange(0xFE70, 0xFEFF);
+ negativeTestUnicodeRange(0xFE70, 0xFEFF);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFE70_ArabicPresentationForms_B/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFE70_ArabicPresentationForms_B/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFE70_ArabicPresentationForms_B/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFE70_ArabicPresentationForms_B/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFE70_ArabicPresentationForms_B/output.txt
new file mode 100644
index 000000000..66f37ad92
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFE70_ArabicPresentationForms_B/output.txt
@@ -0,0 +1,21 @@
+Unicode String.search from 0xFE70 to 0xFE70 PASSED!
+Unicode String.search for 3 chars from 0xFE70 to 0xFE70 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0xFE70 to 0xFEFF String.search(undefined) PASSED!
+0xFE70 to 0xFEFF String.search() PASSED!
+Negative String.match PASSED!
+0xFE70 to 0xFEFF String.match(undefined) PASSED!
+0xFE70 to 0xFEFF String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xFE700xFEFF) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFE70_ArabicPresentationForms_B/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFE70_ArabicPresentationForms_B/test.swf
new file mode 100644
index 000000000..e0633caca
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFE70_ArabicPresentationForms_B/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFE70_ArabicPresentationForms_B/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFE70_ArabicPresentationForms_B/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFE70_ArabicPresentationForms_B/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFF00_HalfwidthandFullwidthForms/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFF00_HalfwidthandFullwidthForms/Test.as
new file mode 100644
index 000000000..6f3797f5f
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFF00_HalfwidthandFullwidthForms/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "Halfwidth and Fullwidth Forms";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // Halfwidth and Fullwidth Forms
+ testUnicodeRange(0xFF00, 0xFFEF);
+ negativeTestUnicodeRange(0xFF00, 0xFFEF);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFF00_HalfwidthandFullwidthForms/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFF00_HalfwidthandFullwidthForms/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFF00_HalfwidthandFullwidthForms/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFF00_HalfwidthandFullwidthForms/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFF00_HalfwidthandFullwidthForms/output.txt
new file mode 100644
index 000000000..3a14ef38d
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFF00_HalfwidthandFullwidthForms/output.txt
@@ -0,0 +1,21 @@
+Unicode String.search from 0xFF00 to 0xFF00 PASSED!
+Unicode String.search for 3 chars from 0xFF00 to 0xFF00 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0xFF00 to 0xFFEF String.search(undefined) PASSED!
+0xFF00 to 0xFFEF String.search() PASSED!
+Negative String.match PASSED!
+0xFF00 to 0xFFEF String.match(undefined) PASSED!
+0xFF00 to 0xFFEF String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xFF000xFFEF) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFF00_HalfwidthandFullwidthForms/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFF00_HalfwidthandFullwidthForms/test.swf
new file mode 100644
index 000000000..90940d495
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFF00_HalfwidthandFullwidthForms/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFF00_HalfwidthandFullwidthForms/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFF00_HalfwidthandFullwidthForms/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFF00_HalfwidthandFullwidthForms/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFFF0_Specials/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFFF0_Specials/Test.as
new file mode 100644
index 000000000..852ec9f66
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFFF0_Specials/Test.as
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+include "../include/unicodeUtil.as";
+include "../include/unicodeNegativeUtil.as";
+
+// var SECTION = "Specials";
+// var VERSION = "ECMA_3";
+// var TITLE = "Test String functions (search, match, split, replace) on all unicode characters";
+
+
+var array = new Array();
+var item = 0;
+getTestCases();
+
+var testcases = array;
+
+function getTestCases():void {
+ // Specials
+ testUnicodeRange(0xFFF0, 0xFFFF);
+ negativeTestUnicodeRange(0xFFF0, 0xFFFF);
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFFF0_Specials/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFFF0_Specials/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFFF0_Specials/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFFF0_Specials/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFFF0_Specials/output.txt
new file mode 100644
index 000000000..8ea8fbe49
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFFF0_Specials/output.txt
@@ -0,0 +1,21 @@
+Unicode String.search from 0xFFF0 to 0xFFF0 PASSED!
+Unicode String.search for 3 chars from 0xFFF0 to 0xFFF0 PASSED!
+Unicode String.match PASSED!
+Unicode String.split PASSED!
+Unicode String.replace PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Unicode Split on Mark PASSED!
+Negative String.search PASSED!
+0xFFF0 to 0xFFFF String.search(undefined) PASSED!
+0xFFF0 to 0xFFFF String.search() PASSED!
+Negative String.match PASSED!
+0xFFF0 to 0xFFFF String.match(undefined) PASSED!
+0xFFF0 to 0xFFFF String.match() PASSED!
+String.split('') PASSED!
+String.split(new RegExp()) PASSED!
+String.split(new RegExp('')) PASSED!
+String.split(undefined) result length PASSED!
+String.split(undefined)[0] PASSED!
+String.replace(0xFFF00xFFFF) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFFF0_Specials/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFFF0_Specials/test.swf
new file mode 100644
index 000000000..7677f3b0d
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFFF0_Specials/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFFF0_Specials/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFFF0_Specials/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uFFF0_Specials/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uc_001/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uc_001/Test.as
new file mode 100644
index 000000000..292f07955
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uc_001/Test.as
@@ -0,0 +1,41 @@
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
+ *
+ * ***** BEGIN LICENSE BLOCK *****
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+import com.adobe.test.Assert;
+
+// var SECTION = "";
+// var VERSION = "ECMA_1";
+// var TITLE = "Unicode Characters 1C-1F negative test";
+
+
+ var testcases = getTestCases();
+
+
+function getTestCases() {
+ var array = new Array();
+ var item = 0;
+
+ // Unicode Characters 1C-1F negative test
+
+ array[item++] = Assert.expectEq( "Number(00)", false,
+ ("no error" == ('no' + "\u001C" +' error')));
+
+ array[item++] = Assert.expectEq( "Number(01)", false,
+ ("no error" == ('no' + "\u001D" +' error')));
+
+ array[item++] = Assert.expectEq( "Number(02)", false,
+ ("no error" == ('no' + "\u001E" +' error')));
+
+ array[item++] = Assert.expectEq( "Number(03)", false,
+ ("no error" == ('no' + "\u001F" +' error')));
+
+
+ return ( array );
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uc_001/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uc_001/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uc_001/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uc_001/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uc_001/output.txt
new file mode 100644
index 000000000..4ffc658b3
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uc_001/output.txt
@@ -0,0 +1,4 @@
+Number(00) PASSED!
+Number(01) PASSED!
+Number(02) PASSED!
+Number(03) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uc_001/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uc_001/test.swf
new file mode 100644
index 000000000..f7ecbd4bb
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uc_001/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uc_001/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uc_001/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uc_001/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uc_003/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uc_003/Test.as
new file mode 100644
index 000000000..91851ea26
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uc_003/Test.as
@@ -0,0 +1,51 @@
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
+ *
+ * ***** BEGIN LICENSE BLOCK *****
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+import com.adobe.test.Assert;
+// var SECTION = "uc_003";
+// var VERSION = "";
+// var TITLE = "Escapes in identifiers test.";
+
+// TO-DO: commenting the function reference in shell.as
+ //printBugNumber (23608);
+ //printBugNumber (23607);
+
+
+
+ var testcases = getTestCases();
+
+function getTestCases()
+{
+ var array = new Array();
+ var item = 0;
+
+ var \u0041 = 5;
+ var A\u03B2 = 15;
+ var c\u0061se = 25;
+
+
+/*
+ array[item++] = Assert.expectEq( "Escaped ASCII Identifier test.", 5, ("\u0041"));
+ array[item++] = Assert.expectEq( "Escaped ASCII Identifier test", 6, ("++\u0041"));
+ array[item++] = Assert.expectEq( "Escaped non-ASCII Identifier test", 15, ("A\u03B2"));
+ array[item++] = Assert.expectEq( "Escaped non-ASCII Identifier test", 16, ("++A\u03B2"));
+ array[item++] = Assert.expectEq( "Escaped keyword Identifier test", 25, ("c\\u00" + "61se"));
+ array[item++] = Assert.expectEq( "Escaped keyword Identifier test", 26, ("++c\\u00" + "61se"));
+ */
+
+ array[item++] = Assert.expectEq( "Escaped ASCII Identifier test.", 5, (\u0041));
+ array[item++] = Assert.expectEq( "Escaped ASCII Identifier test", 6, (++\u0041));
+ array[item++] = Assert.expectEq( "Escaped non-ASCII Identifier test", 15, (A\u03B2));
+ array[item++] = Assert.expectEq( "Escaped non-ASCII Identifier test", 16, (++A\u03B2));
+ array[item++] = Assert.expectEq( "Escaped keyword Identifier test", 25, (c\u0061se));
+ array[item++] = Assert.expectEq( "Escaped keyword Identifier test", 26, (++c\u0061se));
+
+ return array;
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uc_003/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uc_003/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uc_003/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uc_003/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uc_003/output.txt
new file mode 100644
index 000000000..239420517
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uc_003/output.txt
@@ -0,0 +1,6 @@
+Escaped ASCII Identifier test. PASSED!
+Escaped ASCII Identifier test PASSED!
+Escaped non-ASCII Identifier test PASSED!
+Escaped non-ASCII Identifier test PASSED!
+Escaped keyword Identifier test PASSED!
+Escaped keyword Identifier test PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uc_003/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uc_003/test.swf
new file mode 100644
index 000000000..171198b00
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uc_003/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uc_003/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uc_003/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uc_003/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uc_004/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uc_004/Test.as
new file mode 100644
index 000000000..d06bade7d
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uc_004/Test.as
@@ -0,0 +1,39 @@
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
+ *
+ * ***** BEGIN LICENSE BLOCK *****
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+import com.adobe.test.Assert;
+// var SECTION = "uc_004";
+// var VERSION = "";
+// var TITLE = "Unicode Characters 1C-1F with regexps test.";
+
+// TO-DO: commenting the function reference in shell.as
+ //printBugNumber (23612);
+
+
+// var bug = '(none)';
+
+
+ var testcases = getTestCases();
+
+function getTestCases()
+{
+ var array = new Array();
+ var item = 0;
+ var ary = ["\u001Cfoo", "\u001Dfoo", "\u001Efoo", "\u001Ffoo"];
+
+ for (var i in ary)
+ {
+ array[item++] = Assert.expectEq( "Unicode characters 1C-1F in regexps, ary[" +
+ i + "] did not match \\S test (it should not.)", 0, ary[Number(i)].search(/^\Sfoo$/));
+ array[item++] = Assert.expectEq( "Unicode characters 1C-1F in regexps, ary[" +
+ i + "] matched \\s test (it should not.)", -1, ary[Number(i)].search(/^\sfoo$/));
+ }
+ return array;
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uc_004/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uc_004/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uc_004/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uc_004/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uc_004/output.txt
new file mode 100644
index 000000000..5412efa76
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uc_004/output.txt
@@ -0,0 +1,8 @@
+Unicode characters 1C-1F in regexps, ary[0] did not match \S test (it should not.) PASSED!
+Unicode characters 1C-1F in regexps, ary[0] matched \s test (it should not.) PASSED!
+Unicode characters 1C-1F in regexps, ary[1] did not match \S test (it should not.) PASSED!
+Unicode characters 1C-1F in regexps, ary[1] matched \s test (it should not.) PASSED!
+Unicode characters 1C-1F in regexps, ary[2] did not match \S test (it should not.) PASSED!
+Unicode characters 1C-1F in regexps, ary[2] matched \s test (it should not.) PASSED!
+Unicode characters 1C-1F in regexps, ary[3] did not match \S test (it should not.) PASSED!
+Unicode characters 1C-1F in regexps, ary[3] matched \s test (it should not.) PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uc_004/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uc_004/test.swf
new file mode 100644
index 000000000..50b680d7a
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uc_004/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uc_004/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uc_004/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uc_004/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uc_005/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uc_005/Test.as
new file mode 100644
index 000000000..357457ef4
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uc_005/Test.as
@@ -0,0 +1,281 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+import com.adobe.test.Assert;
+/*
+*
+* Date: 15 July 2002
+* SUMMARY: Testing identifiers with double-byte names
+* See http://bugzilla.mozilla.org/show_bug.cgi?id=58274
+*
+* Here is a sample of the problem:
+*
+* js> function f\u02B1 () {}
+*
+* js> f\u02B1.toSource();
+* function f¦() {}
+*
+* js> f\u02B1.toSource().toSource();
+* (new String("function f\xB1() {}"))
+*
+*
+* See how the high-byte information (the 02) has been lost?
+* The same thing was happening with the toString() method:
+*
+* js> f\u02B1.toString();
+*
+* function f¦() {
+* }
+*
+* js> f\u02B1.toString().toSource();
+* (new String("\nfunction f\xB1() {\n}\n"))
+*
+*
+*
+* Modified 2/14/2005 By Sushant Dutta (sdutta@macromedia.com)
+* Passing the string sEval to the getIdentifiers function. Removed calls
+* to the eval function.
+*
+*/
+//-----------------------------------------------------------------------------
+
+// var SECTION = "";
+// var VERSION = "";
+
+
+// var TITLE = "Testing identifiers with double-byte names";
+// var bug = 58274;
+
+import com.adobe.test.Assert;
+ var testcases = getTestCases();
+
+function getTestCases() {
+
+ var array = new Array();
+ var item = 0;
+ var UBound = 0;
+
+ var summary = '';
+ var status = '';
+ var statusitems = [];
+ var actual = '';
+ var actualvalues = [];
+ var expect= '';
+ var expectedvalues = [];
+
+
+ /*
+ * Define a function that uses double-byte identifiers in
+ * "every possible way"
+ *
+ * Then recover each double-byte identifier via f.toString().
+ * To make this easier, put a 'Z' token before every one.
+ *
+ * Our eval string will be:
+ *
+ * sEval = "function Z\u02b1(Z\u02b2, b) {
+ * try { Z\u02b3 : var Z\u02b4 = Z\u02b1; }
+ * catch (Z\u02b5) { for (var Z\u02b6 in Z\u02b5)
+ * {for (1; 1<0; Z\u02b7++) {new Array()[Z\u02b6] = 1;} };} }";
+ *
+ * It will be helpful to build this string in stages:
+ */
+ var s0 = 'function Z';
+ var s1 = '\u02b1(Z';
+ var s2 = '\u02b2, b) {try { Z';
+ var s3 = '\u02b3 : var Z';
+ var s4 = '\u02b4 = Z';
+ var s5 = '\u02b1; } catch (Z'
+ var s6 = '\u02b5) { for (var Z';
+ var s7 = '\u02b6 in Z';
+ var s8 = '\u02b5){for (1; 1<0; Z';
+ var s9 = '\u02b7++) {new Array()[Z';
+ var s10 = '\u02b6] = 1;} };} }';
+
+
+ /*
+ * Concatenate these and eval() to create the function Z\u02b1
+ */
+ var sEval = s0 + s1 + s2 + s3 + s4 + s5 + s6 + s7 + s8 + s9 + s10;
+
+
+ /*
+ * Recover all the double-byte identifiers via Z\u02b1.toString().
+ * We'll recover the 1st one as arrID[1], the 2nd one as arrID[2],
+ * and so on ...
+ */
+ var arrID = getIdentifiers(sEval);
+
+
+ /*
+ * Now check that we got back what we put in -
+ */
+
+ status = "unicode string 1";
+ actual = arrID[1];
+ expect = s1.charAt(0);
+ //addThis();
+ array[item++] = Assert.expectEq( status, expect, actual);
+
+ status = "unicode string 2";
+ actual = arrID[2];
+ expect = s2.charAt(0);
+ //addThis();
+ array[item++] = Assert.expectEq( status, expect, actual);
+
+ status = "unicode string 3"
+ actual = arrID[3];
+ expect = s3.charAt(0);
+ //addThis();
+ array[item++] = Assert.expectEq( status, expect, actual);
+
+ status = "unicode string 4";
+ actual = arrID[4];
+ expect = s4.charAt(0);
+ //addThis();
+ array[item++] = Assert.expectEq( status, expect, actual);
+
+ status = "unicode string 5";
+ actual = arrID[5];
+ expect = s5.charAt(0);
+ //addThis();
+ array[item++] = Assert.expectEq( status, expect, actual);
+
+ status = "unicode string 6";
+ actual = arrID[6];
+ expect = s6.charAt(0);
+ //addThis();
+ array[item++] = Assert.expectEq( status, expect, actual);
+
+ status = "unicode string 7";
+ actual = arrID[7];
+ expect = s7.charAt(0);
+ //addThis();
+ array[item++] = Assert.expectEq( status, expect, actual);
+
+ status = "unicode string 8";
+ actual = arrID[8];
+ expect = s8.charAt(0);
+ //addThis();
+ array[item++] = Assert.expectEq( status, expect, actual);
+
+ status = "unicode string 9";
+ actual = arrID[9];
+ expect = s9.charAt(0);
+ //addThis();
+ array[item++] = Assert.expectEq( status, expect, actual);
+
+ status = "unicode string 10";
+ actual = arrID[10];
+ expect = s10.charAt(0);
+ //addThis();
+ array[item++] = Assert.expectEq( status, expect, actual);
+
+ return array;
+}
+
+
+/*
+ * Goal: recover the double-byte identifiers from f.toString()
+ * by getting the very next character after each 'Z' token.
+ *
+ * The return value will be an array |arr| indexed such that
+ * |arr[1]| is the 1st identifier, |arr[2]| the 2nd, and so on.
+ *
+ * Note, however, f.toString() is implementation-independent.
+ * For example, it may begin with '\nfunction' instead of 'function'.
+ *
+ * Rhino uses a Unicode representation for f.toString(); whereas
+ * SpiderMonkey uses an ASCII representation, putting escape sequences
+ * for non-ASCII characters. For example, if a function is called f\u02B1,
+ * then in Rhino the toString() method will present a 2-character Unicode
+ * string for its name, whereas SpiderMonkey will present a 7-character
+ * ASCII string for its name: the string literal 'f\u02B1'.
+ *
+ * So we force the lexer to condense the string before we use it.
+ * This will give uniform results in Rhino and SpiderMonkey.
+ */
+function getIdentifiers(f)
+{
+ var str = condenseStr(f.toString());
+
+ //print("Before calling split()");
+ //print(str);
+
+ var arr = str.split('Z');
+
+ //print("After calling split()");
+ //print(arr);
+
+ /*
+ * The identifiers are the 1st char of each split substring
+ * EXCEPT the first one, which is just ('\n' +) 'function '.
+ *
+ * Thus note the 1st identifier will be stored in |arr[1]|,
+ * the 2nd one in |arr[2]|, etc., making the indexing easy -
+ */
+ for (i in arr) {
+ arr[i] = arr[i].charAt(0);
+ }
+ return arr;
+}
+
+
+/*
+ * This function is the opposite of a functions like escape(), which take
+ * Unicode characters and return escape sequences for them. Here, we force
+ * the lexer to turn escape sequences back into single characters.
+ *
+ * Note we can't simply do |eval(str)|, since in practice |str| will be an
+ * identifier somewhere in the program (e.g. a function name); thus |eval(str)|
+ * would return the object that the identifier represents: not what we want.
+ *
+ * So we surround |str| lexicographically with quotes to force the lexer to
+ * evaluate it as a string. Have to strip out any linefeeds first, however -
+ */
+function condenseStr(str)
+{
+ /*
+ * You won't be able to do the next step if |str| has
+ * any carriage returns or linefeeds in it. For example:
+ *
+ * js> eval("'" + '\nHello' + "'");
+ * 1: SyntaxError: unterminated string literal:
+ * 1: '
+ * 1: ^
+ *
+ * So replace them with the empty string -
+ */
+ str = str.replace(/[\r\n]/g, '')
+ return ("'" + str + "'")
+}
+
+/*
+function addThis()
+{
+ statusitems[UBound] = status;
+ actualvalues[UBound] = actual;
+ expectedvalues[UBound] = expect;
+ UBound++;
+}
+*/
+
+/*
+function test()
+{
+ enterFunc('test');
+ printBugNumber(bug);
+ printStatus(summary);
+
+ for (var i=0; i
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uc_005/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uc_005/output.txt
new file mode 100644
index 000000000..6243b1102
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uc_005/output.txt
@@ -0,0 +1,10 @@
+unicode string 1 PASSED!
+unicode string 2 PASSED!
+unicode string 3 PASSED!
+unicode string 4 PASSED!
+unicode string 5 PASSED!
+unicode string 6 PASSED!
+unicode string 7 PASSED!
+unicode string 8 PASSED!
+unicode string 9 PASSED!
+unicode string 10 PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uc_005/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uc_005/test.swf
new file mode 100644
index 000000000..2ebc7090f
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uc_005/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uc_005/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uc_005/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uc_005/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uc_006/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uc_006/Test.as
new file mode 100644
index 000000000..8f6e45269
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uc_006/Test.as
@@ -0,0 +1,251 @@
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
+ *
+ * ***** BEGIN LICENSE BLOCK *****
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+import com.adobe.test.Assert;
+
+// var SECTION = "";
+// var VERSION = "ECMA_1";
+// var TITLE = "bug no:118381 High ASCII characters in keywords";
+
+
+ var testcases = getTestCases();
+
+function getTestCases() {
+ var array = new Array();
+ var item = 0;
+
+ var throwÜ = 100;
+ array[item++] = Assert.expectEq( "var throwÜ = 100", 100,
+ (throwÜ));
+
+ var classÜ = "string"
+ array[item++] = Assert.expectEq( "var classÜ = 'string'", "string",
+ (classÜ));
+
+ var namespaceÜ = false;
+ array[item++] = Assert.expectEq( "var namespaceÜ = false", false,
+ (namespaceÜ));
+
+ var asÜ = 1;
+ array[item++] = Assert.expectEq( "var asÜ = 1", 1,
+ (asÜ));
+
+ var breakÜ =2;
+ array[item++] = Assert.expectEq( "var breakÜ =2", 2,
+ (breakÜ))
+
+ var caseÜ = 3;
+ array[item++] = Assert.expectEq( "var caseÜ = 3", 3,
+ (caseÜ))
+
+ var catchÜ = 4;
+ array[item++] = Assert.expectEq( "var catchÜ = 4", 4,
+ (catchÜ))
+
+ var constÜ = 4;
+ array[item++] = Assert.expectEq( "var constÜ = 4", 4,
+ (constÜ))
+
+ var continueÜ = 4;
+ array[item++] = Assert.expectEq( "var continueÜ = 4", 4,
+ (continueÜ))
+
+ var deleteÜ = 4;
+ array[item++] = Assert.expectEq( "var deleteÜ = 4", 4,
+ (deleteÜ));
+
+ var doÜ = 4;
+ array[item++] = Assert.expectEq( "var doÜ = 4", 4,
+ (doÜ));
+
+ var elseÜ = 4;
+ array[item++] = Assert.expectEq( "var elseÜ = 4", 4,
+ (elseÜ));
+
+ var extendsÜ = 4;
+ array[item++] = Assert.expectEq( "var extendsÜ = 4", 4,
+ (elseÜ));
+
+ var falseÜ = 4;
+ array[item++] = Assert.expectEq( "var falseÜ = 4", 4,
+ (falseÜ));
+
+ var finallyÜ = 4;
+ array[item++] = Assert.expectEq( "var finallyÜ = 4", 4,
+ (finallyÜ));
+
+ var forÜ = 4;
+ array[item++] = Assert.expectEq( "var forÜ = 4", 4,
+ (forÜ));
+
+ var functionÜ = 4;
+ array[item++] = Assert.expectEq( "var functionÜ = 4", 4,
+ (functionÜ));
+
+ var ifÜ = 4;
+ array[item++] = Assert.expectEq( "var ifÜ = 4", 4,
+ (ifÜ));
+
+ var implementsÜ = 4;
+ array[item++] = Assert.expectEq( "var implementsÜ = 4", 4,
+ (implementsÜ));
+
+ var importÜ = 4;
+ array[item++] = Assert.expectEq( "var importÜ = 4", 4,
+ (importÜ));
+
+ var inÜ = 4;
+ array[item++] = Assert.expectEq( "var inÜ = 4", 4,
+ (inÜ));
+
+ var instanceOfÜ = 4;
+ array[item++] = Assert.expectEq( "var instanceOfÜ = 4", 4,
+ (instanceOfÜ));
+
+ var interfaceÜ = 4;
+ array[item++] = Assert.expectEq( "var instanceOfÜ = 4", 4,
+ (instanceOfÜ));
+
+ var internalÜ = 4;
+ array[item++] = Assert.expectEq( "var internalÜ = 4", 4,
+ (internalÜ));
+
+ var isÜ = 4;
+ array[item++] = Assert.expectEq( "var isÜ = 4", 4,
+ (isÜ));
+
+ var nativeÜ = 4;
+ array[item++] = Assert.expectEq( "var nativeÜ = 4", 4,
+ (nativeÜ));
+
+ var newÜ = 4;
+ array[item++] = Assert.expectEq( "var newÜ = 4", 4,
+ (newÜ));
+
+ var nullÜ = 4;
+ array[item++] = Assert.expectEq( "var nullÜ = 4", 4,
+ (nullÜ));
+
+ var packageÜ = 4;
+ array[item++] = Assert.expectEq( "var packageÜ = 4", 4,
+ (packageÜ));
+
+ var privateÜ = 4;
+ array[item++] = Assert.expectEq( "var privateÜ = 4", 4,
+ (privateÜ));
+
+ var protectedÜ = 4;
+ array[item++] = Assert.expectEq( "var protectedÜ = 4", 4,
+ (protectedÜ));
+
+ var publicÜ = 4;
+ array[item++] = Assert.expectEq( "var publicÜ = 4", 4,
+ (publicÜ));
+
+ var returnÜ = 4;
+ array[item++] = Assert.expectEq( "var returnÜ = 4", 4,
+ (returnÜ));
+
+ var superÜ = 4;
+ array[item++] = Assert.expectEq( "var superÜ = 4", 4,
+ (superÜ));
+
+ var switchÜ = 4;
+ array[item++] = Assert.expectEq( "var switchÜ = 4", 4,
+ (switchÜ));
+
+ var thisÜ = 4;
+ array[item++] = Assert.expectEq( "var thisÜ = 4", 4,
+ (thisÜ));
+
+ var throwÜ = 4;
+ array[item++] = Assert.expectEq( "var throwÜ = 4", 4,
+ (throwÜ));
+
+ var toÜ = 4;
+ array[item++] = Assert.expectEq( "var toÜ = 4", 4,
+ (toÜ));
+
+ var trueÜ = 4;
+ array[item++] = Assert.expectEq( "var trueÜ = 4", 4,
+ (trueÜ));
+
+ var tryÜ = 4;
+ array[item++] = Assert.expectEq( "var tryÜ = 4", 4,
+ (tryÜ));
+
+ var typeofÜ = 4;
+ array[item++] = Assert.expectEq( "var typeofÜ = 4", 4,
+ (typeofÜ));
+
+ var useÜ = 4;
+ array[item++] = Assert.expectEq( "var useÜ = 4", 4,
+ (useÜ));
+
+ var varÜ = 4;
+ array[item++] = Assert.expectEq( "var varÜ = 4", 4,
+ (varÜ));
+
+ var voidÜ = 4;
+ array[item++] = Assert.expectEq( "var voidÜ = 4", 4,
+ (voidÜ));
+
+ var whileÜ = 4;
+ array[item++] = Assert.expectEq( "var whileÜ = 4", 4,
+ (whileÜ));
+
+ var tryÜ = 4;
+ array[item++] = Assert.expectEq( "var tryÜ = 4", 4,
+ (tryÜ));
+
+ var eachÜ = 4;
+ array[item++] = Assert.expectEq( "var eachÜ = 4", 4,
+ (eachÜ));
+
+ var getÜ = 4;
+ array[item++] = Assert.expectEq( "var getÜ = 4", 4,
+ (getÜ));
+
+ var setÜ = 4;
+ array[item++] = Assert.expectEq( "var setÜ = 4", 4,
+ (setÜ));
+
+ var namespaceÜ = 4;
+ array[item++] = Assert.expectEq( "var namespaceÜ = 4", 4,
+ (namespaceÜ));
+
+ var includeÜ = 4;
+ array[item++] = Assert.expectEq( "var includeÜ = 4", 4,
+ (includeÜ));
+
+ var dynamicÜ = 4;
+ array[item++] = Assert.expectEq( "var dynamicÜ = 4", 4,
+ (dynamicÜ));
+
+ var finalÜ = 4;
+ array[item++] = Assert.expectEq( "var finalÜ = 4", 4,
+ (finalÜ));
+
+ var nativeÜ = 4;
+ array[item++] = Assert.expectEq( "var nativeÜ = 4", 4,
+ (nativeÜ))
+
+ var overrideÜ = 4;
+ array[item++] = Assert.expectEq( "var overrideÜ = 4", 4,
+ (overrideÜ))
+
+ var staticÜ = 4;
+ array[item++] = Assert.expectEq( "var staticÜ = 4", 4,
+ (staticÜ))
+
+
+
+ return ( array );
+}
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uc_006/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uc_006/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uc_006/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uc_006/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uc_006/output.txt
new file mode 100644
index 000000000..a12e95374
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uc_006/output.txt
@@ -0,0 +1,56 @@
+var throwÜ = 100 PASSED!
+var classÜ = 'string' PASSED!
+var namespaceÜ = false PASSED!
+var asÜ = 1 PASSED!
+var breakÜ =2 PASSED!
+var caseÜ = 3 PASSED!
+var catchÜ = 4 PASSED!
+var constÜ = 4 PASSED!
+var continueÜ = 4 PASSED!
+var deleteÜ = 4 PASSED!
+var doÜ = 4 PASSED!
+var elseÜ = 4 PASSED!
+var extendsÜ = 4 PASSED!
+var falseÜ = 4 PASSED!
+var finallyÜ = 4 PASSED!
+var forÜ = 4 PASSED!
+var functionÜ = 4 PASSED!
+var ifÜ = 4 PASSED!
+var implementsÜ = 4 PASSED!
+var importÜ = 4 PASSED!
+var inÜ = 4 PASSED!
+var instanceOfÜ = 4 PASSED!
+var instanceOfÜ = 4 PASSED!
+var internalÜ = 4 PASSED!
+var isÜ = 4 PASSED!
+var nativeÜ = 4 PASSED!
+var newÜ = 4 PASSED!
+var nullÜ = 4 PASSED!
+var packageÜ = 4 PASSED!
+var privateÜ = 4 PASSED!
+var protectedÜ = 4 PASSED!
+var publicÜ = 4 PASSED!
+var returnÜ = 4 PASSED!
+var superÜ = 4 PASSED!
+var switchÜ = 4 PASSED!
+var thisÜ = 4 PASSED!
+var throwÜ = 4 PASSED!
+var toÜ = 4 PASSED!
+var trueÜ = 4 PASSED!
+var tryÜ = 4 PASSED!
+var typeofÜ = 4 PASSED!
+var useÜ = 4 PASSED!
+var varÜ = 4 PASSED!
+var voidÜ = 4 PASSED!
+var whileÜ = 4 PASSED!
+var tryÜ = 4 PASSED!
+var eachÜ = 4 PASSED!
+var getÜ = 4 PASSED!
+var setÜ = 4 PASSED!
+var namespaceÜ = 4 PASSED!
+var includeÜ = 4 PASSED!
+var dynamicÜ = 4 PASSED!
+var finalÜ = 4 PASSED!
+var nativeÜ = 4 PASSED!
+var overrideÜ = 4 PASSED!
+var staticÜ = 4 PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uc_006/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uc_006/test.swf
new file mode 100644
index 000000000..393af2123
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uc_006/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uc_006/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uc_006/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/uc_006/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/ucs4_bug_515947/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/ucs4_bug_515947/Test.as
new file mode 100644
index 000000000..0c00d33a3
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/ucs4_bug_515947/Test.as
@@ -0,0 +1,41 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+import com.adobe.test.Assert;
+
+/**
+ * This template is a modified version of the test case
+ * templates taken from mozilla.org. This template or
+ * any test cases written from it are not for external
+ * use or distribution.
+ *
+ * Author: Brent Baker
+ * Date: 10/06/2009
+ *
+ * Modifications: (Name :Date)
+
+ */
+
+// var SECTION = "Unicode"; // provide a document reference (ie, Actionscript section)
+// var VERSION = "ECMAScript"; // Version of ECMAScript or ActionScript
+// var TITLE = "UTF16 surrogate pairs not being translated correctly from UTF8";
+var BUGNUMBER = "515947";
+
+
+// add your tests here
+
+var s:String = "𠂊";
+Assert.expectEq( "s.length", 2, s.length );
+Assert.expectEq( "0xd840", "d840", s.charCodeAt(0).toString(16) );
+Assert.expectEq( "0xdc8a", "dc8a", s.charCodeAt(1).toString(16) );
+
+
+ // displays results.
+
+
+
+
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/ucs4_bug_515947/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/ucs4_bug_515947/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/ucs4_bug_515947/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/ucs4_bug_515947/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/ucs4_bug_515947/output.txt
new file mode 100644
index 000000000..ec3b7a761
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/ucs4_bug_515947/output.txt
@@ -0,0 +1,3 @@
+s.length PASSED!
+0xd840 PASSED!
+0xdc8a PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/ucs4_bug_515947/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/ucs4_bug_515947/test.swf
new file mode 100644
index 000000000..dd79a6704
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/ucs4_bug_515947/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/ucs4_bug_515947/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/ucs4_bug_515947/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/ucs4_bug_515947/test.toml
@@ -0,0 +1 @@
+num_ticks = 1
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/utf8count/Test.as b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/utf8count/Test.as
new file mode 100644
index 000000000..986a3aab5
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/utf8count/Test.as
@@ -0,0 +1,48 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package {
+import flash.display.MovieClip; public class Test extends MovieClip {}
+}
+
+import com.adobe.test.Assert;
+
+var str_utf16_codes = [0x31,
+ 0x32,
+ 0x33,
+ 0xd842,
+ 0xdf9f,
+ 0x54a4,
+ 0x41,
+ 0x42,
+ 0x43,
+ 0xd842,
+ 0xdfb7,
+ 0x91ce,
+ 0x5c4b,
+ 0x61,
+ 0x62,
+ 0x63,
+ 0x5357,
+ 0xd87e,
+ 0xdc84,
+ 0x99c5];
+
+var str_utf16:String = "";
+for each (var c in str_utf16_codes)
+ str_utf16 += String.fromCharCode(c);
+
+// note, it's critical that these be embedded as literal utf8 strings to trigger the proper code path
+// (constructing via String.fromCharCode won't do the trick)
+var str_utf8:String = "123𠮟咤ABC𠮷野屋abc南巽駅";
+var str_utf8_a:String = "123𠮟咤ABC";
+var str_utf8_b:String = "𠮷野屋abc南巽駅";
+
+var str_utf8_ab:String = str_utf8_a + str_utf8_b;
+
+
+Assert.expectEq("str_utf8 == str_utf16", true, str_utf8 == str_utf16);
+Assert.expectEq("str_utf8.length == str_utf16.length", true, str_utf8.length == str_utf16.length);
+Assert.expectEq("str_utf8_ab == str_utf8", true, str_utf8_ab == str_utf8);
+
+
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/utf8count/config.xml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/utf8count/config.xml
new file mode 100644
index 000000000..18d27f9ba
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/utf8count/config.xml
@@ -0,0 +1,13 @@
+
+
+
+ .
+ ../../../lib
+
+ false
+ false
+ false
+ false
+
+
+
\ No newline at end of file
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/utf8count/output.txt b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/utf8count/output.txt
new file mode 100644
index 000000000..fe956a9b1
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/utf8count/output.txt
@@ -0,0 +1,3 @@
+str_utf8 == str_utf16 PASSED!
+str_utf8.length == str_utf16.length PASSED!
+str_utf8_ab == str_utf8 PASSED!
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/utf8count/test.swf b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/utf8count/test.swf
new file mode 100644
index 000000000..810b72e55
Binary files /dev/null and b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/utf8count/test.swf differ
diff --git a/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/utf8count/test.toml b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/utf8count/test.toml
new file mode 100644
index 000000000..cf6123969
--- /dev/null
+++ b/tests/tests/swfs/avm2/from_avmplus/ecma3/Unicode/utf8count/test.toml
@@ -0,0 +1 @@
+num_ticks = 1