Commit 881b5838 authored by Camillo Bruni's avatar Camillo Bruni Committed by Commit Bot

[blink] Add ModuleTestBase::CompileModule helper

Introduce ModuleTestBase::CompileModule for simplifying module
compilation for tests with the upcoming streaming compilation changes.

Bug: 1061857
Change-Id: I8ad38331a4d2a0a4fd4d0b9fff749d91f848bdb5
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2557506Reviewed-by: default avatarHiroshige Hayashizaki <hiroshige@chromium.org>
Reviewed-by: default avatarJeremy Roman <jbroman@chromium.org>
Commit-Queue: Camillo Bruni <cbruni@chromium.org>
Cr-Commit-Position: refs/heads/master@{#830671}
parent ca4a1ef6
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
#include "testing/gtest/include/gtest/gtest.h" #include "testing/gtest/include/gtest/gtest.h"
#include "third_party/blink/renderer/bindings/core/v8/module_record.h" #include "third_party/blink/renderer/bindings/core/v8/module_record.h"
#include "third_party/blink/renderer/bindings/core/v8/v8_binding_for_testing.h" #include "third_party/blink/renderer/bindings/core/v8/v8_binding_for_testing.h"
#include "third_party/blink/renderer/core/testing/module_test_base.h"
#include "third_party/blink/renderer/platform/bindings/exception_state.h" #include "third_party/blink/renderer/platform/bindings/exception_state.h"
#include "third_party/blink/renderer/platform/loader/fetch/script_fetch_options.h" #include "third_party/blink/renderer/platform/loader/fetch/script_fetch_options.h"
#include "third_party/blink/renderer/platform/wtf/text/text_position.h" #include "third_party/blink/renderer/platform/wtf/text/text_position.h"
...@@ -25,16 +26,12 @@ TEST(BoxedV8ModuleTest, equalAndHash) { ...@@ -25,16 +26,12 @@ TEST(BoxedV8ModuleTest, equalAndHash) {
Member<BoxedV8Module> module_empty = nullptr; Member<BoxedV8Module> module_empty = nullptr;
Member<BoxedV8Module> module_deleted(WTF::kHashTableDeletedValue); Member<BoxedV8Module> module_deleted(WTF::kHashTableDeletedValue);
v8::Local<v8::Module> local_module_a = ModuleRecord::Compile( v8::Local<v8::Module> local_module_a = ModuleTestBase::CompileModule(
scope.GetIsolate(), "export const a = 'a';", js_url_a, js_url_a, scope.GetIsolate(), "export const a = 'a';", js_url_a);
ScriptFetchOptions(), TextPosition::MinimumPosition(),
ASSERT_NO_EXCEPTION);
Member<BoxedV8Module> module_a = Member<BoxedV8Module> module_a =
MakeGarbageCollected<BoxedV8Module>(scope.GetIsolate(), local_module_a); MakeGarbageCollected<BoxedV8Module>(scope.GetIsolate(), local_module_a);
v8::Local<v8::Module> local_module_b = ModuleRecord::Compile( v8::Local<v8::Module> local_module_b = ModuleTestBase::CompileModule(
scope.GetIsolate(), "export const b = 'b';", js_url_b, js_url_b, scope.GetIsolate(), "export const b = 'b';", js_url_b);
ScriptFetchOptions(), TextPosition::MinimumPosition(),
ASSERT_NO_EXCEPTION);
Member<BoxedV8Module> module_b = Member<BoxedV8Module> module_b =
MakeGarbageCollected<BoxedV8Module>(scope.GetIsolate(), local_module_b); MakeGarbageCollected<BoxedV8Module>(scope.GetIsolate(), local_module_b);
......
...@@ -29,7 +29,7 @@ namespace { ...@@ -29,7 +29,7 @@ namespace {
class TestModuleRecordResolver final : public ModuleRecordResolver { class TestModuleRecordResolver final : public ModuleRecordResolver {
public: public:
TestModuleRecordResolver(v8::Isolate* isolate) : isolate_(isolate) {} explicit TestModuleRecordResolver(v8::Isolate* isolate) : isolate_(isolate) {}
~TestModuleRecordResolver() override = default; ~TestModuleRecordResolver() override = default;
size_t ResolveCount() const { return specifiers_.size(); } size_t ResolveCount() const { return specifiers_.size(); }
...@@ -114,19 +114,16 @@ class ModuleRecordTest : public ::testing::Test, public ParametrizedModuleTest { ...@@ -114,19 +114,16 @@ class ModuleRecordTest : public ::testing::Test, public ParametrizedModuleTest {
TEST_P(ModuleRecordTest, compileSuccess) { TEST_P(ModuleRecordTest, compileSuccess) {
V8TestingScope scope; V8TestingScope scope;
const KURL js_url("https://example.com/foo.js"); const KURL js_url("https://example.com/foo.js");
v8::Local<v8::Module> module = ModuleRecord::Compile( v8::Local<v8::Module> module = ModuleTestBase::CompileModule(
scope.GetIsolate(), "export const a = 42;", js_url, js_url, scope.GetIsolate(), "export const a = 42;", js_url);
ScriptFetchOptions(), TextPosition::MinimumPosition(),
ASSERT_NO_EXCEPTION);
ASSERT_FALSE(module.IsEmpty()); ASSERT_FALSE(module.IsEmpty());
} }
TEST_P(ModuleRecordTest, compileFail) { TEST_P(ModuleRecordTest, compileFail) {
V8TestingScope scope; V8TestingScope scope;
const KURL js_url("https://example.com/foo.js"); const KURL js_url("https://example.com/foo.js");
v8::Local<v8::Module> module = ModuleRecord::Compile( v8::Local<v8::Module> module = ModuleTestBase::CompileModule(
scope.GetIsolate(), "123 = 456", js_url, js_url, ScriptFetchOptions(), scope.GetIsolate(), "123 = 456", js_url, scope.GetExceptionState());
TextPosition::MinimumPosition(), scope.GetExceptionState());
ASSERT_TRUE(module.IsEmpty()); ASSERT_TRUE(module.IsEmpty());
EXPECT_TRUE(scope.GetExceptionState().HadException()); EXPECT_TRUE(scope.GetExceptionState().HadException());
} }
...@@ -134,10 +131,9 @@ TEST_P(ModuleRecordTest, compileFail) { ...@@ -134,10 +131,9 @@ TEST_P(ModuleRecordTest, compileFail) {
TEST_P(ModuleRecordTest, moduleRequests) { TEST_P(ModuleRecordTest, moduleRequests) {
V8TestingScope scope; V8TestingScope scope;
const KURL js_url("https://example.com/foo.js"); const KURL js_url("https://example.com/foo.js");
v8::Local<v8::Module> module = ModuleRecord::Compile( v8::Local<v8::Module> module = ModuleTestBase::CompileModule(
scope.GetIsolate(), "import 'a'; import 'b'; export const c = 'c';", scope.GetIsolate(), "import 'a'; import 'b'; export const c = 'c';",
js_url, js_url, ScriptFetchOptions(), TextPosition::MinimumPosition(), js_url);
ASSERT_NO_EXCEPTION);
ASSERT_FALSE(module.IsEmpty()); ASSERT_FALSE(module.IsEmpty());
auto requests = ModuleRecord::ModuleRequests(scope.GetScriptState(), module); auto requests = ModuleRecord::ModuleRequests(scope.GetScriptState(), module);
...@@ -154,10 +150,8 @@ TEST_P(ModuleRecordTest, instantiateNoDeps) { ...@@ -154,10 +150,8 @@ TEST_P(ModuleRecordTest, instantiateNoDeps) {
auto* resolver = modulator->GetTestModuleRecordResolver(); auto* resolver = modulator->GetTestModuleRecordResolver();
const KURL js_url("https://example.com/foo.js"); const KURL js_url("https://example.com/foo.js");
v8::Local<v8::Module> module = ModuleRecord::Compile( v8::Local<v8::Module> module = ModuleTestBase::CompileModule(
scope.GetIsolate(), "export const a = 42;", js_url, js_url, scope.GetIsolate(), "export const a = 42;", js_url);
ScriptFetchOptions(), TextPosition::MinimumPosition(),
ASSERT_NO_EXCEPTION);
ASSERT_FALSE(module.IsEmpty()); ASSERT_FALSE(module.IsEmpty());
ScriptValue exception = ScriptValue exception =
ModuleRecord::Instantiate(scope.GetScriptState(), module, js_url); ModuleRecord::Instantiate(scope.GetScriptState(), module, js_url);
...@@ -174,26 +168,21 @@ TEST_P(ModuleRecordTest, instantiateWithDeps) { ...@@ -174,26 +168,21 @@ TEST_P(ModuleRecordTest, instantiateWithDeps) {
auto* resolver = modulator->GetTestModuleRecordResolver(); auto* resolver = modulator->GetTestModuleRecordResolver();
const KURL js_url_a("https://example.com/a.js"); const KURL js_url_a("https://example.com/a.js");
v8::Local<v8::Module> module_a = ModuleRecord::Compile( v8::Local<v8::Module> module_a = ModuleTestBase::CompileModule(
scope.GetIsolate(), "export const a = 'a';", js_url_a, js_url_a, scope.GetIsolate(), "export const a = 'a';", js_url_a);
ScriptFetchOptions(), TextPosition::MinimumPosition(),
ASSERT_NO_EXCEPTION);
ASSERT_FALSE(module_a.IsEmpty()); ASSERT_FALSE(module_a.IsEmpty());
resolver->PrepareMockResolveResult(module_a); resolver->PrepareMockResolveResult(module_a);
const KURL js_url_b("https://example.com/b.js"); const KURL js_url_b("https://example.com/b.js");
v8::Local<v8::Module> module_b = ModuleRecord::Compile( v8::Local<v8::Module> module_b = ModuleTestBase::CompileModule(
scope.GetIsolate(), "export const b = 'b';", js_url_b, js_url_b, scope.GetIsolate(), "export const b = 'b';", js_url_b);
ScriptFetchOptions(), TextPosition::MinimumPosition(),
ASSERT_NO_EXCEPTION);
ASSERT_FALSE(module_b.IsEmpty()); ASSERT_FALSE(module_b.IsEmpty());
resolver->PrepareMockResolveResult(module_b); resolver->PrepareMockResolveResult(module_b);
const KURL js_url_c("https://example.com/c.js"); const KURL js_url_c("https://example.com/c.js");
v8::Local<v8::Module> module = ModuleRecord::Compile( v8::Local<v8::Module> module = ModuleTestBase::CompileModule(
scope.GetIsolate(), "import 'a'; import 'b'; export const c = 123;", scope.GetIsolate(), "import 'a'; import 'b'; export const c = 123;",
js_url_c, js_url_c, ScriptFetchOptions(), TextPosition::MinimumPosition(), js_url_c);
ASSERT_NO_EXCEPTION);
ASSERT_FALSE(module.IsEmpty()); ASSERT_FALSE(module.IsEmpty());
ScriptValue exception = ScriptValue exception =
ModuleRecord::Instantiate(scope.GetScriptState(), module, js_url_c); ModuleRecord::Instantiate(scope.GetScriptState(), module, js_url_c);
...@@ -212,10 +201,8 @@ TEST_P(ModuleRecordTest, EvaluationErrorIsRemembered) { ...@@ -212,10 +201,8 @@ TEST_P(ModuleRecordTest, EvaluationErrorIsRemembered) {
auto* resolver = modulator->GetTestModuleRecordResolver(); auto* resolver = modulator->GetTestModuleRecordResolver();
const KURL js_url_f("https://example.com/failure.js"); const KURL js_url_f("https://example.com/failure.js");
v8::Local<v8::Module> module_failure = ModuleRecord::Compile( v8::Local<v8::Module> module_failure = ModuleTestBase::CompileModule(
scope.GetIsolate(), "nonexistent_function()", js_url_f, js_url_f, scope.GetIsolate(), "nonexistent_function()", js_url_f);
ScriptFetchOptions(), TextPosition::MinimumPosition(),
ASSERT_NO_EXCEPTION);
ASSERT_FALSE(module_failure.IsEmpty()); ASSERT_FALSE(module_failure.IsEmpty());
ASSERT_TRUE( ASSERT_TRUE(
ModuleRecord::Instantiate(state, module_failure, js_url_f).IsEmpty()); ModuleRecord::Instantiate(state, module_failure, js_url_f).IsEmpty());
...@@ -226,9 +213,8 @@ TEST_P(ModuleRecordTest, EvaluationErrorIsRemembered) { ...@@ -226,9 +213,8 @@ TEST_P(ModuleRecordTest, EvaluationErrorIsRemembered) {
resolver->PrepareMockResolveResult(module_failure); resolver->PrepareMockResolveResult(module_failure);
const KURL js_url_c("https://example.com/c.js"); const KURL js_url_c("https://example.com/c.js");
v8::Local<v8::Module> module = ModuleRecord::Compile( v8::Local<v8::Module> module = ModuleTestBase::CompileModule(
scope.GetIsolate(), "import 'failure'; export const c = 123;", js_url_c, scope.GetIsolate(), "import 'failure'; export const c = 123;", js_url_c,
js_url_c, ScriptFetchOptions(), TextPosition::MinimumPosition(),
scope.GetExceptionState()); scope.GetExceptionState());
ASSERT_FALSE(module.IsEmpty()); ASSERT_FALSE(module.IsEmpty());
ASSERT_TRUE(ModuleRecord::Instantiate(state, module, js_url_c).IsEmpty()); ASSERT_TRUE(ModuleRecord::Instantiate(state, module, js_url_c).IsEmpty());
...@@ -253,10 +239,8 @@ TEST_P(ModuleRecordTest, Evaluate) { ...@@ -253,10 +239,8 @@ TEST_P(ModuleRecordTest, Evaluate) {
MakeGarbageCollected<ModuleRecordTestModulator>(scope.GetScriptState()); MakeGarbageCollected<ModuleRecordTestModulator>(scope.GetScriptState());
const KURL js_url("https://example.com/foo.js"); const KURL js_url("https://example.com/foo.js");
v8::Local<v8::Module> module = ModuleRecord::Compile( v8::Local<v8::Module> module = ModuleTestBase::CompileModule(
scope.GetIsolate(), "export const a = 42; window.foo = 'bar';", js_url, scope.GetIsolate(), "export const a = 42; window.foo = 'bar';", js_url);
js_url, ScriptFetchOptions(), TextPosition::MinimumPosition(),
ASSERT_NO_EXCEPTION);
ASSERT_FALSE(module.IsEmpty()); ASSERT_FALSE(module.IsEmpty());
ScriptValue exception = ScriptValue exception =
ModuleRecord::Instantiate(scope.GetScriptState(), module, js_url); ModuleRecord::Instantiate(scope.GetScriptState(), module, js_url);
...@@ -289,9 +273,8 @@ TEST_P(ModuleRecordTest, EvaluateCaptureError) { ...@@ -289,9 +273,8 @@ TEST_P(ModuleRecordTest, EvaluateCaptureError) {
MakeGarbageCollected<ModuleRecordTestModulator>(scope.GetScriptState()); MakeGarbageCollected<ModuleRecordTestModulator>(scope.GetScriptState());
const KURL js_url("https://example.com/foo.js"); const KURL js_url("https://example.com/foo.js");
v8::Local<v8::Module> module = ModuleRecord::Compile( v8::Local<v8::Module> module =
scope.GetIsolate(), "throw 'bar';", js_url, js_url, ScriptFetchOptions(), ModuleTestBase::CompileModule(scope.GetIsolate(), "throw 'bar';", js_url);
TextPosition::MinimumPosition(), ASSERT_NO_EXCEPTION);
ASSERT_FALSE(module.IsEmpty()); ASSERT_FALSE(module.IsEmpty());
ScriptValue instantiation_exception = ScriptValue instantiation_exception =
ModuleRecord::Instantiate(scope.GetScriptState(), module, js_url); ModuleRecord::Instantiate(scope.GetScriptState(), module, js_url);
......
...@@ -58,10 +58,8 @@ class LayoutWorkletTest : public PageTestBase, public ParametrizedModuleTest { ...@@ -58,10 +58,8 @@ class LayoutWorkletTest : public PageTestBase, public ParametrizedModuleTest {
EXPECT_TRUE(script_state); EXPECT_TRUE(script_state);
KURL js_url("https://example.com/worklet.js"); KURL js_url("https://example.com/worklet.js");
v8::Local<v8::Module> module = ModuleRecord::Compile( v8::Local<v8::Module> module = ModuleTestBase::CompileModule(
script_state->GetIsolate(), source_code, js_url, js_url, script_state->GetIsolate(), source_code, js_url);
ScriptFetchOptions(), TextPosition::MinimumPosition(),
ASSERT_NO_EXCEPTION);
EXPECT_FALSE(module.IsEmpty()); EXPECT_FALSE(module.IsEmpty());
ScriptValue exception = ScriptValue exception =
......
...@@ -19,6 +19,7 @@ ...@@ -19,6 +19,7 @@
#include "third_party/blink/renderer/core/script/js_module_script.h" #include "third_party/blink/renderer/core/script/js_module_script.h"
#include "third_party/blink/renderer/core/script/modulator.h" #include "third_party/blink/renderer/core/script/modulator.h"
#include "third_party/blink/renderer/core/testing/dummy_modulator.h" #include "third_party/blink/renderer/core/testing/dummy_modulator.h"
#include "third_party/blink/renderer/core/testing/module_test_base.h"
#include "third_party/blink/renderer/core/testing/page_test_base.h" #include "third_party/blink/renderer/core/testing/page_test_base.h"
#include "third_party/blink/renderer/platform/bindings/script_state.h" #include "third_party/blink/renderer/platform/bindings/script_state.h"
#include "third_party/blink/renderer/platform/bindings/v8_throw_exception.h" #include "third_party/blink/renderer/platform/bindings/v8_throw_exception.h"
...@@ -58,7 +59,7 @@ class TestModuleTreeClient final : public ModuleTreeClient { ...@@ -58,7 +59,7 @@ class TestModuleTreeClient final : public ModuleTreeClient {
class ModuleTreeLinkerTestModulator final : public DummyModulator { class ModuleTreeLinkerTestModulator final : public DummyModulator {
public: public:
ModuleTreeLinkerTestModulator(ScriptState* script_state) explicit ModuleTreeLinkerTestModulator(ScriptState* script_state)
: script_state_(script_state) {} : script_state_(script_state) {}
~ModuleTreeLinkerTestModulator() override = default; ~ModuleTreeLinkerTestModulator() override = default;
...@@ -81,10 +82,8 @@ class ModuleTreeLinkerTestModulator final : public DummyModulator { ...@@ -81,10 +82,8 @@ class ModuleTreeLinkerTestModulator final : public DummyModulator {
} }
source_text.Append("export default 'grapes';"); source_text.Append("export default 'grapes';");
v8::Local<v8::Module> module_record = ModuleRecord::Compile( v8::Local<v8::Module> module_record = ModuleTestBase::CompileModule(
script_state_->GetIsolate(), source_text.ToString(), url, url, script_state_->GetIsolate(), source_text.ToString(), url);
ScriptFetchOptions(), TextPosition::MinimumPosition(),
ASSERT_NO_EXCEPTION);
auto* module_script = auto* module_script =
JSModuleScript::CreateForTest(this, module_record, url); JSModuleScript::CreateForTest(this, module_record, url);
......
...@@ -231,10 +231,8 @@ TEST_P(DynamicModuleResolverTest, ResolveSuccess) { ...@@ -231,10 +231,8 @@ TEST_P(DynamicModuleResolverTest, ResolveSuccess) {
v8::MicrotasksScope::PerformCheckpoint(scope.GetIsolate()); v8::MicrotasksScope::PerformCheckpoint(scope.GetIsolate());
EXPECT_FALSE(capture->WasCalled()); EXPECT_FALSE(capture->WasCalled());
v8::Local<v8::Module> record = ModuleRecord::Compile( v8::Local<v8::Module> record = ModuleTestBase::CompileModule(
scope.GetIsolate(), "export const foo = 'hello';", TestReferrerURL(), scope.GetIsolate(), "export const foo = 'hello';", TestReferrerURL());
TestReferrerURL(), ScriptFetchOptions(), TextPosition::MinimumPosition(),
ASSERT_NO_EXCEPTION);
ModuleScript* module_script = ModuleScript* module_script =
JSModuleScript::CreateForTest(modulator, record, TestDependencyURL()); JSModuleScript::CreateForTest(modulator, record, TestDependencyURL());
EXPECT_TRUE(ModuleRecord::Instantiate(scope.GetScriptState(), record, EXPECT_TRUE(ModuleRecord::Instantiate(scope.GetScriptState(), record,
...@@ -325,10 +323,8 @@ TEST_P(DynamicModuleResolverTest, ExceptionThrown) { ...@@ -325,10 +323,8 @@ TEST_P(DynamicModuleResolverTest, ExceptionThrown) {
EXPECT_FALSE(capture->WasCalled()); EXPECT_FALSE(capture->WasCalled());
v8::Local<v8::Module> record = ModuleRecord::Compile( v8::Local<v8::Module> record = ModuleTestBase::CompileModule(
scope.GetIsolate(), "throw Error('bar')", TestReferrerURL(), scope.GetIsolate(), "throw Error('bar')", TestReferrerURL());
TestReferrerURL(), ScriptFetchOptions(), TextPosition::MinimumPosition(),
ASSERT_NO_EXCEPTION);
ModuleScript* module_script = ModuleScript* module_script =
JSModuleScript::CreateForTest(modulator, record, TestDependencyURL()); JSModuleScript::CreateForTest(modulator, record, TestDependencyURL());
EXPECT_TRUE(ModuleRecord::Instantiate(scope.GetScriptState(), record, EXPECT_TRUE(ModuleRecord::Instantiate(scope.GetScriptState(), record,
...@@ -367,10 +363,8 @@ TEST_P(DynamicModuleResolverTest, ResolveWithNullReferrerScriptSuccess) { ...@@ -367,10 +363,8 @@ TEST_P(DynamicModuleResolverTest, ResolveWithNullReferrerScriptSuccess) {
v8::MicrotasksScope::PerformCheckpoint(scope.GetIsolate()); v8::MicrotasksScope::PerformCheckpoint(scope.GetIsolate());
EXPECT_FALSE(capture->WasCalled()); EXPECT_FALSE(capture->WasCalled());
v8::Local<v8::Module> record = ModuleRecord::Compile( v8::Local<v8::Module> record = ModuleTestBase::CompileModule(
scope.GetIsolate(), "export const foo = 'hello';", TestDependencyURL(), scope.GetIsolate(), "export const foo = 'hello';", TestDependencyURL());
TestDependencyURL(), ScriptFetchOptions(),
TextPosition::MinimumPosition(), ASSERT_NO_EXCEPTION);
ModuleScript* module_script = ModuleScript* module_script =
JSModuleScript::CreateForTest(modulator, record, TestDependencyURL()); JSModuleScript::CreateForTest(modulator, record, TestDependencyURL());
EXPECT_TRUE(ModuleRecord::Instantiate(scope.GetScriptState(), record, EXPECT_TRUE(ModuleRecord::Instantiate(scope.GetScriptState(), record,
......
...@@ -75,10 +75,8 @@ ModuleScript* ModuleRecordResolverImplTestModulator::GetFetchedModuleScript( ...@@ -75,10 +75,8 @@ ModuleScript* ModuleRecordResolverImplTestModulator::GetFetchedModuleScript(
ModuleScript* CreateReferrerModuleScript(Modulator* modulator, ModuleScript* CreateReferrerModuleScript(Modulator* modulator,
V8TestingScope& scope) { V8TestingScope& scope) {
KURL js_url("https://example.com/referrer.js"); KURL js_url("https://example.com/referrer.js");
v8::Local<v8::Module> referrer_record = ModuleRecord::Compile( v8::Local<v8::Module> referrer_record = ModuleTestBase::CompileModule(
scope.GetIsolate(), "import './target.js'; export const a = 42;", js_url, scope.GetIsolate(), "import './target.js'; export const a = 42;", js_url);
js_url, ScriptFetchOptions(), TextPosition::MinimumPosition(),
ASSERT_NO_EXCEPTION);
KURL referrer_url("https://example.com/referrer.js"); KURL referrer_url("https://example.com/referrer.js");
auto* referrer_module_script = auto* referrer_module_script =
JSModuleScript::CreateForTest(modulator, referrer_record, referrer_url); JSModuleScript::CreateForTest(modulator, referrer_record, referrer_url);
...@@ -89,10 +87,8 @@ ModuleScript* CreateTargetModuleScript(Modulator* modulator, ...@@ -89,10 +87,8 @@ ModuleScript* CreateTargetModuleScript(Modulator* modulator,
V8TestingScope& scope, V8TestingScope& scope,
bool has_parse_error = false) { bool has_parse_error = false) {
KURL js_url("https://example.com/target.js"); KURL js_url("https://example.com/target.js");
v8::Local<v8::Module> record = ModuleRecord::Compile( v8::Local<v8::Module> record = ModuleTestBase::CompileModule(
scope.GetIsolate(), "export const pi = 3.14;", js_url, js_url, scope.GetIsolate(), "export const pi = 3.14;", js_url);
ScriptFetchOptions(), TextPosition::MinimumPosition(),
ASSERT_NO_EXCEPTION);
KURL url("https://example.com/target.js"); KURL url("https://example.com/target.js");
auto* module_script = JSModuleScript::CreateForTest(modulator, record, url); auto* module_script = JSModuleScript::CreateForTest(modulator, record, url);
if (has_parse_error) { if (has_parse_error) {
......
...@@ -3,12 +3,34 @@ ...@@ -3,12 +3,34 @@
// found in the LICENSE file. // found in the LICENSE file.
#include "third_party/blink/renderer/core/testing/module_test_base.h" #include "third_party/blink/renderer/core/testing/module_test_base.h"
#include "third_party/blink/renderer/bindings/core/v8/module_record.h"
#include "third_party/blink/renderer/bindings/core/v8/script_function.h" #include "third_party/blink/renderer/bindings/core/v8/script_function.h"
#include "third_party/blink/renderer/bindings/core/v8/script_promise.h" #include "third_party/blink/renderer/bindings/core/v8/script_promise.h"
#include "third_party/blink/renderer/bindings/core/v8/script_value.h" #include "third_party/blink/renderer/bindings/core/v8/script_value.h"
#include "third_party/blink/renderer/core/loader/modulescript/module_script_creation_params.h"
#include "third_party/blink/renderer/platform/bindings/exception_state.h"
#include "third_party/blink/renderer/platform/loader/fetch/script_fetch_options.h"
namespace blink { namespace blink {
v8::Local<v8::Module> ModuleTestBase::CompileModule(
v8::Isolate* isolate,
const char* source,
const KURL& url,
ExceptionState& exception_state) {
return CompileModule(isolate, String(source), url, exception_state);
}
v8::Local<v8::Module> ModuleTestBase::CompileModule(
v8::Isolate* isolate,
String source,
const KURL& url,
ExceptionState& exception_state) {
return ModuleRecord::Compile(isolate, source, url, url, ScriptFetchOptions(),
TextPosition::MinimumPosition(),
exception_state);
}
void ParametrizedModuleTestBase::SetUp(bool use_top_level_await) { void ParametrizedModuleTestBase::SetUp(bool use_top_level_await) {
if (use_top_level_await) { if (use_top_level_await) {
feature_list_.InitAndEnableFeature(features::kTopLevelAwait); feature_list_.InitAndEnableFeature(features::kTopLevelAwait);
......
...@@ -9,12 +9,28 @@ ...@@ -9,12 +9,28 @@
#include "base/test/scoped_feature_list.h" #include "base/test/scoped_feature_list.h"
#include "third_party/blink/public/common/features.h" #include "third_party/blink/public/common/features.h"
#include "third_party/blink/renderer/bindings/core/v8/script_evaluation_result.h" #include "third_party/blink/renderer/bindings/core/v8/script_evaluation_result.h"
#include "third_party/blink/renderer/platform/bindings/exception_state.h"
#include "third_party/blink/renderer/platform/weborigin/kurl.h"
#include "v8/include/v8.h" #include "v8/include/v8.h"
namespace blink { namespace blink {
class ModuleTestBase {
public:
static v8::Local<v8::Module> CompileModule(
v8::Isolate*,
const char*,
const KURL&,
ExceptionState& state = DummyExceptionStateForTesting().ReturnThis());
static v8::Local<v8::Module> CompileModule(
v8::Isolate*,
String,
const KURL&,
ExceptionState& state = DummyExceptionStateForTesting().ReturnThis());
};
// Helper used to enable or disable top-level await in parametrized tests. // Helper used to enable or disable top-level await in parametrized tests.
class ParametrizedModuleTestBase { class ParametrizedModuleTestBase : public ModuleTestBase {
protected: protected:
void SetUp(bool use_top_level_await); void SetUp(bool use_top_level_await);
void TearDown() {} void TearDown() {}
......
...@@ -23,6 +23,7 @@ ...@@ -23,6 +23,7 @@
#include "third_party/blink/renderer/bindings/core/v8/worker_or_worklet_script_controller.h" #include "third_party/blink/renderer/bindings/core/v8/worker_or_worklet_script_controller.h"
#include "third_party/blink/renderer/core/frame/local_dom_window.h" #include "third_party/blink/renderer/core/frame/local_dom_window.h"
#include "third_party/blink/renderer/core/inspector/worker_devtools_params.h" #include "third_party/blink/renderer/core/inspector/worker_devtools_params.h"
#include "third_party/blink/renderer/core/loader/modulescript/module_script_creation_params.h"
#include "third_party/blink/renderer/core/messaging/message_channel.h" #include "third_party/blink/renderer/core/messaging/message_channel.h"
#include "third_party/blink/renderer/core/messaging/message_port.h" #include "third_party/blink/renderer/core/messaging/message_port.h"
#include "third_party/blink/renderer/core/origin_trials/origin_trial_context.h" #include "third_party/blink/renderer/core/origin_trials/origin_trial_context.h"
...@@ -148,10 +149,8 @@ class AudioWorkletGlobalScopeTest : public PageTestBase, ...@@ -148,10 +149,8 @@ class AudioWorkletGlobalScopeTest : public PageTestBase,
global_scope->ScriptController()->GetScriptState(); global_scope->ScriptController()->GetScriptState();
EXPECT_TRUE(script_state); EXPECT_TRUE(script_state);
KURL js_url("https://example.com/worklet.js"); KURL js_url("https://example.com/worklet.js");
v8::Local<v8::Module> module = ModuleRecord::Compile( v8::Local<v8::Module> module = ModuleTestBase::CompileModule(
script_state->GetIsolate(), source_code, js_url, js_url, script_state->GetIsolate(), source_code, js_url);
ScriptFetchOptions(), TextPosition::MinimumPosition(),
ASSERT_NO_EXCEPTION);
EXPECT_FALSE(module.IsEmpty()); EXPECT_FALSE(module.IsEmpty());
ScriptValue exception = ScriptValue exception =
ModuleRecord::Instantiate(script_state, module, js_url); ModuleRecord::Instantiate(script_state, module, js_url);
......
...@@ -120,10 +120,8 @@ class AudioWorkletThreadTestBase : public PageTestBase, ...@@ -120,10 +120,8 @@ class AudioWorkletThreadTestBase : public PageTestBase,
EXPECT_TRUE(script_state); EXPECT_TRUE(script_state);
ScriptState::Scope scope(script_state); ScriptState::Scope scope(script_state);
KURL js_url("https://example.com/worklet.js"); KURL js_url("https://example.com/worklet.js");
v8::Local<v8::Module> module = ModuleRecord::Compile( v8::Local<v8::Module> module = ModuleTestBase::CompileModule(
script_state->GetIsolate(), "var counter = 0; ++counter;", js_url, script_state->GetIsolate(), "var counter = 0; ++counter;", js_url);
js_url, ScriptFetchOptions(), TextPosition::MinimumPosition(),
ASSERT_NO_EXCEPTION);
EXPECT_FALSE(module.IsEmpty()); EXPECT_FALSE(module.IsEmpty());
ScriptValue exception = ScriptValue exception =
ModuleRecord::Instantiate(script_state, module, js_url); ModuleRecord::Instantiate(script_state, module, js_url);
......
...@@ -82,10 +82,8 @@ class AnimationAndPaintWorkletThreadTest : public PageTestBase, ...@@ -82,10 +82,8 @@ class AnimationAndPaintWorkletThreadTest : public PageTestBase,
EXPECT_TRUE(script_state); EXPECT_TRUE(script_state);
ScriptState::Scope scope(script_state); ScriptState::Scope scope(script_state);
const KURL js_url("https://example.com/foo.js"); const KURL js_url("https://example.com/foo.js");
v8::Local<v8::Module> module = ModuleRecord::Compile( v8::Local<v8::Module> module = ModuleTestBase::CompileModule(
script_state->GetIsolate(), "var counter = 0; ++counter;", js_url, script_state->GetIsolate(), "var counter = 0; ++counter;", js_url);
js_url, ScriptFetchOptions(), TextPosition::MinimumPosition(),
ASSERT_NO_EXCEPTION);
EXPECT_FALSE(module.IsEmpty()); EXPECT_FALSE(module.IsEmpty());
ScriptValue exception = ScriptValue exception =
ModuleRecord::Instantiate(script_state, module, js_url); ModuleRecord::Instantiate(script_state, module, js_url);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment