0898014ebd
In 4.0.20 all tests were reworked. The 'testrunner' was removed and the PhantomJS Runner QUnit plugin was added making it possible to run the tests from cli. However it is still necessary to run the tests in all supported browsers to test the fixes for all browser quirks and normalization. Also all tests are loaded in one html file. See #27014 git-svn-id: https://develop.svn.wordpress.org/trunk@27679 602fd350-edb4-49c9-b593-d223f7449a82
442 lines
10 KiB
JavaScript
442 lines
10 KiB
JavaScript
var eventUtils = tinymce.dom.Event;
|
|
|
|
module("tinymce.dom.Event", {
|
|
setupModule: function() {
|
|
document.getElementById('view').innerHTML = (
|
|
'<div id="content" tabindex="0">' +
|
|
'<div id="inner" tabindex="0"></div>' +
|
|
'</div>'
|
|
);
|
|
},
|
|
|
|
teardown: function() {
|
|
eventUtils.clean(window);
|
|
}
|
|
});
|
|
|
|
test("unbind all", function() {
|
|
var result;
|
|
|
|
eventUtils.bind(window, 'click', function() {
|
|
result.click = true;
|
|
});
|
|
|
|
eventUtils.bind(window, 'keydown', function() {
|
|
result.keydown1 = true;
|
|
});
|
|
|
|
eventUtils.bind(window, 'keydown', function() {
|
|
result.keydown2 = true;
|
|
});
|
|
|
|
result = {};
|
|
eventUtils.fire(window, 'click');
|
|
eventUtils.fire(window, 'keydown');
|
|
deepEqual(result, {click: true, keydown1: true, keydown2: true});
|
|
|
|
eventUtils.unbind(window);
|
|
result = {};
|
|
eventUtils.fire(window, 'click');
|
|
eventUtils.fire(window, 'keydown');
|
|
deepEqual(result, {});
|
|
});
|
|
|
|
test("unbind event", function() {
|
|
var result;
|
|
|
|
eventUtils.bind(window, 'click', function() {
|
|
result.click = true;
|
|
});
|
|
|
|
eventUtils.bind(window, 'keydown', function() {
|
|
result.keydown1 = true;
|
|
});
|
|
|
|
eventUtils.bind(window, 'keydown', function() {
|
|
result.keydown2 = true;
|
|
});
|
|
|
|
result = {};
|
|
eventUtils.fire(window, 'click');
|
|
eventUtils.fire(window, 'keydown');
|
|
deepEqual(result, {click: true, keydown1: true, keydown2: true});
|
|
|
|
eventUtils.unbind(window, 'click');
|
|
result = {};
|
|
eventUtils.fire(window, 'click');
|
|
eventUtils.fire(window, 'keydown');
|
|
deepEqual(result, {keydown1: true, keydown2: true});
|
|
});
|
|
|
|
test("unbind event non existing", function() {
|
|
eventUtils.unbind(window, 'noevent');
|
|
ok(true, "No exception");
|
|
});
|
|
|
|
test("unbind callback", function() {
|
|
var result;
|
|
|
|
eventUtils.bind(window, 'click', function() {
|
|
result.click = true;
|
|
});
|
|
|
|
eventUtils.bind(window, 'keydown', function() {
|
|
result.keydown1 = true;
|
|
});
|
|
|
|
function callback2() {
|
|
result.keydown2 = true;
|
|
}
|
|
|
|
eventUtils.bind(window, 'keydown', callback2);
|
|
|
|
result = {};
|
|
eventUtils.fire(window, 'click');
|
|
eventUtils.fire(window, 'keydown');
|
|
deepEqual(result, {click: true, keydown1: true, keydown2: true});
|
|
|
|
eventUtils.unbind(window, 'keydown', callback2);
|
|
result = {};
|
|
eventUtils.fire(window, 'click');
|
|
eventUtils.fire(window, 'keydown');
|
|
deepEqual(result, {click: true, keydown1: true});
|
|
});
|
|
|
|
test("unbind multiple", function() {
|
|
var result;
|
|
|
|
eventUtils.bind(window, 'mouseup mousedown click', function(e) {
|
|
result[e.type] = true;
|
|
});
|
|
|
|
eventUtils.unbind(window, 'mouseup mousedown');
|
|
|
|
result = {};
|
|
eventUtils.fire(window, 'mouseup');
|
|
eventUtils.fire(window, 'mousedown');
|
|
eventUtils.fire(window, 'click');
|
|
deepEqual(result, {click: true});
|
|
});
|
|
|
|
test("bind multiple", function() {
|
|
var result;
|
|
|
|
eventUtils.bind(window, 'mouseup mousedown', function(e) {
|
|
result[e.type] = true;
|
|
});
|
|
|
|
result = {};
|
|
eventUtils.fire(window, 'mouseup');
|
|
eventUtils.fire(window, 'mousedown');
|
|
eventUtils.fire(window, 'click');
|
|
deepEqual(result, {mouseup: true, mousedown: true});
|
|
});
|
|
|
|
test("bind/fire bubbling", function() {
|
|
var result;
|
|
|
|
eventUtils.bind(window, 'click', function() {
|
|
result.window = true;
|
|
});
|
|
|
|
eventUtils.bind(document, 'click', function() {
|
|
result.document = true;
|
|
});
|
|
|
|
eventUtils.bind(document.body, 'click', function() {
|
|
result.body = true;
|
|
});
|
|
|
|
eventUtils.bind(document.getElementById('content'), 'click', function() {
|
|
result.content = true;
|
|
});
|
|
|
|
eventUtils.bind(document.getElementById('inner'), 'click', function() {
|
|
result.inner = true;
|
|
});
|
|
|
|
result = {};
|
|
eventUtils.fire(window, 'click');
|
|
deepEqual(result, {window: true});
|
|
|
|
result = {};
|
|
eventUtils.fire(document, 'click');
|
|
deepEqual(result, {document: true, window: true});
|
|
|
|
result = {};
|
|
eventUtils.fire(document.body, 'click');
|
|
deepEqual(result, {body: true, document: true, window: true});
|
|
|
|
result = {};
|
|
eventUtils.fire(document.getElementById('content'), 'click');
|
|
deepEqual(result, {content: true, body: true, document: true, window: true});
|
|
|
|
result = {};
|
|
eventUtils.fire(document.getElementById('inner'), 'click');
|
|
deepEqual(result, {inner: true, content: true, body: true, document: true, window: true});
|
|
});
|
|
|
|
test("bind/fire stopImmediatePropagation", function() {
|
|
var result;
|
|
|
|
eventUtils.bind(window, 'click', function() {
|
|
result.click1 = true;
|
|
});
|
|
|
|
eventUtils.bind(window, 'click', function(e) {
|
|
result.click2 = true;
|
|
e.stopImmediatePropagation();
|
|
});
|
|
|
|
eventUtils.bind(window, 'click', function() {
|
|
result.click3 = true;
|
|
});
|
|
|
|
result = {};
|
|
eventUtils.fire(window, 'click');
|
|
deepEqual(result, {click1: true, click2: true});
|
|
});
|
|
|
|
test("bind/fire stopPropagation", function() {
|
|
var result;
|
|
|
|
eventUtils.bind(window, 'click', function() {
|
|
result.click1 = true;
|
|
});
|
|
|
|
eventUtils.bind(document.body, 'click', function() {
|
|
result.click2 = true;
|
|
});
|
|
|
|
eventUtils.bind(document.getElementById('inner'), 'click', function(e) {
|
|
result.click3 = true;
|
|
e.stopPropagation();
|
|
});
|
|
|
|
result = {};
|
|
eventUtils.fire(document.getElementById('inner'), 'click');
|
|
deepEqual(result, {click3: true});
|
|
});
|
|
|
|
test("clean window", function() {
|
|
var result;
|
|
|
|
eventUtils.bind(window, 'click', function() {
|
|
result.click1 = true;
|
|
});
|
|
|
|
eventUtils.bind(document.body, 'click', function() {
|
|
result.click2 = true;
|
|
});
|
|
|
|
eventUtils.bind(document.getElementById('content'), 'click', function() {
|
|
result.click3 = true;
|
|
});
|
|
|
|
eventUtils.bind(document.getElementById('inner'), 'click', function() {
|
|
result.click4 = true;
|
|
});
|
|
|
|
result = {};
|
|
eventUtils.fire(document.getElementById('inner'), 'click');
|
|
deepEqual(result, {click1: true, click2: true, click3: true, click4: true});
|
|
|
|
eventUtils.clean(window);
|
|
result = {};
|
|
eventUtils.fire(document.getElementById('inner'), 'click');
|
|
deepEqual(result, {});
|
|
});
|
|
|
|
test("clean document", function() {
|
|
var result;
|
|
|
|
eventUtils.bind(window, 'click', function() {
|
|
result.click1 = true;
|
|
});
|
|
|
|
eventUtils.bind(document, 'click', function() {
|
|
result.click2 = true;
|
|
});
|
|
|
|
eventUtils.bind(document.body, 'click', function() {
|
|
result.click3 = true;
|
|
});
|
|
|
|
eventUtils.bind(document.getElementById('content'), 'click', function() {
|
|
result.click4 = true;
|
|
});
|
|
|
|
eventUtils.bind(document.getElementById('inner'), 'click', function() {
|
|
result.click5 = true;
|
|
});
|
|
|
|
result = {};
|
|
eventUtils.fire(document.getElementById('inner'), 'click');
|
|
deepEqual(result, {click1: true, click2: true, click3: true, click4: true, click5: true});
|
|
|
|
eventUtils.clean(document);
|
|
result = {};
|
|
eventUtils.fire(document.getElementById('inner'), 'click');
|
|
deepEqual(result, {click1: true});
|
|
});
|
|
|
|
test("clean element", function() {
|
|
var result;
|
|
|
|
eventUtils.bind(window, 'click', function() {
|
|
result.click1 = true;
|
|
});
|
|
|
|
eventUtils.bind(document.body, 'click', function() {
|
|
result.click2 = true;
|
|
});
|
|
|
|
eventUtils.bind(document.getElementById('content'), 'click', function() {
|
|
result.click3 = true;
|
|
});
|
|
|
|
eventUtils.bind(document.getElementById('inner'), 'click', function() {
|
|
result.click4 = true;
|
|
});
|
|
|
|
result = {};
|
|
eventUtils.fire(document.getElementById('inner'), 'click');
|
|
deepEqual(result, {click1: true, click2: true, click3: true, click4: true});
|
|
|
|
eventUtils.clean(document.getElementById('content'));
|
|
result = {};
|
|
eventUtils.fire(document.getElementById('inner'), 'click');
|
|
deepEqual(result, {click1: true, click2: true});
|
|
});
|
|
|
|
test("mouseenter/mouseleave bind/unbind", function() {
|
|
var result = {};
|
|
|
|
eventUtils.bind(document.body, 'mouseenter mouseleave', function(e) {
|
|
result[e.type] = true;
|
|
});
|
|
|
|
eventUtils.fire(document.body, 'mouseenter');
|
|
eventUtils.fire(document.body, 'mouseleave');
|
|
|
|
deepEqual(result, {mouseenter: true, mouseleave: true});
|
|
|
|
result = {};
|
|
eventUtils.clean(document.body);
|
|
eventUtils.fire(document.body, 'mouseenter');
|
|
eventUtils.fire(document.body, 'mouseleave');
|
|
deepEqual(result, {});
|
|
});
|
|
|
|
asyncTest("focusin/focusout bind/unbind", function() {
|
|
var result = {};
|
|
|
|
window.setTimeout(function() {
|
|
eventUtils.bind(document.body, 'focusin focusout', function(e) {
|
|
// IE will fire a focusout on the parent element if you focus an element within not a big deal so lets detect it in the test
|
|
if (e.type == "focusout" && e.target.contains(document.activeElement)) {
|
|
return;
|
|
}
|
|
|
|
result[e.type] = result[e.type] ? ++result[e.type] : 1;
|
|
});
|
|
|
|
start();
|
|
document.getElementById('content').focus();
|
|
document.getElementById('inner').focus();
|
|
|
|
deepEqual(result, {focusin: 2, focusout: 1});
|
|
}, 0);
|
|
});
|
|
|
|
test("bind unbind fire clean on null", function() {
|
|
eventUtils.bind(null, 'click', function() {});
|
|
eventUtils.unbind(null, 'click', function() {});
|
|
eventUtils.fire(null, {});
|
|
eventUtils.clean(null);
|
|
ok(true, "No exception");
|
|
});
|
|
|
|
test("bind ready when page is loaded", function() {
|
|
var ready;
|
|
|
|
eventUtils.bind(window, 'ready', function() {
|
|
ready = true;
|
|
});
|
|
|
|
ok(eventUtils.domLoaded, "DomLoaded state true");
|
|
ok(ready, "Window is ready.");
|
|
});
|
|
|
|
test("event states when event object is fired twice", function() {
|
|
var result = {};
|
|
|
|
eventUtils.bind(window, 'keydown', function(e) {result[e.type] = true;e.preventDefault();e.stopPropagation();});
|
|
eventUtils.bind(window, 'keyup', function(e) {result[e.type] = true;e.stopImmediatePropagation();});
|
|
|
|
var event = {};
|
|
eventUtils.fire(window, 'keydown', event);
|
|
eventUtils.fire(window, 'keyup', event);
|
|
|
|
ok(event.isDefaultPrevented(), "Default is prevented.");
|
|
ok(event.isPropagationStopped(), "Propagation is stopped.");
|
|
ok(event.isImmediatePropagationStopped(), "Immediate propagation is stopped.");
|
|
|
|
deepEqual(result, {keydown: true, keyup: true});
|
|
});
|
|
|
|
test("unbind inside callback", function() {
|
|
var data;
|
|
|
|
function append(value) {
|
|
return function() {
|
|
data += value;
|
|
};
|
|
}
|
|
|
|
function callback() {
|
|
eventUtils.unbind(window, 'click', callback);
|
|
data += 'b';
|
|
}
|
|
|
|
data = '';
|
|
eventUtils.bind(window, 'click', append("a"));
|
|
eventUtils.bind(window, 'click', callback);
|
|
eventUtils.bind(window, 'click', append("c"));
|
|
|
|
eventUtils.fire(window, 'click', {});
|
|
equal(data, 'abc');
|
|
|
|
data = '';
|
|
eventUtils.fire(window, 'click', {});
|
|
equal(data, 'ac');
|
|
});
|
|
|
|
test("ready/DOMContentLoaded (domLoaded = true)", function() {
|
|
var evt;
|
|
|
|
eventUtils.bind(window, "ready", function(e) {evt = e;});
|
|
equal(evt.type, "ready");
|
|
});
|
|
|
|
test("ready/DOMContentLoaded (document.readyState check)", function() {
|
|
var evt;
|
|
|
|
try {
|
|
document.readyState = "loading";
|
|
} catch (e) {
|
|
ok(true, "IE doesn't allow us to set document.readyState");
|
|
return;
|
|
}
|
|
|
|
eventUtils.domLoaded = false;
|
|
document.readyState = "loading";
|
|
eventUtils.bind(window, "ready", function(e) {evt = e;});
|
|
ok(typeof(evt) !== "undefined");
|
|
|
|
eventUtils.domLoaded = false;
|
|
document.readyState = "complete";
|
|
eventUtils.bind(window, "ready", function(e) {evt = e;});
|
|
equal(evt.type, "ready");
|
|
});
|