diff options
Diffstat (limited to 'js/src/tests/js1_5/String')
-rw-r--r-- | js/src/tests/js1_5/String/browser.js | 0 | ||||
-rw-r--r-- | js/src/tests/js1_5/String/regress-107771.js | 91 | ||||
-rw-r--r-- | js/src/tests/js1_5/String/regress-112626.js | 18 | ||||
-rw-r--r-- | js/src/tests/js1_5/String/regress-179068.js | 125 | ||||
-rw-r--r-- | js/src/tests/js1_5/String/replace-flags.js | 25 | ||||
-rw-r--r-- | js/src/tests/js1_5/String/shell.js | 0 |
6 files changed, 259 insertions, 0 deletions
diff --git a/js/src/tests/js1_5/String/browser.js b/js/src/tests/js1_5/String/browser.js new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/js/src/tests/js1_5/String/browser.js diff --git a/js/src/tests/js1_5/String/regress-107771.js b/js/src/tests/js1_5/String/regress-107771.js new file mode 100644 index 000000000..b335abb03 --- /dev/null +++ b/js/src/tests/js1_5/String/regress-107771.js @@ -0,0 +1,91 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* 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/. */ + +/* + * Date: 31 October 2001 + * + * SUMMARY: Regression test for bug 107771 + * See http://bugzilla.mozilla.org/show_bug.cgi?id=107771 + * + * The bug: Section 1 passed, but Sections 2-5 all failed with |actual| == 12 + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 107771; +var summary = "Regression test for bug 107771"; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; +var str = ''; +var k = -9999; + + +status = inSection(1); +str = "AAA//BBB/CCC/"; +k = str.lastIndexOf('/'); +actual = k; +expect = 12; + +status = inSection(2); +str = str.substring(0, k); +k = str.lastIndexOf('/'); +actual = k; +expect = 8; +addThis(); + +status = inSection(3); +str = str.substring(0, k); +k = str.lastIndexOf('/'); +actual = k; +expect = 4; +addThis(); + +status = inSection(4); +str = str.substring(0, k); +k = str.lastIndexOf('/'); +actual = k; +expect = 3; +addThis(); + +status = inSection(5); +str = str.substring(0, k); +k = str.lastIndexOf('/'); +actual = k; +expect = -1; +addThis(); + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/String/regress-112626.js b/js/src/tests/js1_5/String/regress-112626.js new file mode 100644 index 000000000..74df1c956 --- /dev/null +++ b/js/src/tests/js1_5/String/regress-112626.js @@ -0,0 +1,18 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* 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/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 112626; +var summary = 'Do not crash String.split(regexp) when regexp contains parens'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var _cs='2001-01-01'; +var curTime = _cs.split(/([- :])/); + +reportCompare(expect, actual, summary); diff --git a/js/src/tests/js1_5/String/regress-179068.js b/js/src/tests/js1_5/String/regress-179068.js new file mode 100644 index 000000000..35b9d3a32 --- /dev/null +++ b/js/src/tests/js1_5/String/regress-179068.js @@ -0,0 +1,125 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* 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/. */ + +/* + * + * Date: 09 November 2002 + * SUMMARY: Test that interpreter can handle string literals exceeding 64K + * See http://bugzilla.mozilla.org/show_bug.cgi?id=179068 + * + * Test that the interpreter can handle string literals exceeding 64K limit. + * For that the script passes to eval() "str ='LONG_STRING_LITERAL';" where + * LONG_STRING_LITERAL is a string with 200K chars. + * + * Igor Bukanov explains the technique used below: + * + * > Philip Schwartau wrote: + * >... + * > Here is the heart of the testcase: + * > + * > // Generate 200K long string + * > var long_str = duplicate(LONG_STR_SEED, N); + * > var str = ""; + * > eval("str='".concat(long_str, "';")); + * > var test_is_ok = (str.length == LONG_STR_SEED.length * N); + * > + * > + * > The testcase creates two identical strings, |long_str| and |str|. It + * > uses eval() simply to assign the value of |long_str| to |str|. Why is + * > it necessary to have the variable |str|, then? Why not just create + * > |long_str| and test it? Wouldn't this be enough: + * > + * > // Generate 200K long string + * > var long_str = duplicate(LONG_STR_SEED, N); + * > var test_is_ok = (long_str.length == LONG_STR_SEED.length * N); + * > + * > Or do we specifically need to test eval() to exercise the interpreter? + * + * The reason for eval is to test string literals like in 'a string literal + * with 100 000 characters...', Rhino deals fine with strings generated at + * run time where lengths > 64K. Without eval it would be necessary to have + * a test file excedding 64K which is not that polite for CVS and then a + * special treatment for the compiled mode in Rhino should be added. + * + * + * > + * > If so, is it important to use the concat() method in the assignment, as + * > you have done: |eval("str='".concat(long_str, "';"))|, or can we simply + * > do |eval("str = long_str;")| ? + * + * The concat is a replacement for eval("str='"+long_str+"';"), but as + * long_str is huge, this leads to constructing first a new string via + * "str='"+long_str and then another one via ("str='"+long_str) + "';" + * which takes time under JDK 1.1 on a something like StrongArm 200MHz. + * Calling concat makes less copies, that is why it is used in the + * duplicate function and this is faster then doing recursion like in the + * test case to test that 64K different string literals can be handled. + * + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 179068; +var summary = 'Test that interpreter can handle string literals exceeding 64K'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; +var LONG_STR_SEED = "0123456789"; +var N = 20 * 1024; +var str = ""; + + +// Generate 200K long string and assign it to |str| via eval() +var long_str = duplicate(LONG_STR_SEED, N); +eval("str='".concat(long_str, "';")); + +status = inSection(1); +actual = str.length == LONG_STR_SEED.length * N + expect = true; +addThis(); + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function duplicate(str, count) +{ + var tmp = new Array(count); + + while (count != 0) + tmp[--count] = str; + + return String.prototype.concat.apply("", tmp); +} + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/js/src/tests/js1_5/String/replace-flags.js b/js/src/tests/js1_5/String/replace-flags.js new file mode 100644 index 000000000..34b9475a3 --- /dev/null +++ b/js/src/tests/js1_5/String/replace-flags.js @@ -0,0 +1,25 @@ +var BUGNUMBER = 1108382; +var summary = 'Remove non-standard flag argument from String.prototype.{search,match,replace}.'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var result = "bbbAa".match("a", "i"); +assertEq(result.index, 4); +assertEq(result.length, 1); +assertEq(result[0], "a"); + +result = "bbbA".match("a", "i"); +assertEq(result, null); + +result = "bbbAa".search("a", "i"); +assertEq(result, 4); + +result = "bbbA".search("a", "i"); +assertEq(result, -1); + +result = "bbbAaa".replace("a", "b", "g"); +assertEq(result, "bbbAba"); + +if (typeof reportCompare === "function") + reportCompare(true, true); diff --git a/js/src/tests/js1_5/String/shell.js b/js/src/tests/js1_5/String/shell.js new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/js/src/tests/js1_5/String/shell.js |