can-util
Version:
Common utilities for CanJS projects
203 lines (161 loc) • 5.97 kB
JavaScript
require('./removed');
var each = require('../../../js/each/each');
var domEvents = require('../events');
var getMutationObserver = require('can-globals/mutation-observer/mutation-observer');
var domMutate = require("../../mutate/mutate");
var unit = require('../../../test/qunit');
var events = [];
var addEvent = function(el, event, handler){
domEvents.addEventListener.call(el, event, handler);
events.push({
el: el,
event: event,
handler: handler
});
};
var removeEvents = function() {
if(events.length) {
each(events, function(ev) {
domEvents.removeEventListener.call(ev.el, ev.event, ev.handler);
});
}
events = [];
};
QUnit.module("can-util/dom/events/removed", {
teardown: removeEvents
});
var _MutationObserver = getMutationObserver();
if(_MutationObserver) {
unit.test('with mutation observer - basic removal - removeChild', function (assert) {
var done = assert.async();
var div = document.createElement("div");
domEvents.addEventListener.call(div,"removed", function(){
assert.ok(true, "called back");
done();
});
document.getElementById("qunit-fixture").appendChild(div);
document.getElementById("qunit-fixture").removeChild(div);
});
unit.test('with mutation observer - disabled removal - removeChild', function (assert) {
var done = assert.async();
var input = document.createElement("removed");
input.disabled = true;
domEvents.addEventListener.call(input,"removed", function(){
assert.ok(true, "called back");
done();
});
document.getElementById("qunit-fixture").appendChild(input);
document.getElementById("qunit-fixture").removeChild(input);
});
unit.test('with mutation observer - basic removal - replaceChild', function (assert) {
var done = assert.async();
var div = document.createElement("div");
var div2 = document.createElement("div");
domEvents.addEventListener.call(div,"removed", function(){
assert.ok(true, "called back");
done();
});
document.getElementById("qunit-fixture").appendChild(div);
document.getElementById("qunit-fixture").replaceChild(div2,div);
});
unit.test('with mutation observer - nested removal - removeChild', function (assert) {
var done = assert.async();
var div = document.createElement("div");
var span = document.createElement("span");
div.appendChild(span);
domEvents.addEventListener.call(span,"removed", function(){
assert.ok(true, "called back");
done();
});
document.getElementById("qunit-fixture").appendChild(div);
document.getElementById("qunit-fixture").removeChild(div);
});
unit.test('with mutation observer - move', function (assert) {
var done = assert.async();
assert.expect(0);
var div = document.createElement("div");
var span = document.createElement("span");
var p = document.createElement("p");
div.appendChild(span);
div.appendChild(p);
domMutate.appendChild.call(document.getElementById("qunit-fixture"), div);
addEvent(p, "removed", function(){
assert.ok(false, "called removed");
});
div.insertBefore(p, span);
done();
});
unit.test('with mutation observer - move and remove (#146)', function (assert) {
var done = assert.async();
var fixture = document.getElementById("qunit-fixture");
var div = document.createElement("div");
var span = document.createElement("span");
var p = document.createElement("p");
div.appendChild(span);
div.appendChild(p);
domMutate.appendChild.call(fixture, div);
var div2 = document.createElement("div");
domMutate.appendChild.call(fixture, div2);
addEvent(p, "removed", function(){
assert.ok(false, "called removed");
});
addEvent(div2, "removed", function(){
assert.ok(true, "div removed");
done();
});
div.insertBefore(p, span);
domMutate.removeChild.call(fixture, div2);
});
unit.test('with mutation observer - remaining event handlers fire after one is removed (#236)', function (assert) {
var done = assert.async();
var div = document.createElement("div");
domEvents.addEventListener.call(div,"removed", function (){
assert.ok(true, "called back");
done();
});
function removeTwo () {}
domEvents.addEventListener.call(div, "removed", removeTwo);
domEvents.removeEventListener.call(div, "removed", removeTwo);
document.getElementById("qunit-fixture").appendChild(div);
document.getElementById("qunit-fixture").removeChild(div);
});
}
unit.test('basic removal without mutation observer - removeChild', function (assert) {
var done = assert.async();
getMutationObserver(null);
var div = document.createElement("div");
domEvents.addEventListener.call(div,"removed", function(){
assert.ok(true, "called back");
getMutationObserver(_MutationObserver);
done();
});
domMutate.appendChild.call(document.getElementById("qunit-fixture"), div);
domMutate.removeChild.call(document.getElementById("qunit-fixture"), div);
});
unit.test('disabled removal without mutation observer - removeChild', function (assert) {
var done = assert.async();
getMutationObserver(null);
var input = document.createElement("input");
input.disabled = true;
domEvents.addEventListener.call(input,"removed", function(){
assert.ok(true, "called back");
getMutationObserver(_MutationObserver);
done();
});
domMutate.appendChild.call(document.getElementById("qunit-fixture"), input);
domMutate.removeChild.call(document.getElementById("qunit-fixture"), input);
});
unit.test('basic insertion without mutation observer - replaceChild', function (assert) {
var done = assert.async();
getMutationObserver(null);
var div = document.createElement("div");
var div2 = document.createElement("div");
domEvents.addEventListener.call(div,"removed", function(){
assert.ok(true, "called back");
getMutationObserver(_MutationObserver);
done();
});
domMutate.appendChild.call(document.getElementById("qunit-fixture"), div);
domMutate.replaceChild.call(document.getElementById("qunit-fixture"), div2,div);
});
;