Wordpress/tests/qunit/editor/tinymce/util/EventDispatcher.js

255 lines
6.5 KiB
JavaScript

module("tinymce.util.EventDispatcher");
test("fire (no event listeners)", function() {
var dispatcher = new tinymce.util.EventDispatcher(), args;
args = dispatcher.fire('click', {test: 1});
equal(args.test, 1);
equal(args.isDefaultPrevented(), false);
equal(args.isPropagationStopped(), false);
equal(args.isImmediatePropagationStopped(), false);
strictEqual(args.target, dispatcher);
args = dispatcher.fire('click');
equal(args.isDefaultPrevented(), false);
equal(args.isPropagationStopped(), false);
equal(args.isImmediatePropagationStopped(), false);
});
test("fire (event listeners)", function() {
var dispatcher = new tinymce.util.EventDispatcher(), data = '';
dispatcher.on('click', function() {data += 'a';});
dispatcher.on('click', function() {data += 'b';});
args = dispatcher.fire('click', {test: 1});
equal(data, 'ab');
});
test("fire (event listeners) stopImmediatePropagation", function() {
var dispatcher = new tinymce.util.EventDispatcher(), data = '';
dispatcher.on('click', function(e) { data += 'a'; e.stopImmediatePropagation(); });
dispatcher.on('click', function() { data += 'b'; });
dispatcher.fire('click', {test: 1});
equal(data, 'a');
});
test("on", function() {
var dispatcher = new tinymce.util.EventDispatcher(), data = '';
strictEqual(dispatcher.on('click', function() {data += 'a';}), dispatcher);
strictEqual(dispatcher.on('click keydown', function() {data += 'b';}), dispatcher);
dispatcher.fire('click');
equal(data, 'ab');
dispatcher.fire('keydown');
equal(data, 'abb');
});
test("on (prepend)", function() {
var dispatcher = new tinymce.util.EventDispatcher(), data = '';
strictEqual(dispatcher.on('click', function() {data += 'a';}), dispatcher);
strictEqual(dispatcher.on('click', function() {data += 'b';}, true), dispatcher);
dispatcher.fire('click');
equal(data, 'ba');
});
test("once", function() {
var dispatcher = new tinymce.util.EventDispatcher(), data = '';
strictEqual(dispatcher.on('click', function() {data += 'a';}), dispatcher);
strictEqual(dispatcher.once('click', function() {data += 'b';}), dispatcher);
strictEqual(dispatcher.on('click', function() {data += 'c';}), dispatcher);
dispatcher.fire('click');
equal(data, 'abc');
dispatcher.fire('click');
equal(data, 'abcac');
});
test("once (prepend)", function() {
var dispatcher = new tinymce.util.EventDispatcher(), data = '';
strictEqual(dispatcher.on('click', function() {data += 'a';}), dispatcher);
strictEqual(dispatcher.once('click', function() {data += 'b';}, true), dispatcher);
strictEqual(dispatcher.on('click', function() {data += 'c';}), dispatcher);
dispatcher.fire('click');
equal(data, 'bac');
dispatcher.fire('click');
equal(data, 'bacac');
});
test("once (unbind)", function() {
var dispatcher = new tinymce.util.EventDispatcher(), data = '';
function handler() {
data += 'b';
}
dispatcher.once('click', function() {data += 'a';});
dispatcher.once('click', handler);
dispatcher.off('click', handler);
dispatcher.fire('click');
equal(data, 'a');
});
test("once (multiple events)", function() {
var dispatcher = new tinymce.util.EventDispatcher(), data = '';
dispatcher.once('click', function() {data += 'a';});
dispatcher.once('keydown', function() {data += 'b';});
dispatcher.fire('click');
equal(data, 'a');
dispatcher.fire('keydown');
equal(data, 'ab');
dispatcher.fire('click');
dispatcher.fire('keydown');
equal(data, 'ab');
});
test("off (all)", function() {
var dispatcher = new tinymce.util.EventDispatcher(), data = '';
function listenerA() { data += 'a'; }
function listenerB() { data += 'b'; }
function listenerC() { data += 'c'; }
dispatcher.on('click', listenerA);
dispatcher.on('click', listenerB);
dispatcher.on('keydown', listenerC);
dispatcher.off();
data = '';
dispatcher.fire('click');
dispatcher.fire('keydown');
equal(data, '');
});
test("off (all named)", function() {
var dispatcher = new tinymce.util.EventDispatcher(), data = '';
function listenerA() { data += 'a'; }
function listenerB() { data += 'b'; }
function listenerC() { data += 'c'; }
dispatcher.on('click', listenerA);
dispatcher.on('click', listenerB);
dispatcher.on('keydown', listenerC);
dispatcher.off('click');
data = '';
dispatcher.fire('click');
dispatcher.fire('keydown');
equal(data, 'c');
});
test("off (all specific observer)", function() {
var dispatcher = new tinymce.util.EventDispatcher(), data = '';
function listenerA() { data += 'a'; }
function listenerB() { data += 'b'; }
dispatcher.on('click', listenerA);
dispatcher.on('click', listenerB);
dispatcher.off('click', listenerB);
data = '';
dispatcher.fire('click');
equal(data, 'a');
});
test("scope setting", function() {
var lastScope, lastEvent, dispatcher;
dispatcher = new tinymce.util.EventDispatcher();
dispatcher.on('click', function() {
lastScope = this;
}).fire('click');
strictEqual(dispatcher, lastScope);
var scope = {test: 1};
dispatcher = new tinymce.util.EventDispatcher({scope: scope});
dispatcher.on('click', function(e) {
lastScope = this;
lastEvent = e;
}).fire('click');
strictEqual(scope, lastScope);
strictEqual(lastEvent.target, lastScope);
});
test("beforeFire setting", function() {
var lastArgs, dispatcher, args;
dispatcher = new tinymce.util.EventDispatcher({
beforeFire: function(args) {
lastArgs = args;
}
});
args = dispatcher.fire('click');
strictEqual(lastArgs, args);
});
test("beforeFire setting (stopImmediatePropagation)", function() {
var lastArgs, dispatcher, args, data = '';
dispatcher = new tinymce.util.EventDispatcher({
beforeFire: function(args) {
lastArgs = args;
args.stopImmediatePropagation();
}
});
function listenerA() { data += 'a'; }
dispatcher.on('click', listenerA);
args = dispatcher.fire('click');
strictEqual(lastArgs, args);
strictEqual(data, '');
});
test("toggleEvent setting", function() {
var lastName, lastState;
dispatcher = new tinymce.util.EventDispatcher({
toggleEvent: function(name, state) {
lastName = name;
lastState = state;
}
});
function listenerA() { data += 'a'; }
function listenerB() { data += 'b'; }
dispatcher.on('click', listenerA);
strictEqual(lastName, 'click');
strictEqual(lastState, true);
lastName = lastState = null;
dispatcher.on('click', listenerB);
strictEqual(lastName, null);
strictEqual(lastState, null);
dispatcher.off('click', listenerA);
strictEqual(lastName, null);
strictEqual(lastState, null);
dispatcher.off('click', listenerB);
strictEqual(lastName, 'click');
strictEqual(lastState, false);
});