Peter Buchmann
Peter Buchmann

Reputation: 128

Setting state of a state machine for test reasons

for the implementation of a unit test I need to setup a specific state of an object. As the state is implemented with a state machine, MDriven rejects the direct assignment of the state value to the attribute.

I could maybe trigger through the complete state machine until I reach the needed state but I assume that there is an easier way to set the state to a specific value that is rather hidden as it normlaly isn't supposed to work that way.

Does anybody know how this could be done?

Upvotes: 1

Views: 58

Answers (2)

Steve.Au
Steve.Au

Reputation: 31

        public void StateMachineForceState(string NewState)
    { //use with caution
        string ForceMode = "self.stateMachineForceMode('TheStateAttribute')";
        string close = "self.TheStateAttribute :='close'";
        string open = "self.TheStateAttribute='open'";
        Eco.Handles.DefaultEcoSpace es = this.AsIObject().ServiceProvider().GetEcoService<IEcoSpaceService>() as Eco.Handles.DefaultEcoSpace;
        switch (NewState)
        {
            case "close":
                es.ActionLanguage.Execute(this, ForceMode);
                es.ActionLanguage.Execute(this, close);
                break;
            case "open":
                es.ActionLanguage.Execute(this, ForceMode);
                es.ActionLanguage.Execute(this, open);
                break;
            default:
                break;
        }
    }

Upvotes: 0

Hans Karlsen
Hans Karlsen

Reputation: 2435

Yes - read details here https://wiki.mdriven.net/index.php/StateMachineForceMode

But basically you set the state machine for an attribute into ForceMode - after this you can freely change the state value:

self.stateMachineForceMode('State'); 
self.State:='State3'; 

Upvotes: 0

Related Questions