@@ -359,3 +359,198 @@ TEST_F(VariableBlocksTest, ShowVariable_Local_FromClone)
359
359
ASSERT_FALSE (clone->variableAt (0 )->monitor ());
360
360
ASSERT_FALSE (clone->variableAt (1 )->monitor ());
361
361
}
362
+
363
+ TEST_F (VariableBlocksTest, HideVariable_Global_Existent)
364
+ {
365
+ auto stage = std::make_shared<Stage>();
366
+ auto var1 = std::make_shared<Variable>(" a" , " var1" , 835.21 );
367
+ stage->addVariable (var1);
368
+ auto var2 = std::make_shared<Variable>(" b" , " var2" , " Hello world" );
369
+ stage->addVariable (var2);
370
+
371
+ auto monitor1 = std::make_shared<Monitor>(" monitor" , " data_variable" );
372
+ monitor1->block ()->addField (std::make_shared<Field>(" VARIABLE" , var1->name (), var1));
373
+ monitor1->setVisible (true );
374
+
375
+ auto monitor2 = std::make_shared<Monitor>(" monitor" , " data_variable" );
376
+ monitor2->block ()->addField (std::make_shared<Field>(" VARIABLE" , var2->name (), var2));
377
+ monitor2->setVisible (false );
378
+
379
+ m_engine->setMonitors ({ monitor1, monitor2 });
380
+ var1->setMonitor (monitor1.get ());
381
+ var2->setMonitor (monitor2.get ());
382
+
383
+ m_engine->setTargets ({ stage });
384
+
385
+ ScriptBuilder builder1 (m_extension.get (), m_engine, stage);
386
+ builder1.addBlock (" data_hidevariable" );
387
+ builder1.addEntityField (" VARIABLE" , var1);
388
+
389
+ ScriptBuilder builder2 (m_extension.get (), m_engine, stage);
390
+ builder2.addBlock (" data_hidevariable" );
391
+ builder2.addEntityField (" VARIABLE" , var2);
392
+
393
+ ScriptBuilder::buildMultiple ({ &builder1, &builder2 });
394
+
395
+ builder1.run ();
396
+ ASSERT_FALSE (monitor1->visible ());
397
+ ASSERT_FALSE (monitor2->visible ());
398
+
399
+ builder2.run ();
400
+ ASSERT_FALSE (monitor1->visible ());
401
+ ASSERT_FALSE (monitor2->visible ());
402
+ }
403
+
404
+ TEST_F (VariableBlocksTest, HideVariable_Global_Nonexistent)
405
+ {
406
+ auto stage = std::make_shared<Stage>();
407
+ auto var1 = std::make_shared<Variable>(" a" , " var1" , 835.21 );
408
+ stage->addVariable (var1);
409
+ auto var2 = std::make_shared<Variable>(" b" , " var2" , " Hello world" );
410
+ stage->addVariable (var2);
411
+
412
+ m_engine->setTargets ({ stage });
413
+
414
+ ScriptBuilder builder1 (m_extension.get (), m_engine, stage);
415
+ builder1.addBlock (" data_hidevariable" );
416
+ builder1.addEntityField (" VARIABLE" , var1);
417
+
418
+ ScriptBuilder builder2 (m_extension.get (), m_engine, stage);
419
+ builder2.addBlock (" data_hidevariable" );
420
+ builder2.addEntityField (" VARIABLE" , var2);
421
+
422
+ ScriptBuilder::buildMultiple ({ &builder1, &builder2 });
423
+
424
+ // Missing monitors should NOT be created
425
+ builder1.run ();
426
+ ASSERT_FALSE (var1->monitor ());
427
+
428
+ builder2.run ();
429
+ ASSERT_FALSE (var2->monitor ());
430
+ }
431
+
432
+ TEST_F (VariableBlocksTest, HideVariable_Local_Existent)
433
+ {
434
+ auto stage = std::make_shared<Stage>();
435
+ auto sprite = std::make_shared<Sprite>();
436
+
437
+ auto var1 = std::make_shared<Variable>(" a" , " var1" , 835.21 );
438
+ sprite->addVariable (var1);
439
+ auto var2 = std::make_shared<Variable>(" b" , " var2" , " Hello world" );
440
+ sprite->addVariable (var2);
441
+
442
+ auto monitor1 = std::make_shared<Monitor>(" monitor" , " data_variable" );
443
+ monitor1->block ()->addField (std::make_shared<Field>(" VARIABLE" , var1->name (), var1));
444
+ monitor1->setVisible (true );
445
+
446
+ auto monitor2 = std::make_shared<Monitor>(" monitor" , " data_variable" );
447
+ monitor2->block ()->addField (std::make_shared<Field>(" VARIABLE" , var2->name (), var2));
448
+ monitor2->setVisible (false );
449
+
450
+ m_engine->setMonitors ({ monitor1, monitor2 });
451
+ var1->setMonitor (monitor1.get ());
452
+ var2->setMonitor (monitor2.get ());
453
+
454
+ m_engine->setTargets ({ stage, sprite });
455
+
456
+ ScriptBuilder builder1 (m_extension.get (), m_engine, sprite);
457
+ builder1.addBlock (" data_hidevariable" );
458
+ builder1.addEntityField (" VARIABLE" , var1);
459
+
460
+ ScriptBuilder builder2 (m_extension.get (), m_engine, sprite);
461
+ builder2.addBlock (" data_hidevariable" );
462
+ builder2.addEntityField (" VARIABLE" , var2);
463
+
464
+ ScriptBuilder::buildMultiple ({ &builder1, &builder2 });
465
+
466
+ builder1.run ();
467
+ ASSERT_FALSE (monitor1->visible ());
468
+ ASSERT_FALSE (monitor2->visible ());
469
+
470
+ builder2.run ();
471
+ ASSERT_FALSE (monitor1->visible ());
472
+ ASSERT_FALSE (monitor2->visible ());
473
+ }
474
+
475
+ TEST_F (VariableBlocksTest, HideVariable_Local_Nonexistent)
476
+ {
477
+ auto stage = std::make_shared<Stage>();
478
+ auto sprite = std::make_shared<Sprite>();
479
+
480
+ auto var1 = std::make_shared<Variable>(" a" , " var1" , 835.21 );
481
+ sprite->addVariable (var1);
482
+ auto var2 = std::make_shared<Variable>(" b" , " var2" , " Hello world" );
483
+ sprite->addVariable (var2);
484
+
485
+ m_engine->setTargets ({ stage, sprite });
486
+
487
+ ScriptBuilder builder1 (m_extension.get (), m_engine, sprite);
488
+ builder1.addBlock (" data_hidevariable" );
489
+ builder1.addEntityField (" VARIABLE" , var1);
490
+
491
+ ScriptBuilder builder2 (m_extension.get (), m_engine, sprite);
492
+ builder2.addBlock (" data_hidevariable" );
493
+ builder2.addEntityField (" VARIABLE" , var2);
494
+
495
+ ScriptBuilder::buildMultiple ({ &builder1, &builder2 });
496
+ m_engine->run ();
497
+
498
+ // Missing monitors should NOT be created
499
+ builder1.run ();
500
+ ASSERT_FALSE (var1->monitor ());
501
+
502
+ builder2.run ();
503
+ ASSERT_FALSE (var2->monitor ());
504
+ }
505
+
506
+ TEST_F (VariableBlocksTest, HideVariable_Local_FromClone)
507
+ {
508
+ auto stage = std::make_shared<Stage>();
509
+ auto sprite = std::make_shared<Sprite>();
510
+
511
+ auto var1 = std::make_shared<Variable>(" a" , " var1" , 835.21 );
512
+ sprite->addVariable (var1);
513
+ auto var2 = std::make_shared<Variable>(" b" , " var2" , " Hello world" );
514
+ sprite->addVariable (var2);
515
+
516
+ auto monitor1 = std::make_shared<Monitor>(" monitor" , " data_variable" );
517
+ monitor1->block ()->addField (std::make_shared<Field>(" VARIABLE" , var1->name (), var1));
518
+ monitor1->setVisible (true );
519
+
520
+ auto monitor2 = std::make_shared<Monitor>(" monitor" , " data_variable" );
521
+ monitor2->block ()->addField (std::make_shared<Field>(" VARIABLE" , var2->name (), var2));
522
+ monitor2->setVisible (false );
523
+
524
+ m_engine->setMonitors ({ monitor1, monitor2 });
525
+ var1->setMonitor (monitor1.get ());
526
+ var2->setMonitor (monitor2.get ());
527
+
528
+ sprite->setEngine (m_engine);
529
+ auto clone = sprite->clone ();
530
+
531
+ m_engine->setTargets ({ stage, sprite, clone });
532
+
533
+ ScriptBuilder builder1 (m_extension.get (), m_engine, clone);
534
+ builder1.addBlock (" data_hidevariable" );
535
+ builder1.addEntityField (" VARIABLE" , var1);
536
+ Block *hat1 = builder1.currentBlock ()->parent ();
537
+
538
+ ScriptBuilder builder2 (m_extension.get (), m_engine, clone);
539
+ builder2.addBlock (" data_hidevariable" );
540
+ builder2.addEntityField (" VARIABLE" , var2);
541
+ Block *hat2 = builder2.currentBlock ()->parent ();
542
+
543
+ ScriptBuilder::buildMultiple ({ &builder1, &builder2 });
544
+
545
+ // The clone root variables should be used
546
+ builder1.run ();
547
+ ASSERT_FALSE (monitor1->visible ());
548
+ ASSERT_FALSE (monitor2->visible ());
549
+
550
+ builder2.run ();
551
+ ASSERT_FALSE (monitor1->visible ());
552
+ ASSERT_FALSE (monitor2->visible ());
553
+
554
+ ASSERT_FALSE (clone->variableAt (0 )->monitor ());
555
+ ASSERT_FALSE (clone->variableAt (1 )->monitor ());
556
+ }
0 commit comments