@@ -123,6 +123,7 @@ TEST_F(SensingBlocksTest, RegisterBlocks)
123123 // Blocks
124124 EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " sensing_distanceto" , &SensingBlocks::compileDistanceTo));
125125 EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " sensing_askandwait" , &SensingBlocks::compileAskAndWait));
126+ EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " sensing_answer" , &SensingBlocks::compileAnswer));
126127 EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " sensing_keypressed" , &SensingBlocks::compileKeyPressed));
127128 EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " sensing_mousedown" , &SensingBlocks::compileMouseDown));
128129 EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " sensing_mousex" , &SensingBlocks::compileMouseX));
@@ -343,12 +344,31 @@ TEST_F(SensingBlocksTest, AskAndWait)
343344 ASSERT_EQ (compiler.constValues ()[0 ].toString (), " test" );
344345}
345346
346- TEST_F (SensingBlocksTest, AskAndWaitImpl)
347+ TEST_F (SensingBlocksTest, Answer)
348+ {
349+ Compiler compiler (&m_engineMock);
350+
351+ auto block = std::make_shared<Block>(" a" , " sensing_answer" );
352+
353+ compiler.init ();
354+
355+ EXPECT_CALL (m_engineMock, functionIndex (&SensingBlocks::answer)).WillOnce (Return (0 ));
356+ compiler.setBlock (block);
357+ SensingBlocks::compileAnswer (&compiler);
358+
359+ compiler.end ();
360+
361+ ASSERT_EQ (compiler.bytecode (), std::vector<unsigned int >({ vm::OP_START, vm::OP_EXEC, 0 , vm::OP_HALT }));
362+ ASSERT_TRUE (compiler.constValues ().empty ());
363+ }
364+
365+ TEST_F (SensingBlocksTest, AskAndWaitAndAnswerImpl)
347366{
348367 static unsigned int bytecode1[] = { vm::OP_START, vm::OP_CONST, 0 , vm::OP_EXEC, 0 , vm::OP_HALT };
349368 static unsigned int bytecode2[] = { vm::OP_START, vm::OP_CONST, 1 , vm::OP_EXEC, 0 , vm::OP_HALT };
350369 static unsigned int bytecode3[] = { vm::OP_START, vm::OP_CONST, 2 , vm::OP_EXEC, 0 , vm::OP_HALT };
351- static BlockFunc functions[] = { &SensingBlocks::askAndWait };
370+ static unsigned int bytecode4[] = { vm::OP_START, vm::OP_EXEC, 1 , vm::OP_HALT };
371+ static BlockFunc functions[] = { &SensingBlocks::askAndWait, &SensingBlocks::answer };
352372 static Value constValues[] = { " test1" , " test2" , " test3" };
353373
354374 Sprite sprite;
@@ -415,19 +435,40 @@ TEST_F(SensingBlocksTest, AskAndWaitImpl)
415435 ASSERT_EQ (sprite.bubbleType (), Target::BubbleType::Say);
416436 ASSERT_EQ (sprite.bubbleText (), " test2" );
417437
438+ vm1.reset ();
439+ vm1.setBytecode (bytecode4);
440+ vm1.run ();
441+ ASSERT_EQ (vm1.registerCount (), 1 );
442+ ASSERT_EQ (vm1.getInput (0 , 1 )->toString (), " hi" );
443+
418444 EXPECT_CALL (m_engineMock, questionAsked ()).WillOnce (ReturnRef (asked));
419445 EXPECT_CALL (spy, asked (" test3" ));
420446 SensingBlocks::onAnswer (" hello" );
421447 ASSERT_TRUE (sprite.bubbleText ().empty ());
422448
449+ vm1.reset ();
450+ vm1.run ();
451+ ASSERT_EQ (vm1.registerCount (), 1 );
452+ ASSERT_EQ (vm1.getInput (0 , 1 )->toString (), " hello" );
453+
423454 EXPECT_CALL (m_engineMock, questionAsked ()).WillOnce (ReturnRef (asked));
424455 EXPECT_CALL (spy, asked (" test2" ));
425456 SensingBlocks::onAnswer (" world" );
426457 ASSERT_TRUE (sprite.bubbleText ().empty ());
427458 ASSERT_TRUE (stage.bubbleText ().empty ());
428459
460+ vm1.reset ();
461+ vm1.run ();
462+ ASSERT_EQ (vm1.registerCount (), 1 );
463+ ASSERT_EQ (vm1.getInput (0 , 1 )->toString (), " world" );
464+
429465 EXPECT_CALL (m_engineMock, questionAsked).Times (0 );
430466 SensingBlocks::onAnswer (" test" );
467+
468+ vm1.reset ();
469+ vm1.run ();
470+ ASSERT_EQ (vm1.registerCount (), 1 );
471+ ASSERT_EQ (vm1.getInput (0 , 1 )->toString (), " test" );
431472}
432473
433474TEST_F (SensingBlocksTest, KeyPressed)
0 commit comments