@@ -110,6 +110,7 @@ TEST_F(MotionBlocksTest, RegisterBlocks)
110
110
EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " motion_setx" , &MotionBlocks::compileSetX));
111
111
EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " motion_changeyby" , &MotionBlocks::compileChangeYBy));
112
112
EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " motion_sety" , &MotionBlocks::compileSetY));
113
+ EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " motion_setrotationstyle" , &MotionBlocks::compileSetRotationStyle));
113
114
114
115
// Inputs
115
116
EXPECT_CALL (m_engineMock, addInput (m_section.get (), " STEPS" , MotionBlocks::STEPS));
@@ -123,6 +124,9 @@ TEST_F(MotionBlocksTest, RegisterBlocks)
123
124
EXPECT_CALL (m_engineMock, addInput (m_section.get (), " DX" , MotionBlocks::DX));
124
125
EXPECT_CALL (m_engineMock, addInput (m_section.get (), " DY" , MotionBlocks::DY));
125
126
127
+ // Fields
128
+ EXPECT_CALL (m_engineMock, addField (m_section.get (), " STYLE" , MotionBlocks::STYLE));
129
+
126
130
m_section->registerBlocks (&m_engineMock);
127
131
}
128
132
@@ -1082,3 +1086,70 @@ TEST_F(MotionBlocksTest, SetYImpl)
1082
1086
ASSERT_EQ (vm.registerCount (), 0 );
1083
1087
ASSERT_EQ (sprite.y (), 189.42 );
1084
1088
}
1089
+
1090
+ TEST_F (MotionBlocksTest, SetRotationStyle)
1091
+ {
1092
+ Compiler compiler (&m_engineMock);
1093
+
1094
+ // set rotation style [left-right]
1095
+ auto block1 = std::make_shared<Block>(" a" , " motion_setrotationstyle" );
1096
+ addDropdownField (block1, " STYLE" , MotionBlocks::STYLE, " left-right" , MotionBlocks::LeftRight);
1097
+
1098
+ // set rotation style [don't rotate]
1099
+ auto block2 = std::make_shared<Block>(" b" , " motion_setrotationstyle" );
1100
+ addDropdownField (block2, " STYLE" , MotionBlocks::STYLE, " don't rotate" , MotionBlocks::DoNotRotate);
1101
+
1102
+ // set rotation style [all around]
1103
+ auto block3 = std::make_shared<Block>(" c" , " motion_setrotationstyle" );
1104
+ addDropdownField (block3, " STYLE" , MotionBlocks::STYLE, " all around" , MotionBlocks::AllAround);
1105
+
1106
+ compiler.init ();
1107
+
1108
+ EXPECT_CALL (m_engineMock, functionIndex (&MotionBlocks::setLeftRightRotationStyle)).WillOnce (Return (0 ));
1109
+ compiler.setBlock (block1);
1110
+ MotionBlocks::compileSetRotationStyle (&compiler);
1111
+
1112
+ EXPECT_CALL (m_engineMock, functionIndex (&MotionBlocks::setDoNotRotateRotationStyle)).WillOnce (Return (1 ));
1113
+ compiler.setBlock (block2);
1114
+ MotionBlocks::compileSetRotationStyle (&compiler);
1115
+
1116
+ EXPECT_CALL (m_engineMock, functionIndex (&MotionBlocks::setAllAroundRotationStyle)).WillOnce (Return (2 ));
1117
+ compiler.setBlock (block3);
1118
+ MotionBlocks::compileSetRotationStyle (&compiler);
1119
+
1120
+ compiler.end ();
1121
+
1122
+ ASSERT_EQ (compiler.bytecode (), std::vector<unsigned int >({ vm::OP_START, vm::OP_EXEC, 0 , vm::OP_EXEC, 1 , vm::OP_EXEC, 2 , vm::OP_HALT }));
1123
+ ASSERT_TRUE (compiler.constValues ().empty ());
1124
+ }
1125
+
1126
+ TEST_F (MotionBlocksTest, SetRotationStyleImpl)
1127
+ {
1128
+ static unsigned int bytecode1[] = { vm::OP_START, vm::OP_EXEC, 0 , vm::OP_HALT };
1129
+ static unsigned int bytecode2[] = { vm::OP_START, vm::OP_EXEC, 1 , vm::OP_HALT };
1130
+ static unsigned int bytecode3[] = { vm::OP_START, vm::OP_EXEC, 2 , vm::OP_HALT };
1131
+ static BlockFunc functions[] = { &MotionBlocks::setLeftRightRotationStyle, &MotionBlocks::setDoNotRotateRotationStyle, &MotionBlocks::setAllAroundRotationStyle };
1132
+
1133
+ Sprite sprite;
1134
+
1135
+ VirtualMachine vm (&sprite, nullptr , nullptr );
1136
+ vm.setFunctions (functions);
1137
+
1138
+ vm.setBytecode (bytecode1);
1139
+ vm.run ();
1140
+
1141
+ ASSERT_EQ (vm.registerCount (), 0 );
1142
+ ASSERT_EQ (sprite.rotationStyle (), Sprite::RotationStyle::LeftRight);
1143
+
1144
+ vm.setBytecode (bytecode2);
1145
+ vm.run ();
1146
+
1147
+ ASSERT_EQ (vm.registerCount (), 0 );
1148
+ ASSERT_EQ (sprite.rotationStyle (), Sprite::RotationStyle::DoNotRotate);
1149
+
1150
+ vm.setBytecode (bytecode3);
1151
+ vm.run ();
1152
+
1153
+ ASSERT_EQ (vm.registerCount (), 0 );
1154
+ ASSERT_EQ (sprite.rotationStyle (), Sprite::RotationStyle::AllAround);
1155
+ }
0 commit comments