/**
 * @file
 * @ingroup <<<GROUP>>>
 * @brief   <<<BRIEF>>>
 *          <<<STATEMACHINENAME>>> State Machine Test Suite. Run this in the console to manually test your state machine.
 *
 *          This code is Autogenerated from '<<<PYIFGENNAME>>>' with the MIT License.
 *          As such, please only hand-code within 'USER' tags.
 *
 * @author  <<<AUTHOR>>>
 */
#include "allplatforms/testsuite/minunit/minunit.h"
#include "<<<STATEMACHINENAME>>>StateMachine.h"

/// {{{USER_HEADER_INCLUDES}}}
/// {{{USER_HEADER_INCLUDES}}}

namespace <<<NAMESPACE>>>_Test
{
    using namespace <<<NAMESPACE>>>;

    class CTest<<<STATEMACHINENAME>>>Controller : public I<<<STATEMACHINENAME>>>Controller
    {
    public:

        virtual ~CTest<<<STATEMACHINENAME>>>Controller(){}

        /// @{ Guards
        <<<PER_GUARD_BEGIN>>>
        virtual bool <<<GUARDNAME>>>() override
        {
            /// {{{USER_<<<GUARDNAME>>>}}}
            /// {{{USER_<<<GUARDNAME>>>}}}
            return I<<<STATEMACHINENAME>>>Controller::<<<GUARDNAME>>>();
        }
        <<<PER_GUARD_END>>>
        /// @}
        /// @{ State Entry and Exit Overrides
        <<<PER_STATE_BEGIN>>>
        virtual void <<<STATENAME>>>_on_entry() override
        {
            I<<<STATEMACHINENAME>>>Controller::<<<STATENAME>>>_on_entry();
            /// {{{USER_<<<STATENAME>>>_on_entry}}}
            /// {{{USER_<<<STATENAME>>>_on_entry}}}
        }
        virtual void <<<STATENAME>>>_on_exit() override
        {
            I<<<STATEMACHINENAME>>>Controller::<<<STATENAME>>>_on_exit();
            /// {{{USER_<<<STATENAME>>>_on_exit}}}
            /// {{{USER_<<<STATENAME>>>_on_exit}}}
        }
        <<<PER_STATE_END>>>
        /// @}
        /// @{ Actions Override
        <<<PER_ACTION_SIGNATURE_BEGIN>>>
        virtual void <<<ACTIONNAME>>>(<<<EVENTNAME>>> const& data) override
        {
            I<<<STATEMACHINENAME>>>Controller::<<<ACTIONNAME>>>(data);
            /// {{{USER_<<<ACTIONNAME>>>_<<<EVENTNAME>>>}}}
            /// {{{USER_<<<ACTIONNAME>>>_<<<EVENTNAME>>>}}}
        };
        <<<PER_ACTION_SIGNATURE_END>>>
        /// @}

        /// {{{USER_PUBLIC_MEMBERS}}}
        /// {{{USER_PUBLIC_MEMBERS}}}

        CTest<<<STATEMACHINENAME>>>Controller()
        {
            /// {{{USER_CConsole<<<STATEMACHINENAME>>>_CONSTRUCTOR}}}
            /// {{{USER_CConsole<<<STATEMACHINENAME>>>_CONSTRUCTOR}}}
        }
    };
}

struct s<<<STATEMACHINENAME>>>_Test_Suite_Fixture
{
    /// {{{USER_TEST_SUITE_FIXTURE_LOCALS}}}
    /// {{{USER_TEST_SUITE_FIXTURE_LOCALS}}}
    s<<<STATEMACHINENAME>>>_Test_Suite_Fixture(){
        /// {{{USER_TEST_SUITE_FIXTURE_SETUP}}}
        /// {{{USER_TEST_SUITE_FIXTURE_SETUP}}}
    }
    ~s<<<STATEMACHINENAME>>>_Test_Suite_Fixture(){
        /// {{{USER_TEST_SUITE_FIXTURE_TEARDOWN}}}
        /// {{{USER_TEST_SUITE_FIXTURE_TEARDOWN}}}
    }
};

MU_TEST(Test<<<STATEMACHINENAME>>>_States)
{
    using namespace <<<NAMESPACE>>>_Test;
    // This should be manually crafted to finely tune the state changes, forks etc (intricacies) of the SM
    /// {{{USER_UNIT_TEST_STATES}}}
    /// {{{USER_UNIT_TEST_STATES}}}
}

/// {{{USER_TESTS}}}
/// {{{USER_TESTS}}}

MU_TEST_SUITE(<<<STATEMACHINENAME>>>_Suite) {
    MU_RUN_TEST(Test<<<STATEMACHINENAME>>>_States);
    // Don't forget to run your tests here.
    /// {{{USER_TEST_SUITE_TESTS}}}
    /// {{{USER_TEST_SUITE_TESTS}}}
}