I'm trying to test a JS Module that creates a new object that's been 
registered from the C++ side but it fails on evaluation with:
Reference Error: TestObj is not defined.

I can run a script that does essentially the same thing as the module and 
it's able to run successfully and trigger the C++ function for the 
construction of the object.

Here's the test code

v8::HandleScope handleScope(m_Isolate);
JSContext *jsContext = m_Context.lock().get();
WeakJSModulesPtr weakJSModules = jsContext->GetModules();
JSModules *jsModules = weakJSModules.lock().get();

JSModulesTestInternal::TestObject::BuildObjectTemplate(m_Isolate);

const char source[] = R"script(
let obj = new TestObject();
)script";
v8::Local<v8::String> v8Source = JSUtilities::StringToV8(m_Isolate, source);
EXPECT_FALSE(v8Source.IsEmpty());

v8::TryCatch tryCatch(m_Isolate);

v8::Local<v8::Script> script = v8::Script::Compile(jsContext->GetContext(), 
v8Source).ToLocalChecked();
script->Run(jsContext->GetContext());
if (tryCatch.HasCaught())
{
std::string error = JSUtilities::GetStackTrace(m_Isolate, tryCatch);
std::cout << "Script Error: " << error << std::endl;
ASSERT_TRUE(false);
}

EXPECT_NE(nullptr, JSModulesTestInternal::constructerCreatedObjectTest);
JSModulesTestInternal::constructerCreatedObjectTest) = nullptr;

//test that module can't be instantiate cause imported module isn't loaded
v8::Local<v8::Module> root;
v8::MaybeLocal<v8::Module> maybeRoot = jsModules->LoadModule("root.mjs");
EXPECT_TRUE(maybeRoot.ToLocal(&root));
ASSERT_FALSE(root.IsEmpty());

EXPECT_TRUE(jsModules->InstantiateModule(root));

EXPECT_TRUE(jsModules->RunModule(root)); // Fails here.

ASSERT_NE(nullptr, JSModulesTestInternal::constructerCreatedObjectTest);

EXPECT_EQ(5, 
JSModulesTestInternal::constructerCreatedObjectTest->GetValue());

Here's the modules code
import rootImport from 'sub-dir/rootImport'

let obj = new TestObj();
obj.value = 5;


-- 
-- 
v8-users mailing list
v8-users@googlegroups.com
http://groups.google.com/group/v8-users
--- 
You received this message because you are subscribed to the Google Groups 
"v8-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to v8-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/v8-users/fbbc9546-d83a-4195-983a-db773d6a1745n%40googlegroups.com.

Reply via email to