topical media & game development

talk show tell print

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.