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 | |
parent | 42529ddfb500cc7df3601c3b5f1d1da9f787d08e (diff) | |
download | node-new-b15ab5de51e51d8f9dfaba8bcf4f62eee74ff721.tar.gz |
Upgrade V8 to 3.5.7
Diffstat (limited to 'deps/v8/test')
-rw-r--r-- | deps/v8/test/cctest/test-api.cc | 46 | ||||
-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 | ||||
-rw-r--r-- | deps/v8/test/mozilla/mozilla.status | 5 | ||||
-rw-r--r-- | deps/v8/test/sputnik/sputnik.status | 16 |
7 files changed, 221 insertions, 121 deletions
diff --git a/deps/v8/test/cctest/test-api.cc b/deps/v8/test/cctest/test-api.cc index d5e17b89a7..3ed6b523f0 100644 --- a/deps/v8/test/cctest/test-api.cc +++ b/deps/v8/test/cctest/test-api.cc @@ -3617,6 +3617,52 @@ THREADED_TEST(IndexedInterceptorUnboxedDoubleWithIndexedAccessor) { } +Handle<v8::Array> NonStrictArgsIndexedPropertyEnumerator( + const AccessorInfo& info) { + // Force the list of returned keys to be stored in a Arguments object. + Local<Script> indexed_property_names_script = Script::Compile(v8_str( + "function f(w,x) {" + " return arguments;" + "}" + "keys = f(0, 1, 2, 3);" + "keys;")); + Local<Value> result = indexed_property_names_script->Run(); + return Local<v8::Array>(static_cast<v8::Array*>(::v8::Object::Cast(*result))); +} + + +static v8::Handle<Value> NonStrictIndexedPropertyGetter( + uint32_t index, + const AccessorInfo& info) { + ApiTestFuzzer::Fuzz(); + if (index < 4) { + return v8::Handle<Value>(v8_num(index)); + } + return v8::Handle<Value>(); +} + + +// Make sure that the the interceptor code in the runtime properly handles +// merging property name lists for non-string arguments arrays. +THREADED_TEST(IndexedInterceptorNonStrictArgsWithIndexedAccessor) { + v8::HandleScope scope; + Local<ObjectTemplate> templ = ObjectTemplate::New(); + templ->SetIndexedPropertyHandler(NonStrictIndexedPropertyGetter, + 0, + 0, + 0, + NonStrictArgsIndexedPropertyEnumerator); + LocalContext context; + context->Global()->Set(v8_str("obj"), templ->NewInstance()); + Local<Script> create_args_script = + Script::Compile(v8_str( + "var key_count = 0;" + "for (x in obj) {key_count++;} key_count;")); + Local<Value> result = create_args_script->Run(); + CHECK_EQ(v8_num(4), result); +} + + static v8::Handle<Value> IdentityIndexedPropertyGetter( uint32_t index, const AccessorInfo& info) { 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"); diff --git a/deps/v8/test/mozilla/mozilla.status b/deps/v8/test/mozilla/mozilla.status index c62d7705ad..f6d69257c6 100644 --- a/deps/v8/test/mozilla/mozilla.status +++ b/deps/v8/test/mozilla/mozilla.status @@ -246,9 +246,8 @@ ecma_3/Number/15.7.4.7-1: FAIL_OK ecma_3/Number/15.7.4.6-1: FAIL_OK #:=== RegExp:=== -# To be compatible with JSC we silently ignore flags that do not make -# sense. These tests expects us to throw exceptions. -ecma_3/RegExp/regress-57631: FAIL_OK +# We don't match the syntax error message of Mozilla for invalid +# RegExp flags. ecma_3/RegExp/15.10.4.1-6: FAIL_OK # PCRE doesn't allow subpattern nesting deeper than 200, this tests diff --git a/deps/v8/test/sputnik/sputnik.status b/deps/v8/test/sputnik/sputnik.status index 82d8a61c7a..868509d7c5 100644 --- a/deps/v8/test/sputnik/sputnik.status +++ b/deps/v8/test/sputnik/sputnik.status @@ -56,15 +56,6 @@ S15.10.6.3_A1_T16: FAIL_OK # errors, for compatibility. S15.10.2.11_A1_T2: FAIL S15.10.2.11_A1_T3: FAIL -S15.10.4.1_A5_T1: FAIL -S15.10.4.1_A5_T2: FAIL -S15.10.4.1_A5_T3: FAIL -S15.10.4.1_A5_T4: FAIL -S15.10.4.1_A5_T5: FAIL -S15.10.4.1_A5_T6: FAIL -S15.10.4.1_A5_T7: FAIL -S15.10.4.1_A5_T8: FAIL -S15.10.4.1_A5_T9: FAIL # We are more lenient in which string character escapes we allow than # the spec (7.8.4 p. 19) wants us to be. This is for compatibility. @@ -99,6 +90,13 @@ S7.8.4_A7.4_T1: FAIL_OK S7.8.4_A4.3_T5: FAIL_OK S7.8.4_A7.2_T5: FAIL_OK +# Sputnik expects unicode escape sequences in RegExp flags to be interpreted. +# The specification requires them to be passed uninterpreted to the RegExp +# constructor. We now implement that. +S7.8.5_A3.1_T7: FAIL_OK +S7.8.5_A3.1_T8: FAIL_OK +S7.8.5_A3.1_T9: FAIL_OK + # We allow some keywords to be used as identifiers. S7.5.3_A1.15: FAIL_OK S7.5.3_A1.18: FAIL_OK |