// ========================================================================== // Project: SproutCore - JavaScript Application Framework // Copyright: ©2006-2011 Strobe Inc. and contributors. // ©2008-2011 Apple Inc. All rights reserved. // License: Licensed under MIT license (see license.js) // ========================================================================== /*global module test equals context ok same */ var S, A, a, B, Manager; module(“ResponderContext”, {

setup: function() {
  Manager = SC.Responder.create(SC.ResponderContext, {  });
  var TestResponder = SC.Responder.extend({
    didBecomeFirstResponder: function() {
      this.didBecome = YES;
      this.hasFirst = YES;
    },
    willLoseFirstResponder: function() {
      this.didLose = YES;
      this.hasFirst = NO;
    }
  });

  A = TestResponder.create();
  a = TestResponder.create({nextResponder: A});
  B = TestResponder.create();
}

});

test(“Can enter and exit states.”, function() {

Manager.makeFirstResponder(A);
ok(A.didBecome, "A did become first responder.");
ok(A.hasFirst, "A has first responder.");

Manager.makeFirstResponder(B);
ok(A.didLose, "A did lose first responder.");
ok(!A.hasFirst, "A does not have first responder.");

});

test(“Can enter and exit chained states.”, function() {

Manager.makeFirstResponder(A);
ok(A.didBecome, "A did become first responder.");
ok(A.hasFirst, "A has first responder.");

Manager.makeFirstResponder(a);
ok(!A.didLose, "A did not lose first responder.");
ok(A.hasFirst, "A has first responder.");
ok(A.didBecome, "a did become first responder.");
ok(A.hasFirst, "a has first responder.");

Manager.makeFirstResponder(B);
ok(a.didLose, "a did lose first responder.");
ok(!a.hasFirst, "a does not have first responder.");
ok(A.didLose, "A did lose first responder.");
ok(!A.hasFirst, "A does not have first responder.");

});

test(“Setting responder to the current responder does not reenter.”, function() {

Manager.makeFirstResponder(A);
ok(A.didBecome, "A did become first responder.");
ok(A.hasFirst, "A has first responder.");

A.didBecome = NO;
Manager.makeFirstResponder(A);
ok(!A.didBecome, "A did become first responder.");

});

test(“Calling 'resetFirstResponder' reenters the first responder.”, function() {

Manager.makeFirstResponder(A);
ok(A.didBecome, "A did become first responder.");
ok(A.hasFirst, "A has first responder.");

A.didBecome = NO;
Manager.resetFirstResponder();
ok(A.didLose, "A did leave.");
ok(A.didBecome, "A did reenter.");

});