diff options
Diffstat (limited to 'deps/v8/test')
-rw-r--r-- | deps/v8/test/cctest/test-api.cc | 97 | ||||
-rw-r--r-- | deps/v8/test/mjsunit/debug-evaluate-locals-optimized-double.js | 10 | ||||
-rw-r--r-- | deps/v8/test/mjsunit/debug-evaluate-locals-optimized.js | 12 | ||||
-rw-r--r-- | deps/v8/test/mjsunit/harmony/collections.js | 34 |
4 files changed, 143 insertions, 10 deletions
diff --git a/deps/v8/test/cctest/test-api.cc b/deps/v8/test/cctest/test-api.cc index dab8b7c28..fb8becda3 100644 --- a/deps/v8/test/cctest/test-api.cc +++ b/deps/v8/test/cctest/test-api.cc @@ -14238,7 +14238,7 @@ THREADED_TEST(RoundRobinGetFromCache) { " for (var i = 0; i < 16; i++) values[i] = %_GetFromCache(0, keys[i]);" " for (var i = 0; i < 16; i++) {" " var v = %_GetFromCache(0, keys[i]);" - " if (v !== values[i])" + " if (v.toString() !== values[i].toString())" " return 'Wrong value for ' + " " keys[i] + ': ' + v + ' vs. ' + values[i];" " };" @@ -15726,3 +15726,98 @@ THREADED_TEST(ForeignFunctionReceiver) { foreign_context.Dispose(); } + + +uint8_t callback_fired = 0; + + +void CallCompletedCallback1() { + i::OS::Print("Firing callback 1.\n"); + callback_fired ^= 1; // Toggle first bit. +} + + +void CallCompletedCallback2() { + i::OS::Print("Firing callback 2.\n"); + callback_fired ^= 2; // Toggle second bit. +} + + +Handle<Value> RecursiveCall(const Arguments& args) { + int32_t level = args[0]->Int32Value(); + if (level < 3) { + level++; + i::OS::Print("Entering recursion level %d.\n", level); + char script[64]; + i::Vector<char> script_vector(script, sizeof(script)); + i::OS::SNPrintF(script_vector, "recursion(%d)", level); + CompileRun(script_vector.start()); + i::OS::Print("Leaving recursion level %d.\n", level); + CHECK_EQ(0, callback_fired); + } else { + i::OS::Print("Recursion ends.\n"); + CHECK_EQ(0, callback_fired); + } + return Undefined(); +} + + +TEST(CallCompletedCallback) { + v8::HandleScope scope; + LocalContext env; + v8::Handle<v8::FunctionTemplate> recursive_runtime = + v8::FunctionTemplate::New(RecursiveCall); + env->Global()->Set(v8_str("recursion"), + recursive_runtime->GetFunction()); + // Adding the same callback a second time has no effect. + v8::V8::AddCallCompletedCallback(CallCompletedCallback1); + v8::V8::AddCallCompletedCallback(CallCompletedCallback1); + v8::V8::AddCallCompletedCallback(CallCompletedCallback2); + i::OS::Print("--- Script (1) ---\n"); + Local<Script> script = + v8::Script::Compile(v8::String::New("recursion(0)")); + script->Run(); + CHECK_EQ(3, callback_fired); + + i::OS::Print("\n--- Script (2) ---\n"); + callback_fired = 0; + v8::V8::RemoveCallCompletedCallback(CallCompletedCallback1); + script->Run(); + CHECK_EQ(2, callback_fired); + + i::OS::Print("\n--- Function ---\n"); + callback_fired = 0; + Local<Function> recursive_function = + Local<Function>::Cast(env->Global()->Get(v8_str("recursion"))); + v8::Handle<Value> args[] = { v8_num(0) }; + recursive_function->Call(env->Global(), 1, args); + CHECK_EQ(2, callback_fired); +} + + +void CallCompletedCallbackNoException() { + v8::HandleScope scope; + CompileRun("1+1;"); +} + + +void CallCompletedCallbackException() { + v8::HandleScope scope; + CompileRun("throw 'second exception';"); +} + + +TEST(CallCompletedCallbackOneException) { + v8::HandleScope scope; + LocalContext env; + v8::V8::AddCallCompletedCallback(CallCompletedCallbackNoException); + CompileRun("throw 'exception';"); +} + + +TEST(CallCompletedCallbackTwoExceptions) { + v8::HandleScope scope; + LocalContext env; + v8::V8::AddCallCompletedCallback(CallCompletedCallbackException); + CompileRun("throw 'first exception';"); +} diff --git a/deps/v8/test/mjsunit/debug-evaluate-locals-optimized-double.js b/deps/v8/test/mjsunit/debug-evaluate-locals-optimized-double.js index 9ed1dbbed..8447df536 100644 --- a/deps/v8/test/mjsunit/debug-evaluate-locals-optimized-double.js +++ b/deps/v8/test/mjsunit/debug-evaluate-locals-optimized-double.js @@ -50,10 +50,12 @@ function listener(event, exec_state, event_data, data) { var expected_y = (i + 1) * 2 + 2 + ((i + 1) * 2 + 2) / 100; // All frames except the bottom one has normal variables a and b. - assertEquals('a', frame.localName(0)); - assertEquals('b', frame.localName(1)); - assertEquals(expected_a, frame.localValue(0).value()); - assertEquals(expected_b, frame.localValue(1).value()); + var a = ('a' === frame.localName(0)) ? 0 : 1; + var b = 1 - a; + assertEquals('a', frame.localName(a)); + assertEquals('b', frame.localName(b)); + assertEquals(expected_a, frame.localValue(a).value()); + assertEquals(expected_b, frame.localValue(b).value()); // All frames except the bottom one has arguments variables x and y. assertEquals('x', frame.argumentName(0)); diff --git a/deps/v8/test/mjsunit/debug-evaluate-locals-optimized.js b/deps/v8/test/mjsunit/debug-evaluate-locals-optimized.js index 683c139d8..c3cd5eb2e 100644 --- a/deps/v8/test/mjsunit/debug-evaluate-locals-optimized.js +++ b/deps/v8/test/mjsunit/debug-evaluate-locals-optimized.js @@ -50,10 +50,12 @@ function listener(event, exec_state, event_data, data) { var expected_y = (i + 1) * 2 + 2; // All frames except the bottom one has normal variables a and b. - assertEquals('a', frame.localName(0)); - assertEquals('b', frame.localName(1)); - assertEquals(expected_a, frame.localValue(0).value()); - assertEquals(expected_b, frame.localValue(1).value()); + var a = ('a' === frame.localName(0)) ? 0 : 1; + var b = 1 - a; + assertEquals('a', frame.localName(a)); + assertEquals('b', frame.localName(b)); + assertEquals(expected_a, frame.localValue(a).value()); + assertEquals(expected_b, frame.localValue(b).value()); // All frames except the bottom one has arguments variables x and y. assertEquals('x', frame.argumentName(0)); @@ -119,7 +121,7 @@ function listener(event, exec_state, event_data, data) { listenerComplete = true; } } catch (e) { - exception = e + exception = e.stack; }; }; diff --git a/deps/v8/test/mjsunit/harmony/collections.js b/deps/v8/test/mjsunit/harmony/collections.js index 4b435c161..412e6f14c 100644 --- a/deps/v8/test/mjsunit/harmony/collections.js +++ b/deps/v8/test/mjsunit/harmony/collections.js @@ -274,6 +274,40 @@ var o = Object.create({}, { myValue: { assertEquals(10, o.myValue); +// Regression test for issue 1884: Invoking any of the methods for Harmony +// maps, sets, or weak maps, with a wrong type of receiver should be throwing +// a proper TypeError. +var alwaysBogus = [ undefined, null, true, "x", 23, {} ]; +var bogusReceiversTestSet = [ + { proto: Set.prototype, + funcs: [ 'add', 'has', 'delete' ], + receivers: alwaysBogus.concat([ new Map, new WeakMap ]), + }, + { proto: Map.prototype, + funcs: [ 'get', 'set', 'has', 'delete' ], + receivers: alwaysBogus.concat([ new Set, new WeakMap ]), + }, + { proto: WeakMap.prototype, + funcs: [ 'get', 'set', 'has', 'delete' ], + receivers: alwaysBogus.concat([ new Set, new Map ]), + }, +]; +function TestBogusReceivers(testSet) { + for (var i = 0; i < testSet.length; i++) { + var proto = testSet[i].proto; + var funcs = testSet[i].funcs; + var receivers = testSet[i].receivers; + for (var j = 0; j < funcs.length; j++) { + var func = proto[funcs[j]]; + for (var k = 0; k < receivers.length; k++) { + assertThrows(function () { func.call(receivers[k], {}) }, TypeError); + } + } + } +} +TestBogusReceivers(bogusReceiversTestSet); + + // Stress Test // There is a proposed stress-test available at the es-discuss mailing list // which cannot be reasonably automated. Check it out by hand if you like: |