topical media & game development
mobile-sugar-test-NodeTest.js / js
(function() {
'use strict';
module('Node');
test('constructor, properties, and getters', function() {
var node1 = new DivSugar.Node('node1');
ok(node1.div instanceof HTMLDivElement);
strictEqual(node1.div.id, 'node1');
strictEqual(node1.div.sugar, node1);
strictEqual(node1.getParent(), null);
strictEqual(node1.getWidth(), 0);
strictEqual(node1.getHeight(), 0);
strictEqual(node1.getPositionX(), 0);
strictEqual(node1.getPositionY(), 0);
strictEqual(node1.getPositionZ(), 0);
strictEqual(node1.getVisible(), true);
strictEqual(node1.getBackface(), true);
strictEqual(node1.getClip(), false);
strictEqual(node1.getOpacity(), 1);
strictEqual(node1.getImage(), null);
strictEqual(node1.getImageClipU1(), 0);
strictEqual(node1.getImageClipV1(), 0);
strictEqual(node1.getImageClipU2(), 1);
strictEqual(node1.getImageClipV2(), 1);
var node2 = new DivSugar.Scene();
strictEqual(node2.div.id, '');
});
test('append', function() {
var node1 = new DivSugar.Node();
var node2 = new DivSugar.Node();
node1.append(node2);
strictEqual(node2.getParent(), node1);
ok(node1.append(node2).append(node2));
});
test('appendTo', function() {
var node1 = new DivSugar.Node();
var node2 = new DivSugar.Node();
node1.appendTo(node2);
strictEqual(node1.getParent(), node2);
ok(node1.appendTo(node2).appendTo(node2));
});
test('remove', function() {
var node1 = new DivSugar.Node();
var node2 = new DivSugar.Node();
node1.append(node2);
node1.remove(node2);
strictEqual(node2.getParent(), null);
ok(node1.remove(node2).remove(node2));
});
test('getPosition', function() {
var vec = new DivSugar.Vector(1, 2, 3);
var node = new DivSugar.Node();
node.getPosition(vec);
deepEqual(vec, DivSugar.Vector.ZERO);
ok(node.getPosition(vec).getPosition(vec));
});
test('getTransform', function() {
var mat = new DivSugar.Matrix(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12);
var node = new DivSugar.Node();
node.getTransform(mat);
deepEqual(mat, DivSugar.Matrix.UNIT);
ok(node.getTransform(mat).getTransform(mat));
});
test('setSize', function() {
var node = new DivSugar.Node();
node.setSize(10, 20);
strictEqual(node.getWidth(), 10);
strictEqual(node.getHeight(), 20);
ok(node.setSize(1, 1).setSize(1, 1));
});
test('setPosition', function() {
var vec = new DivSugar.Vector(40, 50, 60);
var node = new DivSugar.Node();
node.setPosition(10, 20, 30);
strictEqual(node.getPositionX(), 10);
strictEqual(node.getPositionY(), 20);
strictEqual(node.getPositionZ(), 30);
node.setPosition(vec);
strictEqual(node.getPositionX(), 40);
strictEqual(node.getPositionY(), 50);
strictEqual(node.getPositionZ(), 60);
raises(function() {
node.setPosition(1, 2);
}, function(e) {
strictEqual(e, 'DivSugar: Invalid number of arguments');
return true;
});
ok(node.setPosition(0, 0, 0).setPosition(vec).setPosition(1, 1, 1));
});
test('setTransform', function() {
var mat1 = new DivSugar.Matrix(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12);
var mat2 = new DivSugar.Matrix();
var node = new DivSugar.Node();
node.setTransform(mat1);
node.getTransform(mat2);
deepEqual(mat2, mat1);
ok(node.setTransform(mat1).setTransform(mat1));
});
test('setVisible', function() {
var node = new DivSugar.Node();
node.setVisible(false);
strictEqual(node.getVisible(), false);
ok(node.setVisible(true).setVisible(true));
});
test('setBackface', function() {
var node = new DivSugar.Node();
node.setBackface(false);
strictEqual(node.getBackface(), false);
ok(node.setBackface(true).setBackface(true));
});
test('setClip', function() {
var node = new DivSugar.Node();
node.setClip(true);
strictEqual(node.getClip(), true);
ok(node.setClip(true).setClip(true));
});
test('setOpacity', function() {
var node = new DivSugar.Node();
node.setOpacity(0.5);
strictEqual(node.getOpacity(), 0.5);
ok(node.setOpacity(0).setOpacity(0));
});
test('setImage', function() {
var node = new DivSugar.Node();
node.setImage('../examples/assets/coin.png');
strictEqual(node.getImage(), '../examples/assets/coin.png');
node.setImage('../examples/assets/coin.png', function(width, height) {
start();
strictEqual(width, 400);
strictEqual(height, 200);
});
stop();
ok(node.setImage(null).setImage(null));
});
test('setImageClip', function() {
var node = new DivSugar.Node();
node.setImageClip(0.1, 0.2, 0.3, 0.4);
strictEqual(node.getImageClipU1(), 0.1);
strictEqual(node.getImageClipV1(), 0.2);
strictEqual(node.getImageClipU2(), 0.3);
strictEqual(node.getImageClipV2(), 0.4);
node.setImageClip(-1, -2, -3, -4);
strictEqual(node.getImageClipU1(), 0);
strictEqual(node.getImageClipV1(), 0);
strictEqual(node.getImageClipU2(), 0);
strictEqual(node.getImageClipV2(), 0);
node.setImageClip(2, 3, 4, 5);
strictEqual(node.getImageClipU1(), 1);
strictEqual(node.getImageClipV1(), 1);
strictEqual(node.getImageClipU2(), 1);
strictEqual(node.getImageClipV2(), 1);
ok(node.setImageClip(0, 0, 0, 0).setImageClip(0, 0, 0, 0));
});
test('translate', function() {
var mat1 = new DivSugar.Matrix();
var mat2 = new DivSugar.Matrix();
var node = new DivSugar.Node();
node.setTransform(mat1);
node.translate(10, 20, 30);
mat1.translate(10, 20, 30);
node.getTransform(mat2);
deepEqual(mat2, mat1);
raises(function() {
node.translate(1, 2);
}, function(e) {
strictEqual(e, 'DivSugar: Invalid number of arguments');
return true;
});
ok(node.translate(0, 0, 0).translate(0, 0, 0));
});
test('rotate', function() {
var mat1 = new DivSugar.Matrix();
var mat2 = new DivSugar.Matrix();
var node = new DivSugar.Node();
node.setTransform(mat1);
node.rotate(10, 20, 30);
mat1.rotate(10, 20, 30);
node.getTransform(mat2);
nearlyEqual(mat2, mat1);
raises(function() {
node.rotate(90, 90);
}, function(e) {
strictEqual(e, 'DivSugar: Invalid number of arguments');
return true;
});
ok(node.rotate(0, 0, 0).rotate(0, 0, 0));
});
test('rotateAround', function() {
var vec = new DivSugar.Vector();
var mat1 = new DivSugar.Matrix();
var mat2 = new DivSugar.Matrix();
var node = new DivSugar.Node();
vec.set(1, 1, 1).normalize();
mat1.set(0, 0, -1, -1, 0, 0, 0, 1, 0, 100, 200, 300);
node.setTransform(mat1);
node.rotateAround(vec, 90);
mat1.rotateAround(vec, 90);
node.getTransform(mat2);
nearlyEqual(mat2, mat1);
ok(node.rotateAround(vec, 0).rotateAround(vec, 0));
});
test('scale', function() {
var mat1 = new DivSugar.Matrix();
var mat2 = new DivSugar.Matrix();
var node = new DivSugar.Node();
node.setTransform(mat1);
node.scale(10, 20, 30);
mat1.scale(10, 20, 30);
node.getTransform(mat2);
deepEqual(mat2, mat1);
raises(function() {
node.scale(2, 3);
}, function(e) {
strictEqual(e, 'DivSugar: Invalid number of arguments');
return true;
});
ok(node.scale(1, 1, 1).scale(1, 1, 1));
});
test('playAnimation', function() {
var callCount = 0;
var mat = new DivSugar.Matrix();
var func = function() { callCount++; };
var anim1 = [['call', func, func]];
var anim2 = [
['to', {
size: [100, 200],
position: [1, 2, 3],
transform: new DivSugar.Matrix().rotate(0, 90, 0),
visible: false,
backface: false,
clip: true,
opacity: 0.5,
image: '../examples/assets/coin.png',
imageClip: [0.1, 0.2, 0.3, 0.4],
translate: [10, 20, 30],
rotate: [10, 20, 30],
scale: [1, 2, 3]
}, 10, DivSugar.Ease.quadInOut ],
['play', anim1, anim1],
['wait', 5],
['repeat', 2],
['wait', 5]
];
var anim3 = [['to', { dummy: 0 }, 10]];
var anim4 = [['dummy']];
var node = new DivSugar.Node();
var task = node.playAnimation(anim2);
strictEqual(callCount, 0);
strictEqual(task.animation, anim2);
strictEqual(task.getParent(), DivSugar.rootTask);
strictEqual(node.getWidth(), 0);
strictEqual(node.getHeight(), 0);
strictEqual(node.getVisible(), true);
strictEqual(node.getBackface(), true);
strictEqual(node.getClip(), false);
strictEqual(node.getOpacity(), 1);
strictEqual(node.getImage(), null);
strictEqual(node.getImageClipU1(), 0);
strictEqual(node.getImageClipV1(), 0);
strictEqual(node.getImageClipU2(), 1);
strictEqual(node.getImageClipV2(), 1);
node.getTransform(mat);
deepEqual(mat, DivSugar.Matrix.UNIT);
DivSugar.rootTask.update(10);
strictEqual(callCount, 0);
strictEqual(task.getParent(), DivSugar.rootTask);
strictEqual(node.getWidth(), 100);
strictEqual(node.getHeight(), 200);
strictEqual(node.getVisible(), false);
strictEqual(node.getBackface(), false);
strictEqual(node.getClip(), true);
strictEqual(node.getOpacity(), 0.5);
strictEqual(node.getImage(), '../examples/assets/coin.png');
strictEqual(node.getImageClipU1(), 0.1);
strictEqual(node.getImageClipV1(), 0.2);
strictEqual(node.getImageClipU2(), 0.3);
strictEqual(node.getImageClipV2(), 0.4);
node.getTransform(mat);
deepEqual(mat, new DivSugar.Matrix().rotate(0, 90, 0).translate(10, 20, 30).rotate(10, 20, 30).scale(1, 2, 3));
DivSugar.rootTask.update(1);
strictEqual(callCount, 0);
strictEqual(task.getParent(), DivSugar.rootTask);
DivSugar.rootTask.update(1);
strictEqual(callCount, 4);
strictEqual(task.getParent(), DivSugar.rootTask);
DivSugar.rootTask.update(38);
strictEqual(callCount, 4);
strictEqual(task.getParent(), DivSugar.rootTask);
DivSugar.rootTask.update(1);
strictEqual(callCount, 12);
strictEqual(task.getParent(), null);
raises(function() {
task = node.playAnimation(anim3);
DivSugar.rootTask.update(1);
}, function(e) {
strictEqual(e, "DivSugar: Unknown animation parameter 'dummy'");
return true;
});
task.destroy();
raises(function() {
task = node.playAnimation(anim4);
DivSugar.rootTask.update(1);
}, function(e) {
strictEqual(e, "DivSugar: Unknown animation command 'dummy'");
return true;
});
task.destroy();
});
test('clearAnimations', function() {
var anim = [['wait', 1], ['repeat']];
var node = new DivSugar.Node();
var task1 = node.playAnimation(anim);
var task2 = node.playAnimation(anim);
var task3 = node.playAnimation(anim);
DivSugar.rootTask.update(10);
strictEqual(task1.getParent(), DivSugar.rootTask);
strictEqual(task2.getParent(), DivSugar.rootTask);
strictEqual(task3.getParent(), DivSugar.rootTask);
node.clearAnimations();
strictEqual(task1.getParent(), null);
strictEqual(task2.getParent(), null);
strictEqual(task3.getParent(), null);
ok(node.clearAnimations().clearAnimations());
});
test('getWorldPosition', function() {
var vec = new DivSugar.Vector();
var scn = new DivSugar.Scene();
var node1 = new DivSugar.Node().setPosition(10, 10, 10).rotate(0, 180, 0);
var node2 = new DivSugar.Node().setPosition(100, 100, 100).rotate(0, 180, 0);
var node3 = new DivSugar.Node().setPosition(1000, 1000, 1000);
node1.getWorldPosition(vec);
nearlyEqual(vec, new DivSugar.Vector(10, 10, 10));
scn.append(node1);
node1.getWorldPosition(vec);
nearlyEqual(vec, new DivSugar.Vector(10, 10, 10));
node1.append(node2);
node2.getWorldPosition(vec);
nearlyEqual(vec, new DivSugar.Vector(-90, 110, -90));
node2.append(node3);
node3.getWorldPosition(vec);
nearlyEqual(vec, new DivSugar.Vector(910, 1110, 910));
ok(node1.getWorldPosition(vec).getWorldPosition(vec));
});
test('getWorldTransform', function() {
var mat = new DivSugar.Matrix();
var scn = new DivSugar.Scene();
var node1 = new DivSugar.Node().setPosition(10, 10, 10).rotate(0, 180, 0);
var node2 = new DivSugar.Node().setPosition(100, 100, 100).rotate(0, 180, 0);
var node3 = new DivSugar.Node().setPosition(1000, 1000, 1000);
node1.getWorldTransform(mat);
nearlyEqual(mat, new DivSugar.Matrix().translate(10, 10, 10).rotate(0, 180, 0));
scn.append(node1);
node1.getWorldTransform(mat);
nearlyEqual(mat, new DivSugar.Matrix().translate(10, 10, 10).rotate(0, 180, 0));
node1.append(node2);
node2.getWorldTransform(mat);
nearlyEqual(mat, new DivSugar.Matrix().translate(-90, 110, -90));
node2.append(node3);
node3.getWorldTransform(mat);
nearlyEqual(mat, new DivSugar.Matrix().translate(910, 1110, 910));
ok(node1.getWorldTransform(mat).getWorldTransform(mat));
});
})();
(C) Æliens
04/09/2009
You may not copy or print any of this material without explicit permission of the author or the publisher.
In case of other copyright issues, contact the author.