@@ -127,6 +127,7 @@ TEST_F(SensingBlocksTest, RegisterBlocks)
127
127
// Blocks
128
128
EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " sensing_touchingobject" , &SensingBlocks::compileTouchingObject));
129
129
EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " sensing_touchingcolor" , &SensingBlocks::compileTouchingColor));
130
+ EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " sensing_coloristouchingcolor" , &SensingBlocks::compileColorIsTouchingColor));
130
131
EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " sensing_distanceto" , &SensingBlocks::compileDistanceTo));
131
132
EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " sensing_askandwait" , &SensingBlocks::compileAskAndWait));
132
133
EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " sensing_answer" , &SensingBlocks::compileAnswer));
@@ -155,6 +156,7 @@ TEST_F(SensingBlocksTest, RegisterBlocks)
155
156
// Inputs
156
157
EXPECT_CALL (m_engineMock, addInput (m_section.get (), " TOUCHINGOBJECTMENU" , SensingBlocks::TOUCHINGOBJECTMENU));
157
158
EXPECT_CALL (m_engineMock, addInput (m_section.get (), " COLOR" , SensingBlocks::COLOR));
159
+ EXPECT_CALL (m_engineMock, addInput (m_section.get (), " COLOR2" , SensingBlocks::COLOR2));
158
160
EXPECT_CALL (m_engineMock, addInput (m_section.get (), " DISTANCETOMENU" , SensingBlocks::DISTANCETOMENU));
159
161
EXPECT_CALL (m_engineMock, addInput (m_section.get (), " QUESTION" , SensingBlocks::QUESTION));
160
162
EXPECT_CALL (m_engineMock, addInput (m_section.get (), " KEY_OPTION" , SensingBlocks::KEY_OPTION));
@@ -454,6 +456,79 @@ TEST_F(SensingBlocksTest, TouchingColorImpl)
454
456
ASSERT_TRUE (vm.getInput (0 , 1 )->toBool ());
455
457
}
456
458
459
+ TEST_F (SensingBlocksTest, ColorIsTouchingColor)
460
+ {
461
+ Compiler compiler (&m_engineMock);
462
+
463
+ // color (#FF00FF) is touching color (#FFFF00)
464
+ auto block1 = std::make_shared<Block>(" a" , " sensing_coloristouchingcolor" );
465
+ addValueInput (block1, " COLOR" , SensingBlocks::COLOR, " #FF00FF" );
466
+ addValueInput (block1, " COLOR2" , SensingBlocks::COLOR2, " #FFFF00" );
467
+
468
+ // color (null block) is touching color (null block)
469
+ auto block2 = std::make_shared<Block>(" b" , " sensing_coloristouchingcolor" );
470
+ addDropdownInput (block2, " COLOR" , SensingBlocks::COLOR, " " , createNullBlock (" c" ));
471
+ addDropdownInput (block2, " COLOR2" , SensingBlocks::COLOR2, " " , createNullBlock (" d" ));
472
+
473
+ compiler.init ();
474
+
475
+ EXPECT_CALL (m_engineMock, functionIndex (&SensingBlocks::colorIsTouchingColor)).WillOnce (Return (1 ));
476
+ compiler.setBlock (block1);
477
+ SensingBlocks::compileColorIsTouchingColor (&compiler);
478
+
479
+ EXPECT_CALL (m_engineMock, functionIndex (&SensingBlocks::colorIsTouchingColor)).WillOnce (Return (1 ));
480
+ compiler.setBlock (block2);
481
+ SensingBlocks::compileColorIsTouchingColor (&compiler);
482
+
483
+ compiler.end ();
484
+
485
+ ASSERT_EQ (compiler.bytecode (), std::vector<unsigned int >({ vm::OP_START, vm::OP_CONST, 0 , vm::OP_CONST, 1 , vm::OP_EXEC, 1 , vm::OP_NULL, vm::OP_NULL, vm::OP_EXEC, 1 , vm::OP_HALT }));
486
+ ASSERT_EQ (compiler.constValues (), std::vector<Value>({ " #FFFF00" , " #FF00FF" }));
487
+ }
488
+
489
+ TEST_F (SensingBlocksTest, ColorIsTouchingColorImpl)
490
+ {
491
+ static unsigned int bytecode1[] = { vm::OP_START, vm::OP_CONST, 0 , vm::OP_CONST, 1 , vm::OP_EXEC, 0 , vm::OP_HALT };
492
+ static unsigned int bytecode2[] = { vm::OP_START, vm::OP_CONST, 2 , vm::OP_CONST, 3 , vm::OP_EXEC, 0 , vm::OP_HALT };
493
+ static BlockFunc functions[] = { &SensingBlocks::colorIsTouchingColor };
494
+ static Value constValues[] = { " #FF00FF" , " #FFFF00" , 1946195606 , 238 };
495
+
496
+ TargetMock target;
497
+ Sprite sprite;
498
+ VirtualMachine vm (&target, nullptr , nullptr );
499
+ vm.setFunctions (functions);
500
+ vm.setConstValues (constValues);
501
+
502
+ EXPECT_CALL (target, touchingColor (constValues[0 ], constValues[1 ])).WillOnce (Return (false ));
503
+ vm.setBytecode (bytecode1);
504
+ vm.run ();
505
+
506
+ ASSERT_EQ (vm.registerCount (), 1 );
507
+ ASSERT_FALSE (vm.getInput (0 , 1 )->toBool ());
508
+
509
+ EXPECT_CALL (target, touchingColor (constValues[0 ], constValues[1 ])).WillOnce (Return (true ));
510
+ vm.reset ();
511
+ vm.run ();
512
+
513
+ ASSERT_EQ (vm.registerCount (), 1 );
514
+ ASSERT_TRUE (vm.getInput (0 , 1 )->toBool ());
515
+
516
+ EXPECT_CALL (target, touchingColor (constValues[2 ], constValues[3 ])).WillOnce (Return (false ));
517
+ vm.reset ();
518
+ vm.setBytecode (bytecode2);
519
+ vm.run ();
520
+
521
+ ASSERT_EQ (vm.registerCount (), 1 );
522
+ ASSERT_FALSE (vm.getInput (0 , 1 )->toBool ());
523
+
524
+ EXPECT_CALL (target, touchingColor (constValues[2 ], constValues[3 ])).WillOnce (Return (true ));
525
+ vm.reset ();
526
+ vm.run ();
527
+
528
+ ASSERT_EQ (vm.registerCount (), 1 );
529
+ ASSERT_TRUE (vm.getInput (0 , 1 )->toBool ());
530
+ }
531
+
457
532
TEST_F (SensingBlocksTest, DistanceTo)
458
533
{
459
534
Compiler compiler (&m_engineMock);
0 commit comments