| 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
|
|
|