| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 7933 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7944 | 7944 |
| 7945 THREADED_TEST(CrossEval) { | 7945 THREADED_TEST(CrossEval) { |
| 7946 v8::HandleScope scope; | 7946 v8::HandleScope scope; |
| 7947 LocalContext other; | 7947 LocalContext other; |
| 7948 LocalContext current; | 7948 LocalContext current; |
| 7949 | 7949 |
| 7950 Local<String> token = v8_str("<security token>"); | 7950 Local<String> token = v8_str("<security token>"); |
| 7951 other->SetSecurityToken(token); | 7951 other->SetSecurityToken(token); |
| 7952 current->SetSecurityToken(token); | 7952 current->SetSecurityToken(token); |
| 7953 | 7953 |
| 7954 // Setup reference from current to other. | 7954 // Set up reference from current to other. |
| 7955 current->Global()->Set(v8_str("other"), other->Global()); | 7955 current->Global()->Set(v8_str("other"), other->Global()); |
| 7956 | 7956 |
| 7957 // Check that new variables are introduced in other context. | 7957 // Check that new variables are introduced in other context. |
| 7958 Local<Script> script = | 7958 Local<Script> script = |
| 7959 Script::Compile(v8_str("other.eval('var foo = 1234')")); | 7959 Script::Compile(v8_str("other.eval('var foo = 1234')")); |
| 7960 script->Run(); | 7960 script->Run(); |
| 7961 Local<Value> foo = other->Global()->Get(v8_str("foo")); | 7961 Local<Value> foo = other->Global()->Get(v8_str("foo")); |
| 7962 CHECK_EQ(1234, foo->Int32Value()); | 7962 CHECK_EQ(1234, foo->Int32Value()); |
| 7963 CHECK(!current->Global()->Has(v8_str("foo"))); | 7963 CHECK(!current->Global()->Has(v8_str("foo"))); |
| 7964 | 7964 |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8024 | 8024 |
| 8025 // Test that calling eval in a context which has been detached from | 8025 // Test that calling eval in a context which has been detached from |
| 8026 // its global throws an exception. This behavior is consistent with | 8026 // its global throws an exception. This behavior is consistent with |
| 8027 // other JavaScript implementations. | 8027 // other JavaScript implementations. |
| 8028 THREADED_TEST(EvalInDetachedGlobal) { | 8028 THREADED_TEST(EvalInDetachedGlobal) { |
| 8029 v8::HandleScope scope; | 8029 v8::HandleScope scope; |
| 8030 | 8030 |
| 8031 v8::Persistent<Context> context0 = Context::New(); | 8031 v8::Persistent<Context> context0 = Context::New(); |
| 8032 v8::Persistent<Context> context1 = Context::New(); | 8032 v8::Persistent<Context> context1 = Context::New(); |
| 8033 | 8033 |
| 8034 // Setup function in context0 that uses eval from context0. | 8034 // Set up function in context0 that uses eval from context0. |
| 8035 context0->Enter(); | 8035 context0->Enter(); |
| 8036 v8::Handle<v8::Value> fun = | 8036 v8::Handle<v8::Value> fun = |
| 8037 CompileRun("var x = 42;" | 8037 CompileRun("var x = 42;" |
| 8038 "(function() {" | 8038 "(function() {" |
| 8039 " var e = eval;" | 8039 " var e = eval;" |
| 8040 " return function(s) { return e(s); }" | 8040 " return function(s) { return e(s); }" |
| 8041 "})()"); | 8041 "})()"); |
| 8042 context0->Exit(); | 8042 context0->Exit(); |
| 8043 | 8043 |
| 8044 // Put the function into context1 and call it before and after | 8044 // Put the function into context1 and call it before and after |
| (...skipping 17 matching lines...) Expand all Loading... |
| 8062 | 8062 |
| 8063 THREADED_TEST(CrossLazyLoad) { | 8063 THREADED_TEST(CrossLazyLoad) { |
| 8064 v8::HandleScope scope; | 8064 v8::HandleScope scope; |
| 8065 LocalContext other; | 8065 LocalContext other; |
| 8066 LocalContext current; | 8066 LocalContext current; |
| 8067 | 8067 |
| 8068 Local<String> token = v8_str("<security token>"); | 8068 Local<String> token = v8_str("<security token>"); |
| 8069 other->SetSecurityToken(token); | 8069 other->SetSecurityToken(token); |
| 8070 current->SetSecurityToken(token); | 8070 current->SetSecurityToken(token); |
| 8071 | 8071 |
| 8072 // Setup reference from current to other. | 8072 // Set up reference from current to other. |
| 8073 current->Global()->Set(v8_str("other"), other->Global()); | 8073 current->Global()->Set(v8_str("other"), other->Global()); |
| 8074 | 8074 |
| 8075 // Trigger lazy loading in other context. | 8075 // Trigger lazy loading in other context. |
| 8076 Local<Script> script = | 8076 Local<Script> script = |
| 8077 Script::Compile(v8_str("other.eval('new Date(42)')")); | 8077 Script::Compile(v8_str("other.eval('new Date(42)')")); |
| 8078 Local<Value> value = script->Run(); | 8078 Local<Value> value = script->Run(); |
| 8079 CHECK_EQ(42.0, value->NumberValue()); | 8079 CHECK_EQ(42.0, value->NumberValue()); |
| 8080 } | 8080 } |
| 8081 | 8081 |
| 8082 | 8082 |
| (...skipping 2090 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 10173 } else { | 10173 } else { |
| 10174 // Otherwise select a new test and start that. | 10174 // Otherwise select a new test and start that. |
| 10175 NextThread(); | 10175 NextThread(); |
| 10176 } | 10176 } |
| 10177 } | 10177 } |
| 10178 | 10178 |
| 10179 | 10179 |
| 10180 static unsigned linear_congruential_generator; | 10180 static unsigned linear_congruential_generator; |
| 10181 | 10181 |
| 10182 | 10182 |
| 10183 void ApiTestFuzzer::Setup(PartOfTest part) { | 10183 void ApiTestFuzzer::SetUp(PartOfTest part) { |
| 10184 linear_congruential_generator = i::FLAG_testing_prng_seed; | 10184 linear_congruential_generator = i::FLAG_testing_prng_seed; |
| 10185 fuzzing_ = true; | 10185 fuzzing_ = true; |
| 10186 int count = RegisterThreadedTest::count(); | 10186 int count = RegisterThreadedTest::count(); |
| 10187 int start = count * part / (LAST_PART + 1); | 10187 int start = count * part / (LAST_PART + 1); |
| 10188 int end = (count * (part + 1) / (LAST_PART + 1)) - 1; | 10188 int end = (count * (part + 1) / (LAST_PART + 1)) - 1; |
| 10189 active_tests_ = tests_being_run_ = end - start + 1; | 10189 active_tests_ = tests_being_run_ = end - start + 1; |
| 10190 for (int i = 0; i < tests_being_run_; i++) { | 10190 for (int i = 0; i < tests_being_run_; i++) { |
| 10191 RegisterThreadedTest::nth(i)->fuzzer_ = new ApiTestFuzzer(i + start); | 10191 RegisterThreadedTest::nth(i)->fuzzer_ = new ApiTestFuzzer(i + start); |
| 10192 } | 10192 } |
| 10193 for (int i = 0; i < active_tests_; i++) { | 10193 for (int i = 0; i < active_tests_; i++) { |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 10237 fuzzing_ = false; | 10237 fuzzing_ = false; |
| 10238 for (int i = 0; i < RegisterThreadedTest::count(); i++) { | 10238 for (int i = 0; i < RegisterThreadedTest::count(); i++) { |
| 10239 ApiTestFuzzer *fuzzer = RegisterThreadedTest::nth(i)->fuzzer_; | 10239 ApiTestFuzzer *fuzzer = RegisterThreadedTest::nth(i)->fuzzer_; |
| 10240 if (fuzzer != NULL) fuzzer->Join(); | 10240 if (fuzzer != NULL) fuzzer->Join(); |
| 10241 } | 10241 } |
| 10242 } | 10242 } |
| 10243 | 10243 |
| 10244 | 10244 |
| 10245 // Lets not be needlessly self-referential. | 10245 // Lets not be needlessly self-referential. |
| 10246 TEST(Threading) { | 10246 TEST(Threading) { |
| 10247 ApiTestFuzzer::Setup(ApiTestFuzzer::FIRST_PART); | 10247 ApiTestFuzzer::SetUp(ApiTestFuzzer::FIRST_PART); |
| 10248 ApiTestFuzzer::RunAllTests(); | 10248 ApiTestFuzzer::RunAllTests(); |
| 10249 ApiTestFuzzer::TearDown(); | 10249 ApiTestFuzzer::TearDown(); |
| 10250 } | 10250 } |
| 10251 | 10251 |
| 10252 TEST(Threading2) { | 10252 TEST(Threading2) { |
| 10253 ApiTestFuzzer::Setup(ApiTestFuzzer::SECOND_PART); | 10253 ApiTestFuzzer::SetUp(ApiTestFuzzer::SECOND_PART); |
| 10254 ApiTestFuzzer::RunAllTests(); | 10254 ApiTestFuzzer::RunAllTests(); |
| 10255 ApiTestFuzzer::TearDown(); | 10255 ApiTestFuzzer::TearDown(); |
| 10256 } | 10256 } |
| 10257 | 10257 |
| 10258 TEST(Threading3) { | 10258 TEST(Threading3) { |
| 10259 ApiTestFuzzer::Setup(ApiTestFuzzer::THIRD_PART); | 10259 ApiTestFuzzer::SetUp(ApiTestFuzzer::THIRD_PART); |
| 10260 ApiTestFuzzer::RunAllTests(); | 10260 ApiTestFuzzer::RunAllTests(); |
| 10261 ApiTestFuzzer::TearDown(); | 10261 ApiTestFuzzer::TearDown(); |
| 10262 } | 10262 } |
| 10263 | 10263 |
| 10264 TEST(Threading4) { | 10264 TEST(Threading4) { |
| 10265 ApiTestFuzzer::Setup(ApiTestFuzzer::FOURTH_PART); | 10265 ApiTestFuzzer::SetUp(ApiTestFuzzer::FOURTH_PART); |
| 10266 ApiTestFuzzer::RunAllTests(); | 10266 ApiTestFuzzer::RunAllTests(); |
| 10267 ApiTestFuzzer::TearDown(); | 10267 ApiTestFuzzer::TearDown(); |
| 10268 } | 10268 } |
| 10269 | 10269 |
| 10270 void ApiTestFuzzer::CallTest() { | 10270 void ApiTestFuzzer::CallTest() { |
| 10271 if (kLogThreading) | 10271 if (kLogThreading) |
| 10272 printf("Start test %d\n", test_number_); | 10272 printf("Start test %d\n", test_number_); |
| 10273 CallTestNumber(test_number_); | 10273 CallTestNumber(test_number_); |
| 10274 if (kLogThreading) | 10274 if (kLogThreading) |
| 10275 printf("End test %d\n", test_number_); | 10275 printf("End test %d\n", test_number_); |
| (...skipping 1838 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 12114 calling_context2->SetSecurityToken(token); | 12114 calling_context2->SetSecurityToken(token); |
| 12115 | 12115 |
| 12116 // Create an object with a C++ callback in context0. | 12116 // Create an object with a C++ callback in context0. |
| 12117 calling_context0->Enter(); | 12117 calling_context0->Enter(); |
| 12118 Local<v8::FunctionTemplate> callback_templ = | 12118 Local<v8::FunctionTemplate> callback_templ = |
| 12119 v8::FunctionTemplate::New(GetCallingContextCallback); | 12119 v8::FunctionTemplate::New(GetCallingContextCallback); |
| 12120 calling_context0->Global()->Set(v8_str("callback"), | 12120 calling_context0->Global()->Set(v8_str("callback"), |
| 12121 callback_templ->GetFunction()); | 12121 callback_templ->GetFunction()); |
| 12122 calling_context0->Exit(); | 12122 calling_context0->Exit(); |
| 12123 | 12123 |
| 12124 // Expose context0 in context1 and setup a function that calls the | 12124 // Expose context0 in context1 and set up a function that calls the |
| 12125 // callback function. | 12125 // callback function. |
| 12126 calling_context1->Enter(); | 12126 calling_context1->Enter(); |
| 12127 calling_context1->Global()->Set(v8_str("context0"), | 12127 calling_context1->Global()->Set(v8_str("context0"), |
| 12128 calling_context0->Global()); | 12128 calling_context0->Global()); |
| 12129 CompileRun("function f() { context0.callback() }"); | 12129 CompileRun("function f() { context0.callback() }"); |
| 12130 calling_context1->Exit(); | 12130 calling_context1->Exit(); |
| 12131 | 12131 |
| 12132 // Expose context1 in context2 and call the callback function in | 12132 // Expose context1 in context2 and call the callback function in |
| 12133 // context0 indirectly through f in context1. | 12133 // context0 indirectly through f in context1. |
| 12134 calling_context2->Enter(); | 12134 calling_context2->Enter(); |
| (...skipping 3689 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 15824 CompileRun("throw 'exception';"); | 15824 CompileRun("throw 'exception';"); |
| 15825 } | 15825 } |
| 15826 | 15826 |
| 15827 | 15827 |
| 15828 TEST(CallCompletedCallbackTwoExceptions) { | 15828 TEST(CallCompletedCallbackTwoExceptions) { |
| 15829 v8::HandleScope scope; | 15829 v8::HandleScope scope; |
| 15830 LocalContext env; | 15830 LocalContext env; |
| 15831 v8::V8::AddCallCompletedCallback(CallCompletedCallbackException); | 15831 v8::V8::AddCallCompletedCallback(CallCompletedCallbackException); |
| 15832 CompileRun("throw 'first exception';"); | 15832 CompileRun("throw 'first exception';"); |
| 15833 } | 15833 } |
| OLD | NEW |