OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/test/base/v8_unit_test.h" | 5 #include "chrome/test/base/v8_unit_test.h" |
6 | 6 |
7 #include "base/files/file_util.h" | 7 #include "base/files/file_util.h" |
8 #include "base/logging.h" | 8 #include "base/logging.h" |
9 #include "base/path_service.h" | 9 #include "base/path_service.h" |
10 #include "base/strings/string_piece.h" | 10 #include "base/strings/string_piece.h" |
11 #include "base/strings/stringprintf.h" | 11 #include "base/strings/stringprintf.h" |
12 #include "chrome/common/chrome_paths.h" | 12 #include "chrome/common/chrome_paths.h" |
13 #include "third_party/WebKit/public/web/WebKit.h" | 13 #include "third_party/WebKit/public/web/WebKit.h" |
| 14 #include "third_party/WebKit/public/web/WebScopedMicrotaskSuppression.h" |
14 | 15 |
15 namespace { | 16 namespace { |
16 | 17 |
17 // |args| are passed through the various JavaScript logging functions such as | 18 // |args| are passed through the various JavaScript logging functions such as |
18 // console.log. Returns a string appropriate for logging with LOG(severity). | 19 // console.log. Returns a string appropriate for logging with LOG(severity). |
19 std::string LogArgs2String(const v8::FunctionCallbackInfo<v8::Value>& args) { | 20 std::string LogArgs2String(const v8::FunctionCallbackInfo<v8::Value>& args) { |
20 std::string message; | 21 std::string message; |
21 bool first = true; | 22 bool first = true; |
22 for (int i = 0; i < args.Length(); i++) { | 23 for (int i = 0; i < args.Length(); i++) { |
23 v8::HandleScope handle_scope(v8::Isolate::GetCurrent()); | 24 v8::HandleScope handle_scope(v8::Isolate::GetCurrent()); |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
88 g_test_result_ok = false; | 89 g_test_result_ok = false; |
89 std::string test_js; | 90 std::string test_js; |
90 if (!ExecuteJavascriptLibraries()) | 91 if (!ExecuteJavascriptLibraries()) |
91 return false; | 92 return false; |
92 | 93 |
93 v8::Isolate* isolate = blink::mainThreadIsolate(); | 94 v8::Isolate* isolate = blink::mainThreadIsolate(); |
94 v8::HandleScope handle_scope(isolate); | 95 v8::HandleScope handle_scope(isolate); |
95 v8::Local<v8::Context> context = | 96 v8::Local<v8::Context> context = |
96 v8::Local<v8::Context>::New(isolate, context_); | 97 v8::Local<v8::Context>::New(isolate, context_); |
97 v8::Context::Scope context_scope(context); | 98 v8::Context::Scope context_scope(context); |
| 99 blink::WebScopedMicrotaskSuppression microtasks_scope; |
98 | 100 |
99 v8::Local<v8::Value> function_property = | 101 v8::Local<v8::Value> function_property = |
100 context->Global()->Get(v8::String::NewFromUtf8(isolate, "runTest")); | 102 context->Global()->Get(v8::String::NewFromUtf8(isolate, "runTest")); |
101 EXPECT_FALSE(function_property.IsEmpty()); | 103 EXPECT_FALSE(function_property.IsEmpty()); |
102 if (::testing::Test::HasNonfatalFailure()) | 104 if (::testing::Test::HasNonfatalFailure()) |
103 return false; | 105 return false; |
104 EXPECT_TRUE(function_property->IsFunction()); | 106 EXPECT_TRUE(function_property->IsFunction()); |
105 if (::testing::Test::HasNonfatalFailure()) | 107 if (::testing::Test::HasNonfatalFailure()) |
106 return false; | 108 return false; |
107 v8::Local<v8::Function> function = | 109 v8::Local<v8::Function> function = |
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
202 isolate, value.c_str(), v8::String::kNormalString, value.length())); | 204 isolate, value.c_str(), v8::String::kNormalString, value.length())); |
203 } | 205 } |
204 | 206 |
205 void V8UnitTest::ExecuteScriptInContext(const base::StringPiece& script_source, | 207 void V8UnitTest::ExecuteScriptInContext(const base::StringPiece& script_source, |
206 const base::StringPiece& script_name) { | 208 const base::StringPiece& script_name) { |
207 v8::Isolate* isolate = blink::mainThreadIsolate(); | 209 v8::Isolate* isolate = blink::mainThreadIsolate(); |
208 v8::HandleScope handle_scope(isolate); | 210 v8::HandleScope handle_scope(isolate); |
209 v8::Local<v8::Context> context = | 211 v8::Local<v8::Context> context = |
210 v8::Local<v8::Context>::New(isolate, context_); | 212 v8::Local<v8::Context>::New(isolate, context_); |
211 v8::Context::Scope context_scope(context); | 213 v8::Context::Scope context_scope(context); |
| 214 blink::WebScopedMicrotaskSuppression microtasks_scope; |
212 v8::Local<v8::String> source = | 215 v8::Local<v8::String> source = |
213 v8::String::NewFromUtf8(isolate, | 216 v8::String::NewFromUtf8(isolate, |
214 script_source.data(), | 217 script_source.data(), |
215 v8::String::kNormalString, | 218 v8::String::kNormalString, |
216 script_source.size()); | 219 script_source.size()); |
217 v8::Local<v8::String> name = | 220 v8::Local<v8::String> name = |
218 v8::String::NewFromUtf8(isolate, | 221 v8::String::NewFromUtf8(isolate, |
219 script_name.data(), | 222 script_name.data(), |
220 v8::String::kNormalString, | 223 v8::String::kNormalString, |
221 script_name.size()); | 224 script_name.size()); |
(...skipping 28 matching lines...) Expand all Loading... |
250 } | 253 } |
251 return str; | 254 return str; |
252 } | 255 } |
253 | 256 |
254 void V8UnitTest::TestFunction(const std::string& function_name) { | 257 void V8UnitTest::TestFunction(const std::string& function_name) { |
255 v8::Isolate* isolate = blink::mainThreadIsolate(); | 258 v8::Isolate* isolate = blink::mainThreadIsolate(); |
256 v8::HandleScope handle_scope(isolate); | 259 v8::HandleScope handle_scope(isolate); |
257 v8::Local<v8::Context> context = | 260 v8::Local<v8::Context> context = |
258 v8::Local<v8::Context>::New(isolate, context_); | 261 v8::Local<v8::Context>::New(isolate, context_); |
259 v8::Context::Scope context_scope(context); | 262 v8::Context::Scope context_scope(context); |
| 263 blink::WebScopedMicrotaskSuppression microtasks_scope; |
260 | 264 |
261 v8::Local<v8::Value> function_property = context->Global()->Get( | 265 v8::Local<v8::Value> function_property = context->Global()->Get( |
262 v8::String::NewFromUtf8(isolate, function_name.c_str())); | 266 v8::String::NewFromUtf8(isolate, function_name.c_str())); |
263 ASSERT_FALSE(function_property.IsEmpty()); | 267 ASSERT_FALSE(function_property.IsEmpty()); |
264 ASSERT_TRUE(function_property->IsFunction()); | 268 ASSERT_TRUE(function_property->IsFunction()); |
265 v8::Local<v8::Function> function = | 269 v8::Local<v8::Function> function = |
266 v8::Local<v8::Function>::Cast(function_property); | 270 v8::Local<v8::Function>::Cast(function_property); |
267 | 271 |
268 v8::TryCatch try_catch(isolate); | 272 v8::TryCatch try_catch(isolate); |
269 v8::Local<v8::Value> result = function->Call(context->Global(), 0, NULL); | 273 v8::Local<v8::Value> result = function->Call(context->Global(), 0, NULL); |
(...skipping 30 matching lines...) Expand all Loading... |
300 v8::Local<v8::Array> test_result(args[1].As<v8::Array>()); | 304 v8::Local<v8::Array> test_result(args[1].As<v8::Array>()); |
301 EXPECT_EQ(2U, test_result->Length()); | 305 EXPECT_EQ(2U, test_result->Length()); |
302 if (::testing::Test::HasNonfatalFailure()) | 306 if (::testing::Test::HasNonfatalFailure()) |
303 return; | 307 return; |
304 g_test_result_ok = test_result->Get(0)->BooleanValue(); | 308 g_test_result_ok = test_result->Get(0)->BooleanValue(); |
305 if (!g_test_result_ok) { | 309 if (!g_test_result_ok) { |
306 v8::String::Utf8Value message(test_result->Get(1)); | 310 v8::String::Utf8Value message(test_result->Get(1)); |
307 LOG(ERROR) << *message; | 311 LOG(ERROR) << *message; |
308 } | 312 } |
309 } | 313 } |
OLD | NEW |