@@ -387,7 +387,7 @@ TEST_F(ComplexSequenceWithMemoryTest, ConditionsTrue)
387
387
ASSERT_EQ (NodeStatus::IDLE, action_2.status ());
388
388
}
389
389
390
- TEST_F (ComplexSequenceWithMemoryTest, Conditions1ToFase )
390
+ TEST_F (ComplexSequenceWithMemoryTest, Conditions1ToFalse )
391
391
{
392
392
BT::NodeStatus state = root.executeTick ();
393
393
@@ -458,3 +458,89 @@ TEST_F(ComplexSequenceWithMemoryTest, Action1DoneSeq)
458
458
ASSERT_EQ (NodeStatus::IDLE, action_1.status ());
459
459
ASSERT_EQ (NodeStatus::IDLE, action_2.status ());
460
460
}
461
+
462
+ TEST_F (ComplexSequenceWithMemoryTest, Action2FailureSeq)
463
+ {
464
+ root.executeTick ();
465
+ std::this_thread::sleep_for (milliseconds (150 ));
466
+ root.executeTick ();
467
+
468
+ ASSERT_EQ (NodeStatus::SUCCESS, seq_conditions.status ());
469
+ ASSERT_EQ (NodeStatus::IDLE, condition_1.status ());
470
+ ASSERT_EQ (NodeStatus::IDLE, condition_2.status ());
471
+ ASSERT_EQ (NodeStatus::RUNNING, seq_actions.status ());
472
+ ASSERT_EQ (NodeStatus::SUCCESS, action_1.status ());
473
+ ASSERT_EQ (NodeStatus::RUNNING, action_2.status ());
474
+
475
+ action_2.setExpectedResult (NodeStatus::FAILURE);
476
+ std::this_thread::sleep_for (milliseconds (150 ));
477
+ root.executeTick ();
478
+
479
+ // failure in action_2 does not affect the state of already
480
+ // executed nodes (seq_conditions and action_1)
481
+ ASSERT_EQ (NodeStatus::FAILURE, root.status ());
482
+ ASSERT_EQ (NodeStatus::SUCCESS, seq_conditions.status ());
483
+ ASSERT_EQ (NodeStatus::IDLE, condition_1.status ());
484
+ ASSERT_EQ (NodeStatus::IDLE, condition_2.status ());
485
+ ASSERT_EQ (NodeStatus::IDLE, seq_actions.status ());
486
+ ASSERT_EQ (NodeStatus::SUCCESS, action_1.status ());
487
+ ASSERT_EQ (NodeStatus::IDLE, action_2.status ());
488
+
489
+ action_2.setExpectedResult (NodeStatus::SUCCESS);
490
+ root.executeTick ();
491
+
492
+ ASSERT_EQ (NodeStatus::SUCCESS, seq_conditions.status ());
493
+ ASSERT_EQ (NodeStatus::IDLE, condition_1.status ());
494
+ ASSERT_EQ (NodeStatus::IDLE, condition_2.status ());
495
+ ASSERT_EQ (NodeStatus::RUNNING, seq_actions.status ());
496
+ ASSERT_EQ (NodeStatus::SUCCESS, action_1.status ());
497
+ ASSERT_EQ (NodeStatus::RUNNING, action_2.status ());
498
+
499
+ std::this_thread::sleep_for (milliseconds (150 ));
500
+ root.executeTick ();
501
+
502
+ ASSERT_EQ (NodeStatus::SUCCESS, root.status ());
503
+ ASSERT_EQ (NodeStatus::IDLE, seq_conditions.status ());
504
+ ASSERT_EQ (NodeStatus::IDLE, condition_1.status ());
505
+ ASSERT_EQ (NodeStatus::IDLE, condition_2.status ());
506
+ ASSERT_EQ (NodeStatus::IDLE, seq_actions.status ());
507
+ ASSERT_EQ (NodeStatus::IDLE, action_1.status ());
508
+ ASSERT_EQ (NodeStatus::IDLE, action_2.status ());
509
+ }
510
+
511
+ TEST_F (ComplexSequenceWithMemoryTest, Action2HaltSeq)
512
+ {
513
+ root.executeTick ();
514
+ std::this_thread::sleep_for (milliseconds (150 ));
515
+ root.executeTick ();
516
+
517
+ root.halt ();
518
+
519
+ ASSERT_EQ (NodeStatus::IDLE, seq_conditions.status ());
520
+ ASSERT_EQ (NodeStatus::IDLE, condition_1.status ());
521
+ ASSERT_EQ (NodeStatus::IDLE, condition_2.status ());
522
+ ASSERT_EQ (NodeStatus::IDLE, seq_actions.status ());
523
+ ASSERT_EQ (NodeStatus::IDLE, action_1.status ());
524
+ ASSERT_EQ (NodeStatus::IDLE, action_2.status ());
525
+
526
+ root.executeTick ();
527
+
528
+ // tree retakes execution from action_2
529
+ ASSERT_EQ (NodeStatus::IDLE, seq_conditions.status ());
530
+ ASSERT_EQ (NodeStatus::IDLE, condition_1.status ());
531
+ ASSERT_EQ (NodeStatus::IDLE, condition_2.status ());
532
+ ASSERT_EQ (NodeStatus::RUNNING, seq_actions.status ());
533
+ ASSERT_EQ (NodeStatus::IDLE, action_1.status ());
534
+ ASSERT_EQ (NodeStatus::RUNNING, action_2.status ());
535
+
536
+ std::this_thread::sleep_for (milliseconds (150 ));
537
+ root.executeTick ();
538
+
539
+ ASSERT_EQ (NodeStatus::SUCCESS, root.status ());
540
+ ASSERT_EQ (NodeStatus::IDLE, seq_conditions.status ());
541
+ ASSERT_EQ (NodeStatus::IDLE, condition_1.status ());
542
+ ASSERT_EQ (NodeStatus::IDLE, condition_2.status ());
543
+ ASSERT_EQ (NodeStatus::IDLE, seq_actions.status ());
544
+ ASSERT_EQ (NodeStatus::IDLE, action_1.status ());
545
+ ASSERT_EQ (NodeStatus::IDLE, action_2.status ());
546
+ }
0 commit comments