diff options
Diffstat (limited to 'deps/v8/test/cctest/test-modules.cc')
-rw-r--r-- | deps/v8/test/cctest/test-modules.cc | 45 |
1 files changed, 36 insertions, 9 deletions
diff --git a/deps/v8/test/cctest/test-modules.cc b/deps/v8/test/cctest/test-modules.cc index 9e8bf100d5..f63a04d011 100644 --- a/deps/v8/test/cctest/test-modules.cc +++ b/deps/v8/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 |