diff options
author | Ryan Dahl <ry@tinyclouds.org> | 2011-08-23 15:17:13 -0700 |
---|---|---|
committer | Ryan Dahl <ry@tinyclouds.org> | 2011-08-23 15:17:57 -0700 |
commit | b15ab5de51e51d8f9dfaba8bcf4f62eee74ff721 (patch) | |
tree | 547337c3abc3395f274d5d5fe75d6f9cc42a9d02 /deps/v8/test/mjsunit/regress | |
parent | 42529ddfb500cc7df3601c3b5f1d1da9f787d08e (diff) | |
download | node-new-b15ab5de51e51d8f9dfaba8bcf4f62eee74ff721.tar.gz |
Upgrade V8 to 3.5.7
Diffstat (limited to 'deps/v8/test/mjsunit/regress')
-rw-r--r-- | deps/v8/test/mjsunit/regress/regress-1620.js | 54 | ||||
-rw-r--r-- | deps/v8/test/mjsunit/regress/regress-1625.js | 36 | ||||
-rw-r--r-- | deps/v8/test/mjsunit/regress/regress-219.js | 128 | ||||
-rw-r--r-- | deps/v8/test/mjsunit/regress/regress-87.js | 57 |
4 files changed, 166 insertions, 109 deletions
diff --git a/deps/v8/test/mjsunit/regress/regress-1620.js b/deps/v8/test/mjsunit/regress/regress-1620.js new file mode 100644 index 0000000000..6d72974566 --- /dev/null +++ b/deps/v8/test/mjsunit/regress/regress-1620.js @@ -0,0 +1,54 @@ +// Copyright 2011 the V8 project authors. All rights reserved. +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following +// disclaimer in the documentation and/or other materials provided +// with the distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived +// from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Don't allow malformed unicode escape sequences in identifiers. +// In strings and regexps we currently allow malformed unicode escape +// sequences without throwing a SyntaxError. Instead "\u22gk" would +// treat the "\u" as an identity escape, and evaluate to "u22gk". +// Due to code sharing, we did the same in identifiers. This should +// no longer be the case. +// See: http://code.google.com/p/v8/issues/detail?id=1620 + +assertThrows("var \\u\\u\\u = 42;"); +assertThrows("var \\u41 = 42;"); +assertThrows("var \\u123 = 42;"); +eval("var \\u1234 = 42;"); +assertEquals(42, eval("\u1234")); +assertThrows("var uuu = 42; var x = \\u\\u\\u"); + +// Regressions introduced and fixed again while fixing the above. + +// Handle 0xFFFD correctly (it's a valid value, and shouldn't be used +// to mark an error). +assertEquals(0xFFFD, "\uFFFD".charCodeAt(0)); + +// Handle unicode escapes in regexp flags correctly. +assertThrows("/x/g\\uim", SyntaxError); +assertThrows("/x/g\\u2im", SyntaxError); +assertThrows("/x/g\\u22im", SyntaxError); +assertThrows("/x/g\\u222im", SyntaxError); +assertThrows("/x/g\\\\u2222im", SyntaxError); diff --git a/deps/v8/test/mjsunit/regress/regress-1625.js b/deps/v8/test/mjsunit/regress/regress-1625.js new file mode 100644 index 0000000000..a2ef8df652 --- /dev/null +++ b/deps/v8/test/mjsunit/regress/regress-1625.js @@ -0,0 +1,36 @@ +// Copyright 2011 the V8 project authors. All rights reserved. +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following +// disclaimer in the documentation and/or other materials provided +// with the distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived +// from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Test that overwriting Array.prototype.push does not make +// Object.defineProperties misbehave. + +Array.prototype.push = 1; +var desc = {foo: {value: 10}, bar: {get: function() {return 42; }}}; +var obj = {}; +var x = Object.defineProperties(obj, desc); +assertEquals(x.foo, 10); +assertEquals(x.bar, 42); diff --git a/deps/v8/test/mjsunit/regress/regress-219.js b/deps/v8/test/mjsunit/regress/regress-219.js index 4bfabdcf43..b751f0f60f 100644 --- a/deps/v8/test/mjsunit/regress/regress-219.js +++ b/deps/v8/test/mjsunit/regress/regress-219.js @@ -30,6 +30,10 @@ // We should now allow duplicates of flags. // (See http://code.google.com/p/v8/issues/detail?id=219) +// This has been reversed by issue 1628, since other browsers have also +// tightened their syntax. +// (See http://code.google.com/p/v8/issues/detail?id=1628) + // Base tests: we recognize the basic flags function assertFlags(re, global, multiline, ignoreCase) { @@ -53,124 +57,92 @@ assertFlags(re, true, true, true) // Double i's -re = /a/ii; -assertFlags(re, false, false, true) - -re = /a/gii; -assertFlags(re, true, false, true) +assertThrows("/a/ii"); -re = /a/igi; -assertFlags(re, true, false, true) +assertThrows("/a/gii"); -re = /a/iig; -assertFlags(re, true, false, true) +assertThrows("/a/igi"); -re = /a/gimi; -assertFlags(re, true, true, true) +assertThrows("/a/iig"); -re = /a/giim; -assertFlags(re, true, true, true) +assertThrows("/a/gimi"); -re = /a/igim; -assertFlags(re, true, true, true) +assertThrows("/a/giim"); +assertThrows("/a/igim"); -re = RegExp("a", "ii"); -assertFlags(re, false, false, true) +assertThrows(function(){ return RegExp("a", "ii"); }) -re = RegExp("a", "gii"); -assertFlags(re, true, false, true) +assertThrows(function(){ return RegExp("a", "gii"); }) -re = RegExp("a", "igi"); -assertFlags(re, true, false, true) +assertThrows(function(){ return RegExp("a", "igi"); }) -re = RegExp("a", "iig"); -assertFlags(re, true, false, true) +assertThrows(function(){ return RegExp("a", "iig"); }) -re = RegExp("a", "gimi"); -assertFlags(re, true, true, true) +assertThrows(function(){ return RegExp("a", "gimi"); }) -re = RegExp("a", "giim"); -assertFlags(re, true, true, true) +assertThrows(function(){ return RegExp("a", "giim"); }) -re = RegExp("a", "igim"); -assertFlags(re, true, true, true) +assertThrows(function(){ return RegExp("a", "igim"); }) // Tripple i's -re = /a/iii; -assertFlags(re, false, false, true) +assertThrows("/a/iii"); -re = /a/giii; -assertFlags(re, true, false, true) +assertThrows("/a/giii"); -re = /a/igii; -assertFlags(re, true, false, true) +assertThrows("/a/igii"); -re = /a/iigi; -assertFlags(re, true, false, true) +assertThrows("/a/iigi"); -re = /a/iiig; -assertFlags(re, true, false, true) - -re = /a/miiig; -assertFlags(re, true, true, true) +assertThrows("/a/iiig"); +assertThrows("/a/miiig"); -re = RegExp("a", "iii"); -assertFlags(re, false, false, true) +assertThrows(function(){ return RegExp("a", "iii"); }) -re = RegExp("a", "giii"); -assertFlags(re, true, false, true) +assertThrows(function(){ return RegExp("a", "giii"); }) -re = RegExp("a", "igii"); -assertFlags(re, true, false, true) +assertThrows(function(){ return RegExp("a", "igii"); }) -re = RegExp("a", "iigi"); -assertFlags(re, true, false, true) +assertThrows(function(){ return RegExp("a", "iigi"); }) -re = RegExp("a", "iiig"); -assertFlags(re, true, false, true) +assertThrows(function(){ return RegExp("a", "iiig"); }) -re = RegExp("a", "miiig"); -assertFlags(re, true, true, true) +assertThrows(function(){ return RegExp("a", "miiig"); }) -// Illegal flags - flags late in string. +// Illegal flags - valid flags late in string. -re = /a/arglebargleglopglyf; -assertFlags(re, true, false, false) +assertThrows("/a/arglebargleglopglyf"); -re = /a/arglebargleglopglif; -assertFlags(re, true, false, true) +assertThrows("/a/arglebargleglopglif"); -re = /a/arglebargleglopglym; -assertFlags(re, true, true, false) +assertThrows("/a/arglebargleglopglym"); -re = /a/arglebargleglopglim; -assertFlags(re, true, true, true) +assertThrows("/a/arglebargleglopglim"); // Case of flags still matters. -re = /a/gmi; +var re = /a/gmi; assertFlags(re, true, true, true) -re = /a/Gmi; -assertFlags(re, false, true, true) +assertThrows("/a/Gmi"); -re = /a/gMi; -assertFlags(re, true, false, true) +assertThrows("/a/gMi"); -re = /a/gmI; -assertFlags(re, true, true, false) +assertThrows("/a/gmI"); -re = /a/GMi; -assertFlags(re, false, false, true) +assertThrows("/a/GMi"); -re = /a/GmI; -assertFlags(re, false, true, false) +assertThrows("/a/GmI"); -re = /a/gMI; -assertFlags(re, true, false, false) +assertThrows("/a/gMI"); -re = /a/GMI; -assertFlags(re, false, false, false) +assertThrows("/a/GMI"); + +// Unicode escape sequences are not interpreted. + +assertThrows("/a/\\u0067"); +assertThrows("/a/\\u0069"); +assertThrows("/a/\\u006d"); +assertThrows("/a/\\u006D"); diff --git a/deps/v8/test/mjsunit/regress/regress-87.js b/deps/v8/test/mjsunit/regress/regress-87.js index 131cb58edc..10446fdf45 100644 --- a/deps/v8/test/mjsunit/regress/regress-87.js +++ b/deps/v8/test/mjsunit/regress/regress-87.js @@ -25,34 +25,29 @@ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -function testFlags(flagstring, global, ignoreCase, multiline) { - var text = "/x/"+flagstring; - var re = eval(text); - assertEquals(global, re.global, text + ".global"); - assertEquals(ignoreCase, re.ignoreCase, text + ".ignoreCase"); - assertEquals(multiline, re.multiline, text + ".multiline"); -} - -testFlags("", false, false, false); - -testFlags("\u0067", true, false, false); - -testFlags("\u0069", false, true, false) - -testFlags("\u006d", false, false, true); - -testFlags("\u0068", false, false, false); - -testFlags("\u0020", false, false, false); - - -testFlags("\u0067g", true, false, false); - -testFlags("g\u0067", true, false, false); - -testFlags("abc\u0067efg", true, false, false); - -testFlags("i\u0067", true, true, false); - -testFlags("\u0067i", true, true, false); - +// In Issue 87, we allowed unicode escape sequences in RegExp flags. +// However, according to ES5, they should not be interpreted, but passed +// verbatim to the RegExp constructor. +// (On top of that, the original test was bugged and never tested anything). +// The behavior was changed in r8969 to not interpret escapes, but this +// test didn't test that, and only failed when making invalid flag characters +// an error too. + +assertThrows("/x/\\u0067"); +assertThrows("/x/\\u0069"); +assertThrows("/x/\\u006d"); + +assertThrows("/x/\\u0067i"); +assertThrows("/x/\\u0069m"); +assertThrows("/x/\\u006dg"); + +assertThrows("/x/m\\u0067"); +assertThrows("/x/g\\u0069"); +assertThrows("/x/i\\u006d"); + +assertThrows("/x/m\\u0067i"); +assertThrows("/x/g\\u0069m"); +assertThrows("/x/i\\u006dg"); + +assertThrows("/x/\\u0068"); +assertThrows("/x/\\u0020"); |