diff options
Diffstat (limited to 'deps/v8/test')
-rw-r--r-- | deps/v8/test/cctest/test-lock.cc | 1 | ||||
-rw-r--r-- | deps/v8/test/cctest/test-regexp.cc | 13 | ||||
-rw-r--r-- | deps/v8/test/cctest/test-serialize.cc | 6 | ||||
-rw-r--r-- | deps/v8/test/mjsunit/debug-compile-event.js | 18 | ||||
-rw-r--r-- | deps/v8/test/mjsunit/mirror-script.js | 4 | ||||
-rw-r--r-- | deps/v8/test/mjsunit/mjsunit.status | 9 | ||||
-rw-r--r-- | deps/v8/test/mjsunit/object-literal-conversions.js | 46 | ||||
-rw-r--r-- | deps/v8/test/mjsunit/object-literal-overwrite.js | 118 | ||||
-rw-r--r-- | deps/v8/test/mjsunit/string-externalize.js | 6 | ||||
-rw-r--r-- | deps/v8/test/mjsunit/string-replace-with-empty.js | 64 |
10 files changed, 229 insertions, 56 deletions
diff --git a/deps/v8/test/cctest/test-lock.cc b/deps/v8/test/cctest/test-lock.cc index 5eecfcee16..9039e022ec 100644 --- a/deps/v8/test/cctest/test-lock.cc +++ b/deps/v8/test/cctest/test-lock.cc @@ -60,4 +60,5 @@ TEST(SemaphoreTimeout) { sem->Signal(); ok = sem->Wait(1000); CHECK(ok); + delete sem; } diff --git a/deps/v8/test/cctest/test-regexp.cc b/deps/v8/test/cctest/test-regexp.cc index 11a808e369..3e6709aef4 100644 --- a/deps/v8/test/cctest/test-regexp.cc +++ b/deps/v8/test/cctest/test-regexp.cc @@ -64,7 +64,7 @@ static bool CheckParse(const char* input) { ZoneScope zone_scope(DELETE_ON_EXIT); FlatStringReader reader(CStrVector(input)); RegExpCompileData result; - return v8::internal::Parser::ParseRegExp(&reader, false, &result); + return v8::internal::RegExpParser::ParseRegExp(&reader, false, &result); } @@ -74,7 +74,7 @@ static SmartPointer<const char> Parse(const char* input) { ZoneScope zone_scope(DELETE_ON_EXIT); FlatStringReader reader(CStrVector(input)); RegExpCompileData result; - CHECK(v8::internal::Parser::ParseRegExp(&reader, false, &result)); + CHECK(v8::internal::RegExpParser::ParseRegExp(&reader, false, &result)); CHECK(result.tree != NULL); CHECK(result.error.is_null()); SmartPointer<const char> output = result.tree->ToString(); @@ -88,7 +88,7 @@ static bool CheckSimple(const char* input) { ZoneScope zone_scope(DELETE_ON_EXIT); FlatStringReader reader(CStrVector(input)); RegExpCompileData result; - CHECK(v8::internal::Parser::ParseRegExp(&reader, false, &result)); + CHECK(v8::internal::RegExpParser::ParseRegExp(&reader, false, &result)); CHECK(result.tree != NULL); CHECK(result.error.is_null()); return result.simple; @@ -106,7 +106,7 @@ static MinMaxPair CheckMinMaxMatch(const char* input) { ZoneScope zone_scope(DELETE_ON_EXIT); FlatStringReader reader(CStrVector(input)); RegExpCompileData result; - CHECK(v8::internal::Parser::ParseRegExp(&reader, false, &result)); + CHECK(v8::internal::RegExpParser::ParseRegExp(&reader, false, &result)); CHECK(result.tree != NULL); CHECK(result.error.is_null()); int min_match = result.tree->min_match(); @@ -365,7 +365,7 @@ static void ExpectError(const char* input, ZoneScope zone_scope(DELETE_ON_EXIT); FlatStringReader reader(CStrVector(input)); RegExpCompileData result; - CHECK_EQ(false, v8::internal::Parser::ParseRegExp(&reader, false, &result)); + CHECK(!v8::internal::RegExpParser::ParseRegExp(&reader, false, &result)); CHECK(result.tree == NULL); CHECK(!result.error.is_null()); SmartPointer<char> str = result.error->ToCString(ALLOW_NULLS); @@ -473,7 +473,8 @@ static RegExpNode* Compile(const char* input, bool multiline, bool is_ascii) { V8::Initialize(NULL); FlatStringReader reader(CStrVector(input)); RegExpCompileData compile_data; - if (!v8::internal::Parser::ParseRegExp(&reader, multiline, &compile_data)) + if (!v8::internal::RegExpParser::ParseRegExp(&reader, multiline, + &compile_data)) return NULL; Handle<String> pattern = Factory::NewStringFromUtf8(CStrVector(input)); RegExpEngine::Compile(&compile_data, false, multiline, pattern, is_ascii); diff --git a/deps/v8/test/cctest/test-serialize.cc b/deps/v8/test/cctest/test-serialize.cc index 6a513e5fa5..1cbaf2bf66 100644 --- a/deps/v8/test/cctest/test-serialize.cc +++ b/deps/v8/test/cctest/test-serialize.cc @@ -216,6 +216,7 @@ void FileByteSink::WriteSpaceUsed( Vector<char> name = Vector<char>::New(file_name_length + 1); OS::SNPrintF(name, "%s.size", file_name_); FILE* fp = OS::FOpen(name.start(), "w"); + name.Dispose(); fprintf(fp, "new %d\n", new_space_used); fprintf(fp, "pointer %d\n", pointer_space_used); fprintf(fp, "data %d\n", data_space_used); @@ -381,6 +382,7 @@ TEST(PartialSerialization) { env.Dispose(); FileByteSink startup_sink(startup_name.start()); + startup_name.Dispose(); StartupSerializer startup_serializer(&startup_sink); startup_serializer.SerializeStrongReferences(); @@ -403,6 +405,7 @@ static void ReserveSpaceForPartialSnapshot(const char* file_name) { Vector<char> name = Vector<char>::New(file_name_length + 1); OS::SNPrintF(name, "%s.size", file_name); FILE* fp = OS::FOpen(name.start(), "r"); + name.Dispose(); int new_size, pointer_size, data_size, code_size, map_size, cell_size; int large_size; #ifdef _MSC_VER @@ -438,6 +441,7 @@ DEPENDENT_TEST(PartialDeserialization, PartialSerialization) { OS::SNPrintF(startup_name, "%s.startup", FLAG_testing_serialization_file); CHECK(Snapshot::Initialize(startup_name.start())); + startup_name.Dispose(); const char* file_name = FLAG_testing_serialization_file; ReserveSpaceForPartialSnapshot(file_name); @@ -495,6 +499,7 @@ TEST(ContextSerialization) { env.Dispose(); FileByteSink startup_sink(startup_name.start()); + startup_name.Dispose(); StartupSerializer startup_serializer(&startup_sink); startup_serializer.SerializeStrongReferences(); @@ -519,6 +524,7 @@ DEPENDENT_TEST(ContextDeserialization, ContextSerialization) { OS::SNPrintF(startup_name, "%s.startup", FLAG_testing_serialization_file); CHECK(Snapshot::Initialize(startup_name.start())); + startup_name.Dispose(); const char* file_name = FLAG_testing_serialization_file; ReserveSpaceForPartialSnapshot(file_name); diff --git a/deps/v8/test/mjsunit/debug-compile-event.js b/deps/v8/test/mjsunit/debug-compile-event.js index e7ecf47ec9..b00a907a3c 100644 --- a/deps/v8/test/mjsunit/debug-compile-event.js +++ b/deps/v8/test/mjsunit/debug-compile-event.js @@ -36,7 +36,6 @@ var current_source = ''; // Current source being compiled. var source_count = 0; // Total number of scources compiled. var host_compilations = 0; // Number of scources compiled through the API. var eval_compilations = 0; // Number of scources compiled through eval. -var json_compilations = 0; // Number of scources compiled through JSON.parse. function compileSource(source) { @@ -62,9 +61,6 @@ function listener(event, exec_state, event_data, data) { case Debug.ScriptCompilationType.Eval: eval_compilations++; break; - case Debug.ScriptCompilationType.JSON: - json_compilations++; - break; } } @@ -74,13 +70,6 @@ function listener(event, exec_state, event_data, data) { // For source with 'eval' there will be compile events with substrings // as well as with with the exact source. assertTrue(current_source.indexOf(event_data.script().source()) >= 0); - } else if (current_source.indexOf('JSON.parse') == 0) { - // For JSON the JSON source will be in parentheses. - var s = event_data.script().source(); - if (s[0] == '(') { - s = s.substring(1, s.length - 2); - } - assertTrue(current_source.indexOf(s) >= 0); } else { // For source without 'eval' there will be a compile events with the // exact source. @@ -113,7 +102,7 @@ source_count++; // Using eval causes additional compilation event. compileSource('eval("eval(\'(function(){return a;})\')")'); source_count += 2; // Using eval causes additional compilation event. compileSource('JSON.parse(\'{"a":1,"b":2}\')'); -source_count++; // Using JSON.parse causes additional compilation event. +// Using JSON.parse does not causes additional compilation events. compileSource('x=1; //@ sourceURL=myscript.js'); // Make sure that the debug event listener was invoked. @@ -123,10 +112,9 @@ assertFalse(exception, "exception in listener") assertEquals(before_compile_count, after_compile_count); // Check the actual number of events (no compilation through the API as all -// source compiled through eval except for one JSON.parse call). +// source compiled through eval). assertEquals(source_count, after_compile_count); assertEquals(0, host_compilations); -assertEquals(source_count - 1, eval_compilations); -assertEquals(1, json_compilations); +assertEquals(source_count, eval_compilations); Debug.setListener(null); diff --git a/deps/v8/test/mjsunit/mirror-script.js b/deps/v8/test/mjsunit/mirror-script.js index 8631028e4e..71561701a2 100644 --- a/deps/v8/test/mjsunit/mirror-script.js +++ b/deps/v8/test/mjsunit/mirror-script.js @@ -83,12 +83,10 @@ function testScriptMirror(f, file_name, file_lines, type, compilation_type, // Test the script mirror for different functions. -testScriptMirror(function(){}, 'mirror-script.js', 100, 2, 0); +testScriptMirror(function(){}, 'mirror-script.js', 98, 2, 0); testScriptMirror(Math.sin, 'native math.js', -1, 0, 0); testScriptMirror(eval('(function(){})'), null, 1, 2, 1, '(function(){})', 87); testScriptMirror(eval('(function(){\n })'), null, 2, 2, 1, '(function(){\n })', 88); -testScriptMirror(%CompileString('{"a":1,"b":2}', true), null, 1, 2, 2, '{"a":1,"b":2}'); -testScriptMirror(%CompileString('{"a":1,\n "b":2}', true), null, 2, 2, 2, '{"a":1,\n "b":2}'); // Test taking slices of source. var mirror = debug.MakeMirror(eval('(function(){\n 1;\n})')).script(); diff --git a/deps/v8/test/mjsunit/mjsunit.status b/deps/v8/test/mjsunit/mjsunit.status index 3c8cbdbfe9..820dca7cd5 100644 --- a/deps/v8/test/mjsunit/mjsunit.status +++ b/deps/v8/test/mjsunit/mjsunit.status @@ -45,6 +45,10 @@ unicode-case-overoptimization: PASS, TIMEOUT if ($arch == arm) # Skip long running test in debug and allow it to timeout in release mode. regress/regress-524: (PASS || TIMEOUT), SKIP if $mode == debug +# Stack manipulations in LiveEdit are buggy - see bug 915 +debug-liveedit-check-stack: SKIP +debug-liveedit-patch-positions-replace: SKIP + [ $arch == arm ] # Slow tests which times out in debug mode. @@ -61,14 +65,9 @@ array-splice: PASS || TIMEOUT # Skip long running test in debug mode on ARM. string-indexof-2: PASS, SKIP if $mode == debug -# Stack manipulations in LiveEdit is implemented for ia32 only. -debug-liveedit-check-stack: SKIP [ $arch == mips ] -# Stack manipulations in LiveEdit is implemented for ia32 only. -debug-liveedit-check-stack: SKIP - # Skip all tests on MIPS. *: SKIP diff --git a/deps/v8/test/mjsunit/object-literal-conversions.js b/deps/v8/test/mjsunit/object-literal-conversions.js new file mode 100644 index 0000000000..8540d93082 --- /dev/null +++ b/deps/v8/test/mjsunit/object-literal-conversions.js @@ -0,0 +1,46 @@ +// Copyright 2010 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 the various conversions between property names are correctly +// used when overwriting initializers. + +var test1 = { 13: 6, "13": 7 }; +var test2 = { 13: 7, "13.0": 6 }; +var test3 = { "13": 6, 13.0000000000000000: 7 }; +var test4 = { 13.213000: 6, "13.213": 7 }; + +assertEquals(7, test1[13]); +assertEquals(7, test2[13]); +assertEquals(7, test3[13]); +assertEquals(7, test4[13.213]); + +var test5 = { 13: function() {}, "13": 7 }; +var test6 = { 17.31: function() {}, "17.31": 7 }; + +assertEquals(7, test5[13]); +assertEquals(7, test6[17.31]); +
\ No newline at end of file diff --git a/deps/v8/test/mjsunit/object-literal-overwrite.js b/deps/v8/test/mjsunit/object-literal-overwrite.js new file mode 100644 index 0000000000..5c58a2ddb6 --- /dev/null +++ b/deps/v8/test/mjsunit/object-literal-overwrite.js @@ -0,0 +1,118 @@ +// Copyright 2010 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. + +// Check that constants and computed properties are overwriting each other +// correctly, i.e., the last initializer for any name is stored in the object. + + +// Tests for the full code generator (if active). + +var foo1 = { + bar: 6, + bar: 7 +}; + +var foo2 = { + bar: function(a){}, + bar: 7 +}; + +var foo3 = { + bar: function(a){}, + bar: function(b){}, + bar: 7 +}; + +var foo4 = { + bar: function(b){}, + bar: 7, + bar: function(){return 7}, +}; + +var foo5 = { + 13: function(a){}, + 13: 7 +} + +var foo6 = { + 14.31: function(a){}, + 14.31: 7 +} + +var foo7 = { + 15: 6, + 15: 7 +} + +assertEquals(7, foo1.bar); +assertEquals(7, foo2.bar); +assertEquals(7, foo3.bar); +assertEquals(7, foo4.bar()); +assertEquals(7, foo5[13]); +assertEquals(7, foo6[14.31]); +assertEquals(7, foo7[15]); + +// Test for the classic code generator. + +function fun(x) { + var inner = { j: function(x) { return x; }, j: 7 }; + return inner.j; +} + +assertEquals(7, fun(7) ); + +// Check that the initializers of computed properties are executed, even if +// no store instructions are generated for the literals. + +var glob1 = 0; + +var bar1 = { x: glob1++, x: glob1++, x: glob1++, x: 7}; + +assertEquals(3, glob1); + + +var glob2 = 0; + +function fun2() { + var r = { y: glob2++, y: glob2++, y: glob2++, y: 7}; + return r.y; +} + +var y = fun2(); +assertEquals(7, y); +assertEquals(3, glob2); + +var glob3 = 0; + +function fun3() { + var r = { 113: glob3++, 113: glob3++, 113: glob3++, 113: 7}; + return r[113]; +} + +var y = fun3(); +assertEquals(7, y); +assertEquals(3, glob3);
\ No newline at end of file diff --git a/deps/v8/test/mjsunit/string-externalize.js b/deps/v8/test/mjsunit/string-externalize.js index 5b1f91709e..da897869c5 100644 --- a/deps/v8/test/mjsunit/string-externalize.js +++ b/deps/v8/test/mjsunit/string-externalize.js @@ -25,7 +25,7 @@ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// Flags: --expose-externalize-string +// Flags: --expose-externalize-string --expose-gc var size = 1024; @@ -93,3 +93,7 @@ function test() { for (var i = 0; i < 10; i++) { test(); } + +// Clean up string to make Valgrind happy. +gc(); +gc(); diff --git a/deps/v8/test/mjsunit/string-replace-with-empty.js b/deps/v8/test/mjsunit/string-replace-with-empty.js index 0e1e70a1f6..aa97f27ac2 100644 --- a/deps/v8/test/mjsunit/string-replace-with-empty.js +++ b/deps/v8/test/mjsunit/string-replace-with-empty.js @@ -25,33 +25,45 @@ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// Flags: --expose-externalize-string +// Flags: --expose-externalize-string --expose-gc -assertEquals("0123", "aa0bb1cc2dd3".replace(/[a-z]/g, "")); -assertEquals("0123", "\u1234a0bb1cc2dd3".replace(/[\u1234a-z]/g, "")); +function test() { + assertEquals("0123", "aa0bb1cc2dd3".replace(/[a-z]/g, "")); + assertEquals("0123", "\u1234a0bb1cc2dd3".replace(/[\u1234a-z]/g, "")); -var expected = "0123"; -var cons = "a0b1c2d3"; -for (var i = 0; i < 5; i++) { - expected += expected; - cons += cons; -} -assertEquals(expected, cons.replace(/[a-z]/g, "")); -cons = "\u12340b1c2d3"; -for (var i = 0; i < 5; i++) { - cons += cons; -} -assertEquals(expected, cons.replace(/[\u1234a-z]/g, "")); + var expected = "0123"; + var cons = "a0b1c2d3"; + for (var i = 0; i < 5; i++) { + expected += expected; + cons += cons; + } + assertEquals(expected, cons.replace(/[a-z]/g, "")); + cons = "\u12340b1c2d3"; + for (var i = 0; i < 5; i++) { + cons += cons; + } + assertEquals(expected, cons.replace(/[\u1234a-z]/g, "")); -cons = "a0b1c2d3"; -for (var i = 0; i < 5; i++) { - cons += cons; -} -externalizeString(cons, true/* force two-byte */); -assertEquals(expected, cons.replace(/[a-z]/g, "")); -cons = "\u12340b1c2d3"; -for (var i = 0; i < 5; i++) { - cons += cons; + cons = "a0b1c2d3"; + for (var i = 0; i < 5; i++) { + cons += cons; + } + externalizeString(cons, true/* force two-byte */); + assertEquals(expected, cons.replace(/[a-z]/g, "")); + cons = "\u12340b1c2d3"; + for (var i = 0; i < 5; i++) { + cons += cons; + } + externalizeString(cons); + assertEquals(expected, cons.replace(/[\u1234a-z]/g, "")); } -externalizeString(cons); -assertEquals(expected, cons.replace(/[\u1234a-z]/g, "")); + +test(); + +// Clear the regexp cache to allow the GC to work. +"foo".replace(/foo/g, ""); + +// GC in order to free up things on the C side so we don't get +// a memory leak. This makes valgrind happy. +gc(); +gc(); |