|
2 | 2 | #include <scratchcpp/block.h> |
3 | 3 | #include <scratchcpp/input.h> |
4 | 4 | #include <penlayer.h> |
| 5 | +#include <spritemodel.h> |
5 | 6 | #include <blocks/penblocks.h> |
6 | 7 | #include <enginemock.h> |
7 | 8 | #include <penlayermock.h> |
@@ -44,6 +45,7 @@ TEST_F(PenBlocksTest, RegisterBlocks) |
44 | 45 | { |
45 | 46 | // Blocks |
46 | 47 | EXPECT_CALL(m_engineMock, addCompileFunction(m_section.get(), "pen_clear", &PenBlocks::compileClear)); |
| 48 | + EXPECT_CALL(m_engineMock, addCompileFunction(m_section.get(), "pen_penDown", &PenBlocks::compilePenDown)); |
47 | 49 |
|
48 | 50 | m_section->registerBlocks(&m_engineMock); |
49 | 51 | } |
@@ -84,3 +86,44 @@ TEST_F(PenBlocksTest, ClearImpl) |
84 | 86 |
|
85 | 87 | ASSERT_EQ(vm.registerCount(), 0); |
86 | 88 | } |
| 89 | + |
| 90 | +TEST_F(PenBlocksTest, PenDown) |
| 91 | +{ |
| 92 | + Compiler compiler(&m_engineMock); |
| 93 | + |
| 94 | + auto block = std::make_shared<Block>("a", "pen_penDown"); |
| 95 | + |
| 96 | + EXPECT_CALL(m_engineMock, functionIndex(&PenBlocks::penDown)).WillOnce(Return(2)); |
| 97 | + compiler.init(); |
| 98 | + compiler.setBlock(block); |
| 99 | + PenBlocks::compilePenDown(&compiler); |
| 100 | + compiler.end(); |
| 101 | + |
| 102 | + ASSERT_EQ(compiler.bytecode(), std::vector<unsigned int>({ vm::OP_START, vm::OP_EXEC, 2, vm::OP_HALT })); |
| 103 | + ASSERT_TRUE(compiler.constValues().empty()); |
| 104 | + ASSERT_TRUE(compiler.variables().empty()); |
| 105 | + ASSERT_TRUE(compiler.lists().empty()); |
| 106 | +} |
| 107 | + |
| 108 | +TEST_F(PenBlocksTest, PenDownImpl) |
| 109 | +{ |
| 110 | + static unsigned int bytecode[] = { vm::OP_START, vm::OP_EXEC, 0, vm::OP_HALT }; |
| 111 | + static BlockFunc functions[] = { &PenBlocks::penDown }; |
| 112 | + |
| 113 | + SpriteModel model; |
| 114 | + Sprite sprite; |
| 115 | + sprite.setInterface(&model); |
| 116 | + |
| 117 | + VirtualMachine vm(&sprite, &m_engineMock, nullptr); |
| 118 | + vm.setBytecode(bytecode); |
| 119 | + vm.setFunctions(functions); |
| 120 | + |
| 121 | + vm.run(); |
| 122 | + ASSERT_EQ(vm.registerCount(), 0); |
| 123 | + ASSERT_TRUE(model.penDown()); |
| 124 | + |
| 125 | + vm.reset(); |
| 126 | + vm.run(); |
| 127 | + ASSERT_EQ(vm.registerCount(), 0); |
| 128 | + ASSERT_TRUE(model.penDown()); |
| 129 | +} |
0 commit comments