@@ -387,7 +387,7 @@ TEST_F(ComplexSequenceWithMemoryTest, ConditionsTrue)
387387 ASSERT_EQ (NodeStatus::IDLE, action_2.status ());
388388}
389389
390- TEST_F (ComplexSequenceWithMemoryTest, Conditions1ToFase )
390+ TEST_F (ComplexSequenceWithMemoryTest, Conditions1ToFalse )
391391{
392392 BT::NodeStatus state = root.executeTick ();
393393
@@ -458,3 +458,89 @@ TEST_F(ComplexSequenceWithMemoryTest, Action1DoneSeq)
458458 ASSERT_EQ (NodeStatus::IDLE, action_1.status ());
459459 ASSERT_EQ (NodeStatus::IDLE, action_2.status ());
460460}
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