Index: test/cctest/test-modules.cc |
diff --git a/test/cctest/test-modules.cc b/test/cctest/test-modules.cc |
index 9e8bf100d575252b85439fce7d9674f3dfa53a69..f63a04d0118d3b0c67eb66a9ae1074a56fe8ed25 100644 |
--- a/test/cctest/test-modules.cc |
+++ b/test/cctest/test-modules.cc |
@@ -27,9 +27,11 @@ ScriptOrigin ModuleOrigin(Local<v8::Value> resource_name, Isolate* isolate) { |
return origin; |
} |
-MaybeLocal<Module> AlwaysEmptyResolveCallback(Local<Context> context, |
- Local<String> specifier, |
- Local<Module> referrer) { |
+MaybeLocal<Module> FailAlwaysResolveCallback(Local<Context> context, |
+ Local<String> specifier, |
+ Local<Module> referrer) { |
+ Isolate* isolate = context->GetIsolate(); |
+ isolate->ThrowException(v8_str("boom")); |
return MaybeLocal<Module>(); |
} |
@@ -37,18 +39,22 @@ static int g_count = 0; |
MaybeLocal<Module> FailOnSecondCallResolveCallback(Local<Context> context, |
Local<String> specifier, |
Local<Module> referrer) { |
- if (g_count++ > 0) return MaybeLocal<Module>(); |
+ Isolate* isolate = CcTest::isolate(); |
+ if (g_count++ > 0) { |
+ isolate->ThrowException(v8_str("booom")); |
+ return MaybeLocal<Module>(); |
+ } |
Local<String> source_text = v8_str(""); |
- ScriptOrigin origin = ModuleOrigin(v8_str("module.js"), CcTest::isolate()); |
+ ScriptOrigin origin = ModuleOrigin(v8_str("module.js"), isolate); |
ScriptCompiler::Source source(source_text, origin); |
- return ScriptCompiler::CompileModule(CcTest::isolate(), &source) |
- .ToLocalChecked(); |
+ return ScriptCompiler::CompileModule(isolate, &source).ToLocalChecked(); |
} |
TEST(ModuleInstantiationFailures) { |
Isolate* isolate = CcTest::isolate(); |
HandleScope scope(isolate); |
LocalContext env; |
+ v8::TryCatch try_catch(isolate); |
Local<String> source_text = v8_str( |
"import './foo.js';" |
@@ -62,14 +68,26 @@ TEST(ModuleInstantiationFailures) { |
CHECK(v8_str("./bar.js")->StrictEquals(module->GetModuleRequest(1))); |
// Instantiation should fail. |
- CHECK(!module->Instantiate(env.local(), AlwaysEmptyResolveCallback)); |
+ { |
+ v8::TryCatch inner_try_catch(isolate); |
+ CHECK(!module->Instantiate(env.local(), FailAlwaysResolveCallback)); |
+ CHECK(inner_try_catch.HasCaught()); |
+ CHECK(inner_try_catch.Exception()->StrictEquals(v8_str("boom"))); |
+ } |
// Start over again... |
module = ScriptCompiler::CompileModule(isolate, &source).ToLocalChecked(); |
// Instantiation should fail if a sub-module fails to resolve. |
g_count = 0; |
- CHECK(!module->Instantiate(env.local(), FailOnSecondCallResolveCallback)); |
+ { |
+ v8::TryCatch inner_try_catch(isolate); |
+ CHECK(!module->Instantiate(env.local(), FailOnSecondCallResolveCallback)); |
+ CHECK(inner_try_catch.HasCaught()); |
+ CHECK(inner_try_catch.Exception()->StrictEquals(v8_str("booom"))); |
+ } |
+ |
+ CHECK(!try_catch.HasCaught()); |
} |
static MaybeLocal<Module> CompileSpecifierAsModuleResolveCallback( |
@@ -84,6 +102,7 @@ TEST(ModuleEvaluation) { |
Isolate* isolate = CcTest::isolate(); |
HandleScope scope(isolate); |
LocalContext env; |
+ v8::TryCatch try_catch(isolate); |
Local<String> source_text = v8_str( |
"import 'Object.expando = 5';" |
@@ -96,12 +115,15 @@ TEST(ModuleEvaluation) { |
CompileSpecifierAsModuleResolveCallback)); |
CHECK(!module->Evaluate(env.local()).IsEmpty()); |
ExpectInt32("Object.expando", 10); |
+ |
+ CHECK(!try_catch.HasCaught()); |
} |
TEST(ModuleEvaluationCompletion1) { |
Isolate* isolate = CcTest::isolate(); |
HandleScope scope(isolate); |
LocalContext env; |
+ v8::TryCatch try_catch(isolate); |
const char* sources[] = { |
"", |
@@ -133,12 +155,15 @@ TEST(ModuleEvaluationCompletion1) { |
CompileSpecifierAsModuleResolveCallback)); |
CHECK(module->Evaluate(env.local()).ToLocalChecked()->IsUndefined()); |
} |
+ |
+ CHECK(!try_catch.HasCaught()); |
} |
TEST(ModuleEvaluationCompletion2) { |
Isolate* isolate = CcTest::isolate(); |
HandleScope scope(isolate); |
LocalContext env; |
+ v8::TryCatch try_catch(isolate); |
const char* sources[] = { |
"'gaga'; ", |
@@ -171,6 +196,8 @@ TEST(ModuleEvaluationCompletion2) { |
.ToLocalChecked() |
->StrictEquals(v8_str("gaga"))); |
} |
+ |
+ CHECK(!try_catch.HasCaught()); |
} |
} // anonymous namespace |