@@ -410,3 +410,65 @@ TEST_F(ControlBlocksTest, Wait)
410410 ASSERT_TRUE (code->isFinished (ctx.get ()));
411411 }
412412}
413+
414+ TEST_F (ControlBlocksTest, WaitUntil)
415+ {
416+ auto target = std::make_shared<Sprite>();
417+
418+ {
419+ ScriptBuilder builder (m_extension.get (), m_engine, target);
420+
421+ builder.addBlock (" control_wait_until" );
422+ builder.addValueInput (" CONDITION" , false );
423+ builder.build ();
424+ m_engine->start ();
425+
426+ m_engine->step ();
427+ ASSERT_TRUE (m_engine->isRunning ());
428+
429+ m_engine->step ();
430+ ASSERT_TRUE (m_engine->isRunning ());
431+ }
432+
433+ m_engine->clear ();
434+ target = std::make_shared<Sprite>();
435+
436+ {
437+ ScriptBuilder builder (m_extension.get (), m_engine, target);
438+
439+ builder.addBlock (" control_wait_until" );
440+ builder.addValueInput (" CONDITION" , true );
441+ builder.build ();
442+ m_engine->start ();
443+
444+ m_engine->step ();
445+ m_engine->step ();
446+ ASSERT_FALSE (m_engine->isRunning ());
447+ }
448+
449+ m_engine->clear ();
450+ target = std::make_shared<Sprite>();
451+
452+ {
453+ ScriptBuilder builder (m_extension.get (), m_engine, target);
454+
455+ builder.addBlock (" control_wait_until" );
456+ auto block = std::make_shared<Block>(" " , " test_condition" );
457+ builder.addObscuredInput (" CONDITION" , block);
458+ builder.build ();
459+
460+ conditionReturnValue = false ;
461+ m_engine->start ();
462+
463+ m_engine->step ();
464+ ASSERT_TRUE (m_engine->isRunning ());
465+
466+ m_engine->step ();
467+ ASSERT_TRUE (m_engine->isRunning ());
468+
469+ conditionReturnValue = true ;
470+ m_engine->step ();
471+ m_engine->step ();
472+ ASSERT_FALSE (m_engine->isRunning ());
473+ }
474+ }
0 commit comments