@@ -1778,9 +1778,11 @@ TEST_F(LooksBlocksTest, SwitchBackdropToImpl)
17781778 static unsigned int bytecode12[] = { vm::OP_START, vm::OP_CONST, 11 , vm::OP_EXEC, 0 , vm::OP_HALT };
17791779 static unsigned int bytecode13[] = { vm::OP_START, vm::OP_CONST, 12 , vm::OP_EXEC, 0 , vm::OP_HALT };
17801780 static unsigned int bytecode14[] = { vm::OP_START, vm::OP_CONST, 13 , vm::OP_EXEC, 0 , vm::OP_HALT };
1781+ static unsigned int bytecode15[] = { vm::OP_START, vm::OP_CONST, 14 , vm::OP_EXEC, 0 , vm::OP_HALT };
17811782 static BlockFunc functions[] = { &LooksBlocks::switchBackdropTo };
17821783 static Value constValues[] = {
1783- " backdrop2" , 0 , 1 , 2 , 3 , " 2" , " 3" , Value::SpecialValue::NaN, Value::SpecialValue::Infinity, Value::SpecialValue::NegativeInfinity, " " , " " , " next backdrop" , " previous backdrop"
1784+ " backdrop2" , 0 , 1 , 2 , 3 , " 2" , " 3" , Value::SpecialValue::NaN, Value::SpecialValue::Infinity, Value::SpecialValue::NegativeInfinity, " " , " " , " next backdrop" , " previous backdrop" ,
1785+ " random backdrop"
17841786 };
17851787
17861788 Target target;
@@ -1992,6 +1994,42 @@ TEST_F(LooksBlocksTest, SwitchBackdropToImpl)
19921994
19931995 ASSERT_EQ (vm.registerCount (), 0 );
19941996 ASSERT_EQ (stage.costumeIndex (), 5 );
1997+
1998+ // random backdrop
1999+ RandomGeneratorMock rng;
2000+ LooksBlocks::rng = &rng;
2001+
2002+ EXPECT_CALL (m_engineMock, stage ()).Times (3 ).WillRepeatedly (Return (&stage));
2003+ EXPECT_CALL (m_engineMock, startBackdropScripts (stage.costumeAt (3 )->broadcast ()));
2004+ EXPECT_CALL (rng, randint (0 , 5 )).WillOnce (Return (3 ));
2005+ stage.setCostumeIndex (0 );
2006+ vm.setBytecode (bytecode15);
2007+ vm.run ();
2008+
2009+ ASSERT_EQ (vm.registerCount (), 0 );
2010+ ASSERT_EQ (stage.costumeIndex (), 3 );
2011+
2012+ EXPECT_CALL (m_engineMock, stage ()).Times (3 ).WillRepeatedly (Return (&stage));
2013+ EXPECT_CALL (m_engineMock, startBackdropScripts (stage.costumeAt (5 )->broadcast ()));
2014+ EXPECT_CALL (rng, randint (0 , 5 )).WillOnce (Return (5 ));
2015+ vm.reset ();
2016+ vm.run ();
2017+
2018+ ASSERT_EQ (vm.registerCount (), 0 );
2019+ ASSERT_EQ (stage.costumeIndex (), 5 );
2020+
2021+ stage.addCostume (std::make_shared<Costume>(" random backdrop" , " b7" , " svg" ));
2022+
2023+ EXPECT_CALL (m_engineMock, stage ()).Times (2 ).WillRepeatedly (Return (&stage));
2024+ EXPECT_CALL (m_engineMock, startBackdropScripts (stage.costumeAt (6 )->broadcast ()));
2025+ EXPECT_CALL (rng, randint).Times (0 );
2026+ vm.reset ();
2027+ vm.run ();
2028+
2029+ ASSERT_EQ (vm.registerCount (), 0 );
2030+ ASSERT_EQ (stage.costumeIndex (), 6 );
2031+
2032+ LooksBlocks::rng = RandomGenerator::instance ().get ();
19952033}
19962034
19972035TEST_F (LooksBlocksTest, SwitchBackdropToAndWait)
@@ -2045,9 +2083,11 @@ TEST_F(LooksBlocksTest, SwitchBackdropToAndWaitImpl)
20452083 static unsigned int bytecode12[] = { vm::OP_START, vm::OP_CONST, 11 , vm::OP_EXEC, 0 , vm::OP_EXEC, 1 , vm::OP_EXEC, 2 , vm::OP_HALT };
20462084 static unsigned int bytecode13[] = { vm::OP_START, vm::OP_CONST, 12 , vm::OP_EXEC, 0 , vm::OP_EXEC, 1 , vm::OP_EXEC, 2 , vm::OP_HALT };
20472085 static unsigned int bytecode14[] = { vm::OP_START, vm::OP_CONST, 13 , vm::OP_EXEC, 0 , vm::OP_EXEC, 1 , vm::OP_EXEC, 2 , vm::OP_HALT };
2086+ static unsigned int bytecode15[] = { vm::OP_START, vm::OP_CONST, 14 , vm::OP_EXEC, 0 , vm::OP_EXEC, 1 , vm::OP_EXEC, 2 , vm::OP_HALT };
20482087 static BlockFunc functions[] = { &LooksBlocks::switchBackdropToAndWait, &LooksBlocks::backdropNumber, &LooksBlocks::checkBackdropScripts };
20492088 static Value constValues[] = {
2050- " backdrop2" , 0 , 1 , 2 , 3 , " 2" , " 3" , Value::SpecialValue::NaN, Value::SpecialValue::Infinity, Value::SpecialValue::NegativeInfinity, " " , " " , " next backdrop" , " previous backdrop"
2089+ " backdrop2" , 0 , 1 , 2 , 3 , " 2" , " 3" , Value::SpecialValue::NaN, Value::SpecialValue::Infinity, Value::SpecialValue::NegativeInfinity, " " , " " , " next backdrop" , " previous backdrop" ,
2090+ " random backdrop"
20512091 };
20522092
20532093 Target target;
@@ -2315,6 +2355,45 @@ TEST_F(LooksBlocksTest, SwitchBackdropToAndWaitImpl)
23152355
23162356 ASSERT_EQ (vm.registerCount (), 0 );
23172357 ASSERT_EQ (stage.costumeIndex (), 5 );
2358+
2359+ // random backdrop
2360+ RandomGeneratorMock rng;
2361+ LooksBlocks::rng = &rng;
2362+
2363+ EXPECT_CALL (m_engineMock, stage ()).Times (5 ).WillRepeatedly (Return (&stage));
2364+ EXPECT_CALL (m_engineMock, startBackdropScripts (stage.costumeAt (3 )->broadcast ()));
2365+ EXPECT_CALL (m_engineMock, broadcastByPtrRunning (stage.costumeAt (3 )->broadcast ())).WillOnce (Return (false ));
2366+ EXPECT_CALL (rng, randint (0 , 5 )).WillOnce (Return (3 ));
2367+ stage.setCostumeIndex (0 );
2368+ vm.setBytecode (bytecode15);
2369+ vm.run ();
2370+
2371+ ASSERT_EQ (vm.registerCount (), 0 );
2372+ ASSERT_EQ (stage.costumeIndex (), 3 );
2373+
2374+ EXPECT_CALL (m_engineMock, stage ()).Times (5 ).WillRepeatedly (Return (&stage));
2375+ EXPECT_CALL (m_engineMock, startBackdropScripts (stage.costumeAt (5 )->broadcast ()));
2376+ EXPECT_CALL (m_engineMock, broadcastByPtrRunning (stage.costumeAt (5 )->broadcast ())).WillOnce (Return (false ));
2377+ EXPECT_CALL (rng, randint (0 , 5 )).WillOnce (Return (5 ));
2378+ vm.reset ();
2379+ vm.run ();
2380+
2381+ ASSERT_EQ (vm.registerCount (), 0 );
2382+ ASSERT_EQ (stage.costumeIndex (), 5 );
2383+
2384+ stage.addCostume (std::make_shared<Costume>(" random backdrop" , " b7" , " svg" ));
2385+
2386+ EXPECT_CALL (m_engineMock, stage ()).Times (4 ).WillRepeatedly (Return (&stage));
2387+ EXPECT_CALL (m_engineMock, startBackdropScripts (stage.costumeAt (6 )->broadcast ()));
2388+ EXPECT_CALL (m_engineMock, broadcastByPtrRunning (stage.costumeAt (6 )->broadcast ())).WillOnce (Return (false ));
2389+ EXPECT_CALL (rng, randint).Times (0 );
2390+ vm.reset ();
2391+ vm.run ();
2392+
2393+ ASSERT_EQ (vm.registerCount (), 0 );
2394+ ASSERT_EQ (stage.costumeIndex (), 6 );
2395+
2396+ LooksBlocks::rng = RandomGenerator::instance ().get ();
23182397}
23192398
23202399TEST_F (LooksBlocksTest, NextBackdrop)
0 commit comments