(function() {
var paper,
url = 'http://raphaeljs.com';
module('DOM', {
setup: function() { paper = new Raphael(document.getElementById('qunit-fixture'), 1000, 1000); }, teardown: function() { paper.remove(); }
});
var equalNodePosition = function(node, expectedParent, expectedPreviousSibling, expectedNextSibling) {
equal(node.parentNode, expectedParent); equal(node.previousSibling, expectedPreviousSibling); equal(node.nextSibling, expectedNextSibling);
};
var equalNodePositionWrapped = function(node, anchor, expectedParent, expectedPreviousSibling, expectedNextSibling) {
equal(node.parentNode, anchor); equalNodePosition(anchor, expectedParent, expectedPreviousSibling, expectedNextSibling);
};
// Element#insertBefore // ——————–
test('insertBefore: no element', function() {
var el = paper.rect(); el.insertBefore(null); equalNodePosition(el.node, paper.canvas, paper.defs, null);
});
test('insertBefore: first element', function() {
var x = paper.rect(); var el = paper.rect(); el.insertBefore(x); equalNodePosition(el.node, paper.canvas, paper.defs, x.node);
});
test('insertBefore: middle element', function() {
var x = paper.rect(); var y = paper.rect(); var el = paper.rect(); el.insertBefore(y); equalNodePosition(el.node, paper.canvas, x.node, y.node);
});
test('insertBefore: no element when wrapped in <a>', function() {
var el = paper.rect().attr('href', url), anchor = el.node.parentNode; el.insertBefore(null); equalNodePositionWrapped(el.node, anchor, paper.canvas, paper.defs, null);
});
test('insertBefore: first element when wrapped in <a>', function() {
var x = paper.rect(); var el = paper.rect().attr('href', url), anchor = el.node.parentNode; el.insertBefore(x); equalNodePositionWrapped(el.node, anchor, paper.canvas, paper.defs, x.node);
});
test('insertBefore: first element wrapped in <a> and wrapped in <a>', function() {
var x = paper.rect().attr('href', url), xAnchor = x.node.parentNode; var el = paper.rect().attr('href', url), anchor = el.node.parentNode; el.insertBefore(x); equalNodePositionWrapped(el.node, anchor, paper.canvas, paper.defs, xAnchor);
});
test('insertBefore: middle element when wrapped in <a>', function() {
var x = paper.rect(); var y = paper.rect(); var el = paper.rect().attr('href', url), anchor = el.node.parentNode; el.insertBefore(y); equalNodePositionWrapped(el.node, anchor, paper.canvas, x.node, y.node);
});
test('insertBefore: middle element wrapped in <a> and wrapped in <a>', function() {
var x = paper.rect().attr('href', url), xAnchor = x.node.parentNode; var y = paper.rect().attr('href', url), yAnchor = y.node.parentNode; var el = paper.rect().attr('href', url), anchor = el.node.parentNode; el.insertBefore(y); equalNodePositionWrapped(el.node, anchor, paper.canvas, xAnchor, yAnchor);
});
// TODO… // insertBefore: with set // insertBefore: with nested set.
// Element#insertAfter // ——————-
test('insertAfter: no element', function() {
var el = paper.rect(); el.insertAfter(null); equalNodePosition(el.node, paper.canvas, paper.defs, null);
});
test('insertAfter: last element', function() {
var x = paper.rect(); var el = paper.rect(); el.insertAfter(x); equalNodePosition(el.node, paper.canvas, x.node, null);
});
test('insertAfter: middle element', function() {
var x = paper.rect(); var y = paper.rect(); var el = paper.rect(); el.insertAfter(x); equalNodePosition(el.node, paper.canvas, x.node, y.node);
});
test('insertAfter: no element when wrapped in <a>', function() {
var el = paper.rect().attr('href', url), anchor = el.node.parentNode; el.insertAfter(null); equalNodePositionWrapped(el.node, anchor, paper.canvas, paper.defs, null);
});
test('insertAfter: last element when wrapped in <a>', function() {
var x = paper.rect(); var el = paper.rect().attr('href', url), anchor = el.node.parentNode; el.insertAfter(x); equalNodePositionWrapped(el.node, anchor, paper.canvas, x.node, null);
});
test('insertAfter: last element wrapped in <a> and wrapped in <a>', function() {
var x = paper.rect().attr('href', url), xAnchor = x.node.parentNode; var el = paper.rect().attr('href', url), anchor = el.node.parentNode; el.insertAfter(x); equalNodePositionWrapped(el.node, anchor, paper.canvas, xAnchor, null);
});
test('insertAfter: middle element when wrapped in <a>', function() {
var x = paper.rect(); var y = paper.rect(); var el = paper.rect().attr('href', url), anchor = el.node.parentNode; el.insertAfter(x); equalNodePositionWrapped(el.node, anchor, paper.canvas, x.node, y.node);
});
test('insertAfter: middle element wrapped in <a> and wrapped in <a>', function() {
var x = paper.rect().attr('href', url), xAnchor = x.node.parentNode; var y = paper.rect().attr('href', url), yAnchor = y.node.parentNode; var el = paper.rect().attr('href', url), anchor = el.node.parentNode; el.insertAfter(x); equalNodePositionWrapped(el.node, anchor, paper.canvas, xAnchor, yAnchor);
});
// TODO… // insertAfter: with set // insertAfter: with nested set.
// Element#remove // ————–
test('remove: after added', function() {
var el = paper.rect(), node = el.node; el.remove(); equal(el.node, null); equal(node.parentNode, null);
});
test('remove: when wrapped in <a>', function() {
var el = paper.rect().attr('href', url), node = el.node, anchor = node.parentNode; el.remove(); equal(el.node, null); equal(node.parentNode, anchor); equal(anchor.parentNode, null);
});
test('remove: when already removed', function() {
var el = paper.rect(), node = el.node; el.remove(); el.remove(); equal(el.node, null); equal(node.parentNode, null);
});
test('remove: when the canvas is removed', function() {
var el = paper.rect(), node = el.node; paper.remove(); el.remove(); equal(el.node, null); equal(node.parentNode, null);
});
// Element#toFront // ————–
test('toFront: normal', function() {
var el = paper.rect(); var x = paper.rect(); el.toFront(); equalNodePosition(el.node, paper.canvas, x.node, null);
});
test('toFront: when wrapped in <a>', function() {
var el = paper.rect().attr('href', url), anchor = el.node.parentNode; var x = paper.rect(); el.toFront(); equalNodePositionWrapped(el.node, anchor, paper.canvas, x.node, null);
});
// Element#toBack // ————–
test('toBack: normal', function() {
var x = paper.rect(); var el = paper.rect(); el.toBack(); equalNodePosition(el.node, paper.canvas, null, paper.desc); equalNodePosition(x.node, paper.canvas, paper.defs, null);
});
test('toBack: when wrapped in <a>', function() {
var x = paper.rect(); var el = paper.rect().attr('href', url), anchor = el.node.parentNode; el.toBack(); equalNodePositionWrapped(el.node, anchor, paper.canvas, null, paper.desc); equalNodePosition(x.node, paper.canvas, paper.defs, null);
});
// Element#attrs // ————-
// x
// y
// rx
// ry
// transform
// title
// href
//keep adding and testing!
})();