// ========================================================================== // SC
.Statechart Unit Test // ========================================================================== /*globals SC
statechart State */
var obj1, rootState1, stateA, stateB; var obj2, rootState2, stateC, stateD; var obj3, rootState3, stateE, rootStateExample; var obj4; var owner;
module(“SC.Statechart: Create Statechart with Unassigned Root State Tests”, {
setup: function() { owner = SC.Object.create(); obj1 = SC.Object.extend(SC.StatechartManager, { initialState: 'stateA', stateA: SC.State.design({ foo: function() { this.gotoState('stateB'); } }), stateB: SC.State.design({ bar: function() { this.gotoState('stateA'); } }) }); obj1 = obj1.create(); rootState1 = obj1.get('rootState'); stateA = obj1.getState('stateA'); stateB = obj1.getState('stateB'); obj2 = SC.Object.extend(SC.StatechartManager, { statesAreConcurrent: YES, stateC: SC.State.design({ foo: function() { this.gotoState('stateD'); } }), stateD: SC.State.design({ bar: function() { this.gotoState('stateC'); } }) }); obj2 = obj2.create(); rootState2 = obj2.get('rootState'); stateC = obj2.getState('stateC'); stateD = obj2.getState('stateD'); rootStateExample = SC.State.extend({ test: 'foo' }); obj3 = SC.Object.extend(SC.StatechartManager, { owner: owner, initialState: 'stateE', rootStateExample: rootStateExample, stateE: SC.State.design() }); obj3 = obj3.create(); rootState3 = obj3.get('rootState'); stateE = obj3.getState('stateE'); obj4 = SC.Object.extend(SC.StatechartManager, { autoInitStatechart: NO, initialState: 'stateF', rootStateExample: rootStateExample, stateF: SC.State.design() }); obj4 = obj4.create(); }, teardown: function() { obj1 = rootState1 = stateA = stateB = null; obj2 = rootState2 = stateC = stateD = null; obj3 = rootState3 = stateE = rootStateExample = null; obj4 = null; }
});
test(“check obj1 statechart”, function() {
ok(obj1.get('isStatechart'), "obj should be a statechart"); ok(obj1.get('statechartIsInitialized'), "obj should be an initialized statechart"); ok(SC.kindOf(rootState1, SC.State), "root state should be kind of SC.State"); ok(!rootState1.get('substateAreConcurrent'), "root state's substates should not be concurrent"); equals(obj1.get('initialState'), stateA, "obj's initialState should be state A"); equals(rootState1.get('initialSubstate'), stateA, "root state's initialState should be state A"); equals(stateA, rootState1.getSubstate('stateA'), "obj.stateA and rootState.stateA should be equal"); equals(stateB, rootState1.getSubstate('stateB'), "obj.stateB and rootState.stateB should be equal"); equals(rootState1.get('owner'), obj1, "root state's owner should be obj"); equals(stateA.get('owner'), obj1, "state A's owner should be obj"); equals(stateB.get('owner'), obj1, "state B's owner should be obj"); ok(stateA.get('isCurrentState'), "state A should be current state"); ok(!stateB.get('isCurrentState'), "state B should not be current state"); obj1.sendEvent('foo'); ok(!stateA.get('isCurrentState'), "state A should not be current state"); ok(stateB.get('isCurrentState'), "state B should be current state");
});
test(“check obj2 statechart”, function() {
ok(obj2.get('isStatechart'), "obj should be a statechart"); ok(obj2.get('statechartIsInitialized'), "obj should be an initialized statechart"); ok(SC.kindOf(rootState2, SC.State), "root state should be kind of SC.State"); ok(rootState2.get('substatesAreConcurrent'), "root state's substates should be concurrent"); equals(obj2.get('initialState'), null, "obj's initialState should be null"); equals(rootState2.get('initialSubstate'), null, "root state's initialState should be null"); equals(stateC, rootState2.getSubstate('stateC'), "obj.stateC and rootState.stateC should be equal"); equals(stateD, rootState2.getSubstate('stateD'), "obj.stateD and rootState.stateD should be equal"); equals(rootState2.get('owner'), obj2, "root state's owner should be obj"); equals(stateC.get('owner'), obj2, "state C's owner should be obj"); equals(stateD.get('owner'), obj2, "state D's owner should be obj"); ok(stateC.get('isCurrentState'), "state C should be current state"); ok(stateD.get('isCurrentState'), "state D should not be current state");
});
test(“check obj3 statechart”, function() {
ok(obj3.get('isStatechart'), "obj should be a statechart"); ok(obj3.get('statechartIsInitialized'), "obj should be an initialized statechart"); ok(SC.kindOf(rootState3, rootStateExample), "root state should be kind of rootStateExample"); ok(!rootState3.get('substatesAreConcurrent'), "root state's substates should be concurrent"); equals(rootState3.get('owner'), owner, "root state's owner should be owner"); equals(stateE.get('owner'), owner, "state C's owner should be owner"); equals(obj3.get('initialState'), stateE, "obj's initialState should be stateE"); equals(rootState3.get('initialSubstate'), stateE, "root state's initialState should be stateE"); equals(stateE, rootState3.getSubstate('stateE'), "obj.stateE and rootState.stateE should be equal"); ok(stateE.get('isCurrentState'), "state E should be current state");
});
test(“check obj4 statechart”, function() {
ok(obj4.get('isStatechart'), "obj should be a statechart"); ok(!obj4.get('statechartIsInitialized'), "obj should not be an initialized statechart"); equals(obj4.get('rootState'), null, "obj's root state should be null"); obj4.initStatechart(); ok(obj4.get('statechartIsInitialized'), "obj should be an initialized statechart"); ok(obj4.get('rootState'), "obj's root state should not be null"); equals(obj4.get('rootState').getSubstate('stateF'), obj4.getState('stateF'), "obj.stateF should be equal to rootState.stateF");
});