| OLD | NEW | 
|---|
| 1 // Copyright 2016 the V8 project authors. All rights reserved. | 1 // Copyright 2016 the V8 project 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 "src/flags.h" | 5 #include "src/flags.h" | 
| 6 | 6 | 
| 7 #include "test/cctest/cctest.h" | 7 #include "test/cctest/cctest.h" | 
| 8 | 8 | 
| 9 namespace { | 9 namespace { | 
| 10 | 10 | 
| 11 using v8::Context; | 11 using v8::Context; | 
| 12 using v8::HandleScope; | 12 using v8::HandleScope; | 
| 13 using v8::Isolate; | 13 using v8::Isolate; | 
| 14 using v8::Local; | 14 using v8::Local; | 
| 15 using v8::MaybeLocal; | 15 using v8::MaybeLocal; | 
| 16 using v8::Module; | 16 using v8::Module; | 
| 17 using v8::ScriptCompiler; | 17 using v8::ScriptCompiler; | 
| 18 using v8::ScriptOrigin; | 18 using v8::ScriptOrigin; | 
| 19 using v8::String; | 19 using v8::String; | 
| 20 using v8::Value; | 20 using v8::Value; | 
| 21 | 21 | 
| 22 MaybeLocal<Module> AlwaysEmptyResolveCallback(Local<Context> context, | 22 MaybeLocal<Module> AlwaysEmptyResolveCallback(Local<Context> context, | 
| 23                                               Local<String> specifier, | 23                                               Local<String> specifier, | 
| 24                                               Local<Module> referrer, | 24                                               Local<Module> referrer) { | 
| 25                                               Local<Value> data) { |  | 
| 26   return MaybeLocal<Module>(); | 25   return MaybeLocal<Module>(); | 
| 27 } | 26 } | 
| 28 | 27 | 
| 29 static int g_count = 0; | 28 static int g_count = 0; | 
| 30 MaybeLocal<Module> FailOnSecondCallResolveCallback(Local<Context> context, | 29 MaybeLocal<Module> FailOnSecondCallResolveCallback(Local<Context> context, | 
| 31                                                    Local<String> specifier, | 30                                                    Local<String> specifier, | 
| 32                                                    Local<Module> referrer, | 31                                                    Local<Module> referrer) { | 
| 33                                                    Local<Value> data) { |  | 
| 34   if (g_count++ > 0) return MaybeLocal<Module>(); | 32   if (g_count++ > 0) return MaybeLocal<Module>(); | 
| 35   Local<String> source_text = v8_str(""); | 33   Local<String> source_text = v8_str(""); | 
| 36   ScriptOrigin origin(v8_str("module.js")); | 34   ScriptOrigin origin(v8_str("module.js")); | 
| 37   ScriptCompiler::Source source(source_text, origin); | 35   ScriptCompiler::Source source(source_text, origin); | 
| 38   return ScriptCompiler::CompileModule(CcTest::isolate(), &source) | 36   return ScriptCompiler::CompileModule(CcTest::isolate(), &source) | 
| 39       .ToLocalChecked(); | 37       .ToLocalChecked(); | 
| 40 } | 38 } | 
| 41 | 39 | 
| 42 TEST(ModuleInstantiationFailures) { | 40 TEST(ModuleInstantiationFailures) { | 
| 43   Isolate* isolate = CcTest::isolate(); | 41   Isolate* isolate = CcTest::isolate(); | 
| (...skipping 16 matching lines...) Expand all  Loading... | 
| 60 | 58 | 
| 61   // Start over again... | 59   // Start over again... | 
| 62   module = ScriptCompiler::CompileModule(isolate, &source).ToLocalChecked(); | 60   module = ScriptCompiler::CompileModule(isolate, &source).ToLocalChecked(); | 
| 63 | 61 | 
| 64   // Instantiation should fail if a sub-module fails to resolve. | 62   // Instantiation should fail if a sub-module fails to resolve. | 
| 65   g_count = 0; | 63   g_count = 0; | 
| 66   CHECK(!module->Instantiate(env.local(), FailOnSecondCallResolveCallback)); | 64   CHECK(!module->Instantiate(env.local(), FailOnSecondCallResolveCallback)); | 
| 67 } | 65 } | 
| 68 | 66 | 
| 69 static MaybeLocal<Module> CompileSpecifierAsModuleResolveCallback( | 67 static MaybeLocal<Module> CompileSpecifierAsModuleResolveCallback( | 
| 70     Local<Context> context, Local<String> specifier, Local<Module> referrer, | 68     Local<Context> context, Local<String> specifier, Local<Module> referrer) { | 
| 71     Local<Value> data) { |  | 
| 72   ScriptOrigin origin(v8_str("module.js")); | 69   ScriptOrigin origin(v8_str("module.js")); | 
| 73   ScriptCompiler::Source source(specifier, origin); | 70   ScriptCompiler::Source source(specifier, origin); | 
| 74   return ScriptCompiler::CompileModule(CcTest::isolate(), &source) | 71   return ScriptCompiler::CompileModule(CcTest::isolate(), &source) | 
| 75       .ToLocalChecked(); | 72       .ToLocalChecked(); | 
| 76 } | 73 } | 
| 77 | 74 | 
| 78 TEST(ModuleEvaluation) { | 75 TEST(ModuleEvaluation) { | 
| 79   Isolate* isolate = CcTest::isolate(); | 76   Isolate* isolate = CcTest::isolate(); | 
| 80   HandleScope scope(isolate); | 77   HandleScope scope(isolate); | 
| 81   LocalContext env; | 78   LocalContext env; | 
| 82 | 79 | 
| 83   Local<String> source_text = v8_str( | 80   Local<String> source_text = v8_str( | 
| 84       "import 'Object.expando = 5';" | 81       "import 'Object.expando = 5';" | 
| 85       "import 'Object.expando *= 2';"); | 82       "import 'Object.expando *= 2';"); | 
| 86   ScriptOrigin origin(v8_str("file.js")); | 83   ScriptOrigin origin(v8_str("file.js")); | 
| 87   ScriptCompiler::Source source(source_text, origin); | 84   ScriptCompiler::Source source(source_text, origin); | 
| 88   Local<Module> module = | 85   Local<Module> module = | 
| 89       ScriptCompiler::CompileModule(isolate, &source).ToLocalChecked(); | 86       ScriptCompiler::CompileModule(isolate, &source).ToLocalChecked(); | 
| 90   CHECK(module->Instantiate(env.local(), | 87   CHECK(module->Instantiate(env.local(), | 
| 91                             CompileSpecifierAsModuleResolveCallback)); | 88                             CompileSpecifierAsModuleResolveCallback)); | 
| 92   CHECK(!module->Evaluate(env.local()).IsEmpty()); | 89   CHECK(!module->Evaluate(env.local()).IsEmpty()); | 
| 93   ExpectInt32("Object.expando", 10); | 90   ExpectInt32("Object.expando", 10); | 
| 94 } | 91 } | 
| 95 | 92 | 
| 96 TEST(EmbedderData) { |  | 
| 97   Isolate* isolate = CcTest::isolate(); |  | 
| 98   HandleScope scope(isolate); |  | 
| 99   LocalContext env; |  | 
| 100 |  | 
| 101   Local<String> source_text = v8_str(""); |  | 
| 102   ScriptOrigin origin(v8_str("file.js")); |  | 
| 103   ScriptCompiler::Source source(source_text, origin); |  | 
| 104   Local<Module> module = |  | 
| 105       ScriptCompiler::CompileModule(isolate, &source).ToLocalChecked(); |  | 
| 106   CHECK(module->GetEmbedderData()->IsUndefined()); |  | 
| 107   module->SetEmbedderData(v8_num(42)); |  | 
| 108   CHECK_EQ(42, Local<v8::Int32>::Cast(module->GetEmbedderData())->Value()); |  | 
| 109 } |  | 
| 110 |  | 
| 111 }  // anonymous namespace | 93 }  // anonymous namespace | 
| OLD | NEW | 
|---|