Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(98)

Side by Side Diff: test/cctest/test-modules.cc

Issue 2393303002: [modules] Store Module metadata in per-Context EmbedderData (Closed)
Patch Set: Rebased Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/objects-printer.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
OLDNEW
« no previous file with comments | « src/objects-printer.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698