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

Unified Diff: third_party/WebKit/Source/bindings/core/v8/ScriptModuleTest.cpp

Issue 2785983002: [ES6 modules] ScriptModule::instantiate with resolveModule cb and error handling (Closed)
Patch Set: add_tests Created 3 years, 9 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 side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/bindings/core/v8/ScriptModuleTest.cpp
diff --git a/third_party/WebKit/Source/bindings/core/v8/ScriptModuleTest.cpp b/third_party/WebKit/Source/bindings/core/v8/ScriptModuleTest.cpp
index 61fb66a8a5fdab96c5fe0a5e4e11bc4b3e747717..609d3260121f8fc7513ff56638d3ffebb038312b 100644
--- a/third_party/WebKit/Source/bindings/core/v8/ScriptModuleTest.cpp
+++ b/third_party/WebKit/Source/bindings/core/v8/ScriptModuleTest.cpp
@@ -5,6 +5,9 @@
#include "bindings/core/v8/ScriptModule.h"
#include "bindings/core/v8/V8BindingForTesting.h"
+#include "bindings/core/v8/V8PerContextData.h"
+#include "core/dom/ScriptModuleResolver.h"
+#include "core/testing/DummyModulator.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "v8/include/v8.h"
@@ -12,6 +15,62 @@ namespace blink {
namespace {
+class TestScriptModuleResolver final : public ScriptModuleResolver {
+ public:
+ TestScriptModuleResolver() {}
+ virtual ~TestScriptModuleResolver() {}
+
+ size_t resolveCount() const { return m_specifiers.size(); }
+ const Vector<String>& specifiers() const { return m_specifiers; }
+ void pushScriptModule(ScriptModule scriptModule) {
+ m_scriptModules.push_back(scriptModule);
+ }
+
+ private:
+ // Implements ScriptModuleResolver:
+
+ void registerModuleScript(ModuleScript*) override { NOTREACHED(); }
+
+ ScriptModule resolve(const String& specifier,
+ const ScriptModule&,
+ ExceptionState&) override {
+ m_specifiers.push_back(specifier);
+ return m_scriptModules.takeFirst();
+ }
+
+ Vector<String> m_specifiers;
+ Deque<ScriptModule> m_scriptModules;
+};
+
+class ScriptModuleTestModulator final : public DummyModulator {
+ public:
+ ScriptModuleTestModulator();
+ virtual ~ScriptModuleTestModulator() {}
+
+ DECLARE_TRACE();
+
+ TestScriptModuleResolver* testScriptModuleResolver() {
+ return m_resolver.get();
+ }
+
+ private:
+ // Implements Modulator:
+
+ ScriptModuleResolver* scriptModuleResolver() override {
+ return m_resolver.get();
+ }
+
+ Member<TestScriptModuleResolver> m_resolver;
+};
+
+ScriptModuleTestModulator::ScriptModuleTestModulator()
+ : m_resolver(new TestScriptModuleResolver) {}
+
+DEFINE_TRACE(ScriptModuleTestModulator) {
+ visitor->trace(m_resolver);
+ DummyModulator::trace(visitor);
+}
+
TEST(ScriptModuleTest, compileSuccess) {
V8TestingScope scope;
ScriptModule module =
@@ -26,6 +85,54 @@ TEST(ScriptModuleTest, compileFail) {
ASSERT_TRUE(module.isNull());
}
+TEST(ScriptModuleTest, instantiateNoDeps) {
+ V8TestingScope scope;
+
+ auto modulator = new ScriptModuleTestModulator();
+ auto resolver = modulator->testScriptModuleResolver();
+
+ auto contextData = V8PerContextData::from(scope.context());
+ contextData->setModulator(modulator);
+
+ ScriptModule module =
+ ScriptModule::compile(scope.isolate(), "export const a = 42;", "foo.js");
+ ASSERT_FALSE(module.isNull());
+ ScriptValue exception = module.instantiate(scope.getScriptState());
+ ASSERT_TRUE(exception.isEmpty());
+
+ EXPECT_EQ(0u, resolver->resolveCount());
+}
+
+TEST(ScriptModuleTest, instantiateWithDeps) {
+ V8TestingScope scope;
+
+ auto modulator = new ScriptModuleTestModulator();
+ auto resolver = modulator->testScriptModuleResolver();
+
+ auto contextData = V8PerContextData::from(scope.context());
+ contextData->setModulator(modulator);
+
+ ScriptModule moduleA =
+ ScriptModule::compile(scope.isolate(), "export const a = 'a';", "foo.js");
+ ASSERT_FALSE(moduleA.isNull());
+ resolver->pushScriptModule(moduleA);
+
+ ScriptModule moduleB =
+ ScriptModule::compile(scope.isolate(), "export const b = 'b';", "foo.js");
+ ASSERT_FALSE(moduleB.isNull());
+ resolver->pushScriptModule(moduleB);
+
+ ScriptModule module = ScriptModule::compile(
+ scope.isolate(), "import 'a'; import 'b'; export const c = 123;", "c.js");
+ ASSERT_FALSE(module.isNull());
+ ScriptValue exception = module.instantiate(scope.getScriptState());
+ ASSERT_TRUE(exception.isEmpty());
+
+ ASSERT_EQ(2u, resolver->resolveCount());
+ EXPECT_EQ("a", resolver->specifiers()[0]);
+ EXPECT_EQ("b", resolver->specifiers()[1]);
+}
+
} // namespace
} // namespace blink
« no previous file with comments | « third_party/WebKit/Source/bindings/core/v8/ScriptModule.cpp ('k') | third_party/WebKit/Source/core/dom/ScriptModuleResolver.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698