@@ -92,13 +92,15 @@ TEST_F(EventBlocksTest, RegisterBlocks)
9292 EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " event_broadcastandwait" , &EventBlocks::compileBroadcastAndWait));
9393 EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " event_whenbroadcastreceived" , &EventBlocks::compileWhenBroadcastReceived));
9494 EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " event_whenbackdropswitchesto" , &EventBlocks::compileWhenBackdropSwitchesTo));
95+ EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " event_whenkeypressed" , &EventBlocks::compileWhenKeyPressed));
9596
9697 // Inputs
9798 EXPECT_CALL (m_engineMock, addInput (m_section.get (), " BROADCAST_INPUT" , EventBlocks::BROADCAST_INPUT)).Times (1 );
9899
99100 // Fields
100101 EXPECT_CALL (m_engineMock, addField (m_section.get (), " BROADCAST_OPTION" , EventBlocks::BROADCAST_OPTION));
101102 EXPECT_CALL (m_engineMock, addField (m_section.get (), " BACKDROP" , EventBlocks::BACKDROP));
103+ EXPECT_CALL (m_engineMock, addField (m_section.get (), " KEY_OPTION" , EventBlocks::KEY_OPTION));
102104
103105 m_section->registerBlocks (&m_engineMock);
104106}
@@ -271,3 +273,33 @@ TEST_F(EventBlocksTest, WhenBackdropSwitchesTo)
271273 ASSERT_TRUE (compiler.variables ().empty ());
272274 ASSERT_TRUE (compiler.lists ().empty ());
273275}
276+
277+ TEST_F (EventBlocksTest, WhenKeyPressed)
278+ {
279+ Compiler compiler (&m_engineMock);
280+
281+ // when key "a" pressed
282+ auto block1 = createEventBlock (" a" , " event_whenkeypressed" );
283+ addValueField (block1, " KEY_OPTION" , EventBlocks::KEY_OPTION, " a" );
284+
285+ // when key "left arrow" pressed
286+ auto block2 = createEventBlock (" b" , " event_whenkeypressed" );
287+ addValueField (block2, " KEY_OPTION" , EventBlocks::KEY_OPTION, " left arrow" );
288+
289+ compiler.init ();
290+
291+ EXPECT_CALL (m_engineMock, addKeyPressScript (block1, " a" ));
292+ compiler.setBlock (block1);
293+ EventBlocks::compileWhenKeyPressed (&compiler);
294+
295+ EXPECT_CALL (m_engineMock, addKeyPressScript (block2, " left arrow" ));
296+ compiler.setBlock (block2);
297+ EventBlocks::compileWhenKeyPressed (&compiler);
298+
299+ compiler.end ();
300+
301+ ASSERT_EQ (compiler.bytecode (), std::vector<unsigned int >({ vm::OP_START, vm::OP_HALT }));
302+ ASSERT_TRUE (compiler.constValues ().empty ());
303+ ASSERT_TRUE (compiler.variables ().empty ());
304+ ASSERT_TRUE (compiler.lists ().empty ());
305+ }
0 commit comments