// ========================================================================== // SC.Statechart Unit Test // ========================================================================== /*globals SC statechart */

var pane, viewA, viewB, stateA, stateB, responder = null;

module(“SC.Statechart: Responder Chain Tests”, {

setup: function() {
  pane = SC.MainPane.create({

    childViews: 'viewA'.w(),

    viewA: SC.View.extend({

      childViews: 'viewB'.w(),

      viewB: SC.View.extend(SC.StatechartManager, {

        initialState: 'a',
        returnValue: NO,

        a: SC.State.design({
          mouseDown: function(evt) {
            responder = this;
            this.gotoState('b');
          },

          click: function(evt) {
            responder = this;
            return NO;
          }
        }),

        b: SC.State.design({
          mouseUp: function(evt) {
            responder = this;
            this.gotoState('a');
          }

        }),

        keyUp: function(evt) { 
          responder = this;
          return this.get('returnValue');
        },

        toString: function() { return "view B"; }

      }),

      keyUp: function(evt) { 
        console.log('%@: keyUp invoked'.fmt(this));
        responder = this;
      },

      keyDown: function(evt) { 
        responder = this;
      },

      click: function(evt) {
        responder = this;
      },

      toString: function() { return "view A"; }

    })

  });

  viewA = pane.get('viewA');
  viewB = viewA.get('viewB');
  stateA = viewB.getState('a');
  stateB = viewB.getState('b');
},

teardown: function() {
  pane = viewA = viewB = stateA = stateB = responder = null;
}

});

test(“check state A and B are responders – mouseDown, mouseUp”, function() {

equals(responder, null, "responder should be null");
ok(stateA.get('isCurrentState'), "state A should be current state");
ok(!stateB.get('isCurrentState'), "state B should not be current state");

pane.sendEvent('mouseDown', {}, viewB);

ok(!stateA.get('isCurrentState'), "state A should not be current state");
ok(stateB.get('isCurrentState'), "state B shold be current state");
equals(responder, stateA, "state A should be responder");

pane.sendEvent('mouseUp', {}, viewB);

ok(stateA.get('isCurrentState'), "state A should be current state");
ok(!stateB.get('isCurrentState'), "state B shold not be current state");
equals(responder, stateB, "state B should be responder");

});

test(“check view B is responder – keyUp”, function() {

viewB.set('returnValue', YES);
equals(responder, null, "responder should be null");
pane.sendEvent('keyUp', {}, viewB);
equals(responder, viewB, "view B should be responder");

});

test(“check view A is responder – keyDown”, function() {

equals(responder, null, "responder should be null");
pane.sendEvent('keyDown', {}, viewB);
equals(responder, viewA, "view A should be responder");

});

test(“check view A is responder – click”, function() {

equals(responder, null, "responder should be null");
pane.sendEvent('click', {}, viewB);
equals(responder, viewA, "view A should be responder");

});