@@ -135,26 +135,56 @@ TEST_F(EngineTest, LuaBuiltIns) {
135135
136136#ifdef SCRIPTX_LANG_JAVASCRIPT
137137TEST_F (EngineTest, JsPromiseTest) {
138- EngineScope scope (engine);
139-
140- int value = 0 ;
141- auto setValue = Function::newFunction ([&value](int val) { value = val; });
142- engine->set (" setValue" , setValue);
143- engine->eval (
144- u8R"(
145- const promise = new Promise((resolve, reject) => {
138+ int value = -1 ;
139+ {
140+ EngineScope scope (engine);
141+ auto setValue = Function::newFunction ([&value](int val) {
142+ // force new line
143+ value = val;
144+ });
145+ engine->set (" setValue" , setValue);
146+ engine->eval (
147+ u8R"(
148+ new Promise((resolve, reject) => {
149+ resolve(0);
150+ }).then(() => {
151+ setValue(0);
152+ new Promise((resolve, reject) => {
146153 resolve(1);
147- });
148-
149- promise.then(num => {
154+ }).then(num => {
150155 setValue(num);
156+ });
151157 });
152158 )" );
159+ }
153160
154161 engine->messageQueue ()->shutdown (true );
155162 engine->messageQueue ()->loopQueue (utils::MessageQueue::LoopType::kLoopAndWait );
156163 EXPECT_EQ (value, 1 );
157164}
165+
166+ TEST_F (EngineTest, JsPromiseTest2) {
167+ int value = -1 ;
168+ {
169+ EngineScope scope (engine);
170+ auto setValue = Function::newFunction ([&value](int val) { value = val; });
171+ engine->set (" setValue" , setValue);
172+ engine->eval (
173+ u8R"(
174+ new Promise((resolve, reject) => {
175+ resolve(0);
176+ }).then(() => {
177+ setValue(0);
178+ throw error(); // throws in promise callback
179+ setValue(1);
180+ });
181+ )" );
182+ }
183+
184+ engine->messageQueue ()->shutdown (true );
185+ engine->messageQueue ()->loopQueue (utils::MessageQueue::LoopType::kLoopAndWait );
186+ EXPECT_EQ (value, 0 );
187+ }
158188#endif
159189
160190} // namespace script::test
0 commit comments