// ========================================================================== // Project: SproutCore
- JavaScript Application Framework // Copyright: ©2006-2011 Apple Inc. and contributors. // License: Licensed under MIT license (see license.js) // ==========================================================================
/*global module test equals context ok same Q$ htmlbody */ var pane, fooView, barView, defaultResponder, evt, callCount ; module(“SC.Pane#sendEvent”, {
setup: function() { callCount = 0; var handler = function(theEvent) { callCount++ ; equals(theEvent, evt, 'should pass event'); }; defaultResponder = SC.Object.create({ defaultEvent: handler }); pane = SC.Pane.create({ defaultResponder: defaultResponder, paneEvent: handler, childViews: ['fooView'], fooView: SC.View.extend({ fooEvent: handler, childViews: ['barView'], barView: SC.View.extend({ barEvent: handler }) }) }); fooView = pane.fooView; ok(fooView.fooEvent, 'fooView has fooEvent handler'); barView = fooView.barView; ok(barView.barEvent, 'barView has barEvent handler'); evt = SC.Object.create(); // mock }, teardown: function() { pane.destroy(); pane = fooView = barView = defaultResponder = evt = null ; }
});
test(“when invoked with target = nested view”, function() {
var handler; // test event handler on target callCount = 0; handler = pane.sendEvent('barEvent', evt, barView); equals(callCount, 1, 'should invoke handler'); equals(handler, barView, 'should return view that handled event'); // test event handler on target parent callCount = 0; handler = pane.sendEvent('fooEvent', evt, barView); equals(callCount, 1, 'should invoke handler'); equals(handler, fooView, 'should return responder that handled event'); // test event handler on default responder callCount = 0; handler = pane.sendEvent('defaultEvent', evt, barView); equals(callCount, 1, 'should invoke handler'); equals(handler, defaultResponder, 'should return responder that handled event'); // test unhandled event handler callCount = 0; handler = pane.sendEvent('imaginary', evt, barView); equals(callCount, 0, 'should not invoke handler'); equals(handler, null, 'should return no responder');
});
test(“when invoked with target = middle view”, function() {
var handler ; // test event handler on child view of target callCount = 0; handler = pane.sendEvent('barEvent', evt, fooView); equals(callCount, 0, 'should not invoke handler'); equals(handler, null, 'should return no responder'); // test event handler on target callCount = 0; handler = pane.sendEvent('fooEvent', evt, fooView); equals(callCount, 1, 'should invoke handler'); equals(handler, fooView, 'should return responder that handled event'); // test event handler on default responder callCount = 0; handler = pane.sendEvent('defaultEvent', evt, fooView); equals(callCount, 1, 'should invoke handler'); equals(handler, defaultResponder, 'should return responder that handled event'); // test unhandled event handler callCount = 0; handler = pane.sendEvent('imaginary', evt, fooView); equals(callCount, 0, 'should not invoke handler'); equals(handler, null, 'should return no responder');
});
test(“when invoked with target = pane”, function() {
var handler ; // test event handler on child view of target callCount = 0; handler = pane.sendEvent('barEvent', evt, pane); equals(callCount, 0, 'should not invoke handler'); equals(handler, null, 'should return no responder'); // test event handler on target callCount = 0; handler = pane.sendEvent('fooEvent', evt, pane); equals(callCount, 0, 'should not invoke handler'); equals(handler, null, 'should return no responder'); // test event handler on default responder callCount = 0; handler = pane.sendEvent('defaultEvent', evt, pane); equals(callCount, 1, 'should invoke handler'); equals(handler, defaultResponder, 'should return responder that handled event'); // test unhandled event handler callCount = 0; handler = pane.sendEvent('imaginary', evt, pane); equals(callCount, 0, 'should not invoke handler'); equals(handler, null, 'should return no responder');
});
test(“when invoked with target = deepest descendent view and cutoff view = middle view to cut off the responder chain”, function() {
var handler; // Test arrested event handling where a handler exists on responder chain but above the cutoff view. callCount = 0; handler = pane.sendEvent('fooEvent', evt, barView, fooView); equals(callCount, 0, 'should not invoke handler found on responder chain but above the cutoff view'); equals(handler, null, 'should return no responder'); // Test arrested event handling a handler exists within the truncated responder chain. callCount = 0; handler = pane.sendEvent('barEvent', evt, barView, fooView); equals(callCount, 1, 'should invoke handler found within truncated responder chain'); equals(handler, barView, 'should return barView as having handled barEvent'); // Test that defaultResponder is NOT given an opportunity to handle an arrested event callCount = 0; handler = pane.sendEvent('defaultEvent', evt, barView, fooView); equals(callCount, 0, 'should not invoke default handler if the responder chain is truncated'); equals(handler, null, 'should return no responder');
});
test(“when invoked with target = null”, function() {
var handler ; // should start @ first responder pane.firstResponder = fooView; // test event handler on child view of target callCount = 0; handler = pane.sendEvent('barEvent', evt); equals(callCount, 0, 'should not invoke handler'); equals(handler, null, 'should return no responder'); // test event handler on target callCount = 0; handler = pane.sendEvent('fooEvent', evt); equals(callCount, 1, 'should invoke handler'); equals(handler, fooView, 'should return responder that handled event'); // test event handler on default responder callCount = 0; handler = pane.sendEvent('defaultEvent', evt); equals(callCount, 1, 'should invoke handler'); equals(handler, defaultResponder, 'should return responder that handled event'); // test unhandled event handler callCount = 0; handler = pane.sendEvent('imaginary', evt); equals(callCount, 0, 'should not invoke handler'); equals(handler, null, 'should return no responder'); // test event handler on pane itself callCount = 0; handler = pane.sendEvent('paneEvent', evt); equals(callCount, 1, 'should invoke handler on pane'); equals(handler, pane, 'should return pane as responder that handled event');
});
test(“when invoked with target = null, no default or first responder”, function() {
var handler ; // no first or default responder pane.set('firstResponder', null); pane.set('defaultResponder', null); // test event handler on child view of target callCount = 0; handler = pane.sendEvent('barEvent', evt); equals(callCount, 0, 'should not invoke handler'); equals(handler, null, 'should return no responder'); // test event handler on target callCount = 0; handler = pane.sendEvent('fooEvent', evt); equals(callCount, 0, 'should not invoke handler'); equals(handler, null, 'should return no responder'); // test unhandled event handler callCount = 0; handler = pane.sendEvent('imaginary', evt); equals(callCount, 0, 'should not invoke handler'); equals(handler, null, 'should return no responder'); // test event handler on pane itself callCount = 0; handler = pane.sendEvent('paneEvent', evt); equals(callCount, 1, 'should invoke handler on pane'); equals(handler, pane, 'should return pane as responder that handled event');
});