Index: third_party/WebKit/Source/core/loader/modulescript/ModuleScriptLoaderTest.cpp |
diff --git a/third_party/WebKit/Source/core/loader/modulescript/ModuleScriptLoaderTest.cpp b/third_party/WebKit/Source/core/loader/modulescript/ModuleScriptLoaderTest.cpp |
new file mode 100644 |
index 0000000000000000000000000000000000000000..4e12c0063869dae550f2d7d62a8eaca8fd24dee5 |
--- /dev/null |
+++ b/third_party/WebKit/Source/core/loader/modulescript/ModuleScriptLoaderTest.cpp |
@@ -0,0 +1,112 @@ |
+// Copyright 2017 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "core/loader/modulescript/ModuleScriptLoader.h" |
+ |
+#include "core/dom/Document.h" |
+#include "core/dom/Modulator.h" |
+#include "core/dom/ModuleScript.h" |
+#include "core/loader/modulescript/ModuleScriptFetchRequest.h" |
+#include "core/loader/modulescript/ModuleScriptLoaderClient.h" |
+#include "core/loader/modulescript/ModuleScriptLoaderRegistry.h" |
+#include "core/testing/DummyModulator.h" |
+#include "core/testing/DummyPageHolder.h" |
+#include "platform/heap/Handle.h" |
+#include "platform/loader/fetch/MockFetchContext.h" |
+#include "platform/loader/fetch/ResourceFetcher.h" |
+#include "platform/testing/TestingPlatformSupport.h" |
+#include "public/platform/Platform.h" |
+#include "testing/gtest/include/gtest/gtest.h" |
+ |
+namespace blink { |
+ |
+namespace { |
+ |
+class TestModuleScriptLoaderClient |
yhirano
2017/02/17 04:59:15
+final
kouhei (in TOK)
2017/02/22 03:52:29
Done.
|
+ : public GarbageCollectedFinalized<TestModuleScriptLoaderClient>, |
+ public ModuleScriptLoaderClient { |
+ USING_GARBAGE_COLLECTED_MIXIN(TestModuleScriptLoaderClient); |
+ |
+ public: |
+ TestModuleScriptLoaderClient() = default; |
+ virtual ~TestModuleScriptLoaderClient() {} |
yhirano
2017/02/17 04:59:15
-virtual
+override
kouhei (in TOK)
2017/02/22 03:52:29
Done.
|
+ |
+ DEFINE_INLINE_TRACE() { visitor->trace(m_moduleScript); } |
+ |
+ void notifyNewSingleModuleFinished(ModuleScript* moduleScript) override { |
hiroshige
2017/02/20 23:15:32
optional: I prefer using gmock and EXPECT_CALL() b
kouhei (in TOK)
2017/02/22 03:52:29
ok
|
+ m_wasNotifyFinished = true; |
+ m_moduleScript = moduleScript; |
+ } |
+ |
+ bool wasNotifyFinished() const { return m_wasNotifyFinished; } |
+ ModuleScript* moduleScript() { return m_moduleScript; } |
+ |
+ private: |
+ bool m_wasNotifyFinished = false; |
+ Member<ModuleScript> m_moduleScript; |
+}; |
+ |
+class ModuleScriptLoaderTestModulator final : public DummyModulator { |
+ public: |
+ ModuleScriptLoaderTestModulator(RefPtr<ScriptState> scriptState) |
+ : m_scriptState(std::move(scriptState)) {} |
+ |
+ ScriptModule compileModule(const String& script, |
+ const String& urlStr) override { |
+ ScriptState::Scope scope(m_scriptState.get()); |
+ return ScriptModule::compile(m_scriptState->isolate(), |
+ "export default 'foo';", ""); |
+ } |
+ |
+ private: |
+ RefPtr<ScriptState> m_scriptState; |
+}; |
+ |
+} // namespace |
+ |
+class ModuleScriptLoaderTest : public testing::Test { |
+ public: |
+ void SetUp() override; |
+ |
+ LocalFrame& frame() { return m_dummyPageHolder->frame(); } |
+ Document& document() { return m_dummyPageHolder->document(); } |
+ ResourceFetcher* fetcher() { return m_fetcher.get(); } |
+ Modulator* modulator() { return m_modulator.get(); } |
+ |
+ protected: |
+ std::unique_ptr<DummyPageHolder> m_dummyPageHolder; |
+ Persistent<ResourceFetcher> m_fetcher; |
+ Persistent<Modulator> m_modulator; |
+}; |
+ |
+void ModuleScriptLoaderTest::SetUp() { |
+ m_dummyPageHolder = DummyPageHolder::create(IntSize(500, 500)); |
+ document().setURL(KURL(KURL(), "https://example.test")); |
+ m_fetcher = ResourceFetcher::create( |
+ MockFetchContext::create(MockFetchContext::kShouldLoadNewResource)); |
+ m_modulator = |
+ new ModuleScriptLoaderTestModulator(ScriptState::forMainWorld(&frame())); |
+} |
+ |
+TEST_F(ModuleScriptLoaderTest, fetchDataURL) { |
+ ScopedTestingPlatformSupport<TestingPlatformSupportWithMockScheduler> |
+ platform; |
+ platform->advanceClockSeconds(1.); // For non-zero DocumentParserTimings |
+ ModuleScriptLoaderRegistry* registry = ModuleScriptLoaderRegistry::create(); |
+ KURL url(KURL(), "data:text/javascript,export default 'grapes';"); |
+ ModuleScriptFetchRequest moduleRequest( |
+ url, String(), ParserInserted, WebURLRequest::FetchCredentialsModeOmit); |
+ TestModuleScriptLoaderClient* client = new TestModuleScriptLoaderClient; |
+ registry->fetch(moduleRequest, ModuleGraphLevel::TopLevelModuleFetch, |
+ modulator(), fetcher(), client); |
+ |
hiroshige
2017/02/20 23:15:32
Could you add EXPECT_FALSE(client->wasNotifyFinish
kouhei (in TOK)
2017/02/22 03:52:29
Actually this was checking sync use case. I'll add
|
+ platform->runUntilIdle(); |
+ |
+ EXPECT_TRUE(client->wasNotifyFinished()); |
+ EXPECT_TRUE(client->moduleScript()); |
+ EXPECT_EQ(client->moduleScript()->instantiationState(), |
+ ModuleInstantiationState::Uninstantiated); |
+} |
+ |
+} // namespace blink |