From 54d80063621011eb11f59824c94a894d9cd8ea41 Mon Sep 17 00:00:00 2001 From: Eric Rowell Date: Thu, 8 Mar 2012 00:05:00 -0800 Subject: [PATCH] adding unit tests and functional tests. Need to add more tests when possible. --- tests/base.css | 28 + tests/darth-vader.jpg | Bin 0 -> 117044 bytes tests/functionalTests.html | 16 + tests/functionalTests.js | 506 +++++++++++++++ tests/testMethods.js | 41 ++ tests/unitTests.html | 16 + tests/unitTests.js | 1190 ++++++++++++++++++++++++++++++++++++ 7 files changed, 1797 insertions(+) create mode 100644 tests/base.css create mode 100644 tests/darth-vader.jpg create mode 100644 tests/functionalTests.html create mode 100644 tests/functionalTests.js create mode 100644 tests/testMethods.js create mode 100644 tests/unitTests.html create mode 100644 tests/unitTests.js diff --git a/tests/base.css b/tests/base.css new file mode 100644 index 00000000..9e7d8570 --- /dev/null +++ b/tests/base.css @@ -0,0 +1,28 @@ +body { + margin: 0px; + padding: 0px; + font-family: monospace +} + +canvas { + border-right: 2px solid #9C9898; +} + +div { + height: 200px; +} + +p { + padding: 0px; + margin: 0px; +} + +.green { + background-color: green; + color: white; +} + +.red { + background-color: red; + color: white; +} \ No newline at end of file diff --git a/tests/darth-vader.jpg b/tests/darth-vader.jpg new file mode 100644 index 0000000000000000000000000000000000000000..20d0229cb94ccf3510421098217a2aca43321678 GIT binary patch literal 117044 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�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�+*_l`ULa(Dv(Sf&_(SrKeo!6V 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 F{{y?tYry~j literal 0 HcmV?d00001 diff --git a/tests/functionalTests.html b/tests/functionalTests.html new file mode 100644 index 00000000..c536157f --- /dev/null +++ b/tests/functionalTests.html @@ -0,0 +1,16 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/tests/functionalTests.js b/tests/functionalTests.js new file mode 100644 index 00000000..57c9e5b8 --- /dev/null +++ b/tests/functionalTests.js @@ -0,0 +1,506 @@ +function Test(){ + this.testOnly = ""; + this.counter = 0; + this.tests = { + "DRAG AND DROP - draggable true": function(containerId){ + var stage = new Kinetic.Stage(containerId, 578, 200); + var layer = new Kinetic.Layer(); + var circle = new Kinetic.Circle({ + x: stage.width / 2, + y: stage.height / 2, + radius: 70, + fill: "red", + stroke: "black", + strokeWidth: 4 + }); + + circle.draggable(true); + + layer.add(circle); + stage.add(layer); + }, + "DRAG AND DROP - draggable true false": function(containerId){ + var stage = new Kinetic.Stage(containerId, 578, 200); + var layer = new Kinetic.Layer(); + var circle = new Kinetic.Circle({ + x: stage.width / 2, + y: stage.height / 2, + radius: 70, + fill: "red", + stroke: "black", + strokeWidth: 4 + }); + + circle.draggable(true); + + layer.add(circle); + stage.add(layer); + + circle.draggable(false); + }, + "DRAG AND DROP - scale stage after add layer then drag and drop shape": function(containerId){ + var stage = new Kinetic.Stage(containerId, 578, 200); + var layer = new Kinetic.Layer(); + var circle = new Kinetic.Circle({ + x: stage.width / 2, + y: stage.height / 2, + radius: 70, + fill: "red", + stroke: "black", + strokeWidth: 4 + }); + + circle.draggable(true); + + layer.add(circle); + stage.add(layer); + + stage.setScale(0.5); + + stage.draw(); + }, + "DRAG AND DROP - scale stage before add shape then drag and drop shape": function(containerId){ + var stage = new Kinetic.Stage(containerId, 578, 200); + var layer = new Kinetic.Layer(); + var circle = new Kinetic.Circle({ + x: stage.width / 2, + y: stage.height / 2, + radius: 70, + fill: "red", + stroke: "black", + strokeWidth: 4 + }); + + circle.draggable(true); + + stage.setScale(0.5); + layer.add(circle); + stage.add(layer); + }, + "DRAG AND DROP - set stage scale to 1.5 after add layer then drag and drop shape": function(containerId){ + var stage = new Kinetic.Stage(containerId, 578, 200); + var layer = new Kinetic.Layer(); + var circle = new Kinetic.Circle({ + x: stage.width / 2, + y: stage.height / 2, + radius: 70, + fill: "red", + stroke: "black", + strokeWidth: 4 + }); + + circle.draggable(true); + + layer.add(circle); + stage.add(layer); + + stage.setScale(1.5); + + stage.draw(); + }, + "DRAG AND DROP - set stage scale to 1.5 before add layer then drag and drop shape": function(containerId){ + var stage = new Kinetic.Stage(containerId, 578, 200); + var layer = new Kinetic.Layer(); + var circle = new Kinetic.Circle({ + x: stage.width / 2, + y: stage.height / 2, + radius: 70, + fill: "red", + stroke: "black", + strokeWidth: 4 + }); + + circle.draggable(true); + + stage.setScale(1.5); + + layer.add(circle); + stage.add(layer); + }, + "DRAG AND DROP - check that other events are disabled": function(containerId){ + var stage = new Kinetic.Stage(containerId, 578, 200); + var layer = new Kinetic.Layer(); + var circle1 = new Kinetic.Circle({ + x: stage.width / 2, + y: stage.height / 2, + radius: 70, + fill: "red", + stroke: "black", + strokeWidth: 4 + }); + + var circle2 = new Kinetic.Circle({ + x: stage.width / 2 + 50, + y: stage.height / 2, + radius: 70, + fill: "green", + stroke: "black", + strokeWidth: 4 + }); + + circle1.draggable(true); + + circle2.on("mouseover", function(){ + log("mouseover green circle"); + }); + + layer.add(circle1); + layer.add(circle2); + stage.add(layer); + }, + "EVENTS - mousedown mouseup mouseover mouseout click dblclick": function(containerId){ + var stage = new Kinetic.Stage(containerId, 578, 200); + var layer = new Kinetic.Layer(); + var circle = new Kinetic.Circle({ + x: stage.width / 2, + y: stage.height / 2, + radius: 70, + fill: "red", + stroke: "black", + strokeWidth: 4, + draggable: true + }); + + circle.on('mousedown', function(){ + log('mousedown'); + }); + + circle.on('mouseup', function(){ + log('mouseup'); + }); + + circle.on('mouseover', function(){ + log('mouseover'); + }); + + circle.on('mouseout', function(){ + log('mouseout'); + }); + + circle.on('click', function(){ + log('click'); + }); + + circle.on('dblclick', function(){ + log('dblclick'); + }); + + layer.add(circle); + stage.add(layer); + }, + "EVENTS - modify fill stroke and stroke width": function(containerId){ + var stage = new Kinetic.Stage(containerId, 578, 200); + var layer = new Kinetic.Layer(); + var circle = new Kinetic.Circle({ + x: 380, + y: stage.height / 2, + radius: 70, + strokeWidth: 4, + fill: "red", + stroke: "black" + }); + + circle.on("mouseover", function(){ + this.setFill("yellow"); + this.setStroke("purple"); + this.setStrokeWidth(20); + layer.draw(); + }); + + circle.on("mouseout", function(){ + this.setFill("red"); + this.setStroke("black"); + this.setStrokeWidth(4); + layer.draw(); + }); + + layer.add(circle); + stage.add(layer); + }, + "EVENTS - 10 point star geometry modify stroke fill and stroke width": function(containerId){ + var stage = new Kinetic.Stage(containerId, 578, 200); + var layer = new Kinetic.Layer(); + + var star = new Kinetic.Star({ + x: 200, + y: 100, + points: 10, + innerRadius: 40, + outerRadius: 70, + fill: "green", + stroke: "blue", + strokeWidth: 5, + name: "foobar" + }); + + star.on("mouseover", function(){ + this.setFill("yellow"); + this.setStroke("purple"); + this.setStrokeWidth(20); + layer.draw(); + }); + + star.on("mouseout", function(){ + this.setFill("green"); + this.setStroke("blue"); + this.setStrokeWidth(5); + layer.draw(); + }); + + layer.add(star); + stage.add(layer); + }, + "EVENTS - image geometry modify fill stroke and stroke width": function(containerId){ + var imageObj = new Image(); + imageObj.onload = function(){ + var stage = new Kinetic.Stage(containerId, 578, 200); + var layer = new Kinetic.Layer(); + var darth = new Kinetic.Image({ + x: 60, + y: 60, + image: imageObj + }); + + darth.on("mouseover", function(){ + this.setFill("yellow"); + this.setStroke("purple"); + this.setStrokeWidth(20); + layer.draw(); + }); + + darth.on("mouseout", function(){ + this.setFill(""); + this.setStroke(""); + this.setStrokeWidth(0); + layer.draw(); + }); + + layer.add(darth); + stage.add(layer); + }; + imageObj.src = "darth-vader.jpg"; + }, + "EVENTS - drag events click": function(containerId){ + var stage = new Kinetic.Stage(containerId, 578, 200); + var layer = new Kinetic.Layer(); + var circle = new Kinetic.Circle({ + x: 380, + y: stage.height / 2, + radius: 70, + strokeWidth: 4, + fill: "red", + stroke: "black" + }); + + circle.draggable(true); + + + + circle.on('dragstart', function(){ + log('dragstart'); + }); + + circle.on('dragmove', function(){ + log('dragmove'); + }); + + circle.on('dragend', function(){ + log('dragend'); + }); + + circle.on('click', function(){ + log('click'); + }); + + layer.add(circle); + stage.add(layer); + }, + "EVENTS - isDragging": function(containerId){ + var stage = new Kinetic.Stage(containerId, 578, 200); + var layer = new Kinetic.Layer(); + var circle = new Kinetic.Circle({ + x: 380, + y: stage.height / 2, + radius: 70, + strokeWidth: 4, + fill: "red", + stroke: "black" + }); + + //log('not dragging yet before draggable, isDragging: ' + circle.isDragging()); + test(circle.isDragging() === false, "isDragging() should be false"); + + circle.draggable(true); + + //log('not dragging yet after draggable, isDragging: ' + circle.isDragging()); + test(circle.isDragging() === false, "isDragging() should be false"); + + circle.on('dragstart', function(){ + log('dragstart, isDragging: ' + this.isDragging()); + test(circle.isDragging() === true, "isDragging() should be true"); + }); + + circle.on('dragmove', function(){ + log('dragmove, isDragging: ' + this.isDragging()); + test(circle.isDragging() === true, "isDragging() should be true"); + }); + + circle.on('dragend', function(){ + log('dragend, isDragging: ' + this.isDragging()); + test(circle.isDragging() === false, "isDragging() should be false"); + }); + + layer.add(circle); + stage.add(layer); + }, + "EVENTS - mousemove from shape to another shape in same layer": function(containerId){ + var stage = new Kinetic.Stage(containerId, 578, 200); + var layer = new Kinetic.Layer(); + + var redCircle = new Kinetic.Circle({ + x: 200, + y: stage.height / 2, + radius: 70, + strokeWidth: 4, + fill: "red", + stroke: "black" + }); + + redCircle.on("mouseover", function(){ + log('mouseover red circle'); + }); + redCircle.on("mouseout", function(){ + log('mouseout red circle'); + }); + + var greenCircle = new Kinetic.Circle({ + x: 280, + y: stage.height / 2, + radius: 70, + strokeWidth: 4, + fill: "green", + stroke: "black" + }); + + greenCircle.on("mouseover", function(){ + log('mouseover green circle'); + }); + greenCircle.on("mouseout", function(){ + log('mouseout green circle'); + }); + + layer.add(redCircle); + layer.add(greenCircle); + + stage.add(layer); + }, + "EVENTS - mousemove from shape in one layer to shape in another layer": function(containerId){ + var stage = new Kinetic.Stage(containerId, 578, 200); + var redLayer = new Kinetic.Layer(); + var greenLayer = new Kinetic.Layer(); + + var redCircle = new Kinetic.Circle({ + x: 200, + y: stage.height / 2, + radius: 70, + strokeWidth: 4, + fill: "red", + stroke: "black" + }); + + redCircle.on("mouseover", function(){ + log('mouseover red circle'); + }); + redCircle.on("mouseout", function(){ + log('mouseout red circle'); + }); + + var greenCircle = new Kinetic.Circle({ + x: 280, + y: stage.height / 2, + radius: 70, + strokeWidth: 4, + fill: "green", + stroke: "black" + }); + + greenCircle.on("mouseover", function(){ + log('mouseover green circle'); + }); + greenCircle.on("mouseout", function(){ + log('mouseout green circle'); + }); + + redLayer.add(redCircle); + greenLayer.add(greenCircle); + + stage.add(redLayer); + stage.add(greenLayer); + }, + "EVENTS - event bubbling": function(containerId){ + var stage = new Kinetic.Stage(containerId, 578, 200); + var layer = new Kinetic.Layer(); + var group = new Kinetic.Group(); + + layer.on("mouseover", function(){ + log('mouseover layer'); + //console.log(this); + }); + layer.on("mouseout", function(){ + log('mouseout layer'); + //console.log(this); + }); + + group.on("mouseover", function(){ + log('mouseover group'); + //console.log(this); + }); + group.on("mouseout", function(){ + log('mouseout group'); + //console.log(this); + }); + + var redCircle = new Kinetic.Circle({ + x: stage.width / 2, + y: stage.height / 2, + radius: 80, + strokeWidth: 4, + fill: "red", + stroke: "black" + }); + + redCircle.on("mouseover", function(){ + log('mouseover red circle'); + //console.log(this); + }); + redCircle.on("mouseout", function(){ + log('mouseout red circle'); + //console.log(this); + }); + + var greenCircle = new Kinetic.Circle({ + x: stage.width / 2, + y: stage.height / 2, + radius: 40, + strokeWidth: 4, + fill: "green", + stroke: "black" + }); + + greenCircle.on("mouseover", function(){ + log('mouseover green circle'); + //console.log(this); + }); + greenCircle.on("mouseout", function(){ + log('mouseout green circle'); + //console.log(this); + }); + + group.add(redCircle); + group.add(greenCircle); + + layer.add(group); + stage.add(layer); + } + }; +} diff --git a/tests/testMethods.js b/tests/testMethods.js new file mode 100644 index 00000000..4557efaa --- /dev/null +++ b/tests/testMethods.js @@ -0,0 +1,41 @@ +function test(condition, message){ + if (!condition) { + throw new Error(message); + } +} + +function log(message){ + console.log("LOG: " + message); +} + +Test.prototype = { + addTestContainer: function(key){ + var row = document.createElement('div'); + var container = document.createElement('div'); + var testMessage = document.createElement('p'); + + container.id = key; + + document.body.appendChild(testMessage); + row.appendChild(container); + document.body.appendChild(row); + + return { + testMessage: testMessage + }; + }, + run: function(){ + var tests = this.tests; + + for (var key in tests) { + if (!this.testOnly || (this.testOnly && this.testOnly == key)) { + var obj = this.addTestContainer(key); + this.counter++; + console.log(this.counter + ") " + key); + tests[key](key); + obj.testMessage.innerHTML = this.counter + ") " + key + ': PASSED'; + obj.testMessage.setAttribute("class", "green"); + } + } + } +}; \ No newline at end of file diff --git a/tests/unitTests.html b/tests/unitTests.html new file mode 100644 index 00000000..90a1552f --- /dev/null +++ b/tests/unitTests.html @@ -0,0 +1,16 @@ + + + + + + + + + + + diff --git a/tests/unitTests.js b/tests/unitTests.js new file mode 100644 index 00000000..c6325f3d --- /dev/null +++ b/tests/unitTests.js @@ -0,0 +1,1190 @@ +function Test() { + this.testOnly = ""; + this.counter = 0; + this.tests = { + //////////////////////////////////////////////////////////////////////// + // STAGE tests + //////////////////////////////////////////////////////////////////////// + + "STAGE - instantiate stage with id": function(containerId) { + var stage = new Kinetic.Stage(containerId, 578, 200); + }, + "STAGE - instantiate stage with dom element": function(containerId) { + var containerDom = document.getElementById(containerId); + var stage = new Kinetic.Stage(containerDom, 578, 200); + }, + "STAGE - add shape then stage then layer": function(containerId) { + var stage = new Kinetic.Stage(containerId, 578, 200); + var layer = new Kinetic.Layer(); + var group = new Kinetic.Group(); + var circle = new Kinetic.Circle({ + x: stage.width / 2, + y: stage.height / 2, + radius: 70, + fill: "green", + stroke: "black", + strokeWidth: 4, + name: "myCircle" + }); + + group.add(circle); + stage.add(layer); + layer.add(group); + layer.draw(); + }, + "STAGE - add layer then group then shape": function(containerId) { + var stage = new Kinetic.Stage(containerId, 578, 200); + var layer = new Kinetic.Layer(); + var group = new Kinetic.Group(); + var circle = new Kinetic.Circle({ + x: stage.width / 2, + y: stage.height / 2, + radius: 70, + fill: "green", + stroke: "black", + strokeWidth: 4, + name: "myCircle" + }); + + stage.add(layer); + layer.add(group); + group.add(circle); + layer.draw(); + }, + "STAGE - scale stage after add layer": function(containerId) { + var stage = new Kinetic.Stage(containerId, 578, 200); + var layer = new Kinetic.Layer(); + var circle = new Kinetic.Circle({ + x: stage.width / 2, + y: stage.height / 2, + radius: 70, + fill: "green", + stroke: "black", + strokeWidth: 4 + }); + + layer.add(circle); + stage.add(layer); + + stage.setScale(0.5); + + stage.draw(); + }, + "STAGE - scale stage before add shape": function(containerId) { + var stage = new Kinetic.Stage(containerId, 578, 200); + var layer = new Kinetic.Layer(); + var circle = new Kinetic.Circle({ + x: stage.width / 2, + y: stage.height / 2, + radius: 70, + fill: "green", + stroke: "black", + strokeWidth: 4 + }); + + stage.setScale(0.5); + layer.add(circle); + stage.add(layer); + }, + "STAGE - scale stage with no shapes": function(containerId) { + var stage = new Kinetic.Stage(containerId, 578, 200); + var layer = new Kinetic.Layer(); + + stage.add(layer); + stage.setScale(0.5); + + stage.draw(); + }, + //////////////////////////////////////////////////////////////////////// + // LAYERS tests + //////////////////////////////////////////////////////////////////////// + + "LAYERS - add layer": function(containerId) { + var stage = new Kinetic.Stage(containerId, 578, 200); + var layer = new Kinetic.Layer(); + stage.add(layer); + }, + "LAYERS - remove all children from layer": function(containerId) { + var stage = new Kinetic.Stage(containerId, 578, 200); + var layer = new Kinetic.Layer(); + var circle1 = new Kinetic.Circle({ + x: stage.width / 2, + y: stage.height / 2, + radius: 70, + fill: "green", + stroke: "black", + strokeWidth: 4 + }); + + var circle2 = new Kinetic.Circle({ + x: stage.width / 2, + y: stage.height / 2, + radius: 70, + fill: "green", + stroke: "black", + strokeWidth: 4 + }); + + layer.add(circle1); + layer.add(circle1); + stage.add(layer); + + test(layer.children.length === 2, "layer should have 2 children"); + + layer.removeChildren(); + + test(layer.children.length === 0, "layer should have 0 children"); + }, + "LAYERS - remove layer": function(containerId) { + var stage = new Kinetic.Stage(containerId, 578, 200); + var layer = new Kinetic.Layer(); + var circle = new Kinetic.Circle({ + x: stage.width / 2, + y: stage.height / 2, + radius: 70, + fill: "green", + stroke: "black", + strokeWidth: 4, + name: "myCircle" + }); + + layer.add(circle); + stage.add(layer); + + test(stage.children.length === 1, "stage should have 1 children"); + + stage.remove(layer); + + test(stage.children.length === 0, "stage should have 0 children"); + }, + "LAYERS - hide layer": function(containerId) { + var stage = new Kinetic.Stage(containerId, 578, 200); + var layer = new Kinetic.Layer(); + var circle = new Kinetic.Circle({ + x: stage.width / 2, + y: stage.height / 2, + radius: 70, + fill: "green", + stroke: "black", + strokeWidth: 4 + }); + + layer.add(circle); + stage.add(layer); + + layer.hide(); + layer.draw(); + }, + //////////////////////////////////////////////////////////////////////// + // GROUPS tests + //////////////////////////////////////////////////////////////////////// + + "GROUPS - add group": function(containerId) { + var stage = new Kinetic.Stage(containerId, 578, 200); + var layer = new Kinetic.Layer(); + var group = new Kinetic.Group(); + + var circle = new Kinetic.Circle({ + x: stage.width / 2, + y: stage.height / 2, + radius: 70, + fill: "green", + stroke: "black", + strokeWidth: 4 + }); + + group.add(circle); + layer.add(group); + stage.add(layer); + }, + //////////////////////////////////////////////////////////////////////// + // SHAPES tests + //////////////////////////////////////////////////////////////////////// + + "SHAPES - add rect": function(containerId) { + var stage = new Kinetic.Stage(containerId, 578, 200); + var layer = new Kinetic.Layer(); + var rect = new Kinetic.Rect({ + x: 200, + y: 100, + width: 100, + height: 50, + fill: "green", + stroke: "black", + strokeWidth: 4, + centerOffset: { + x: 50 + }, + scale: { + x: 2, + y: 2 + } + }); + + layer.add(rect); + stage.add(layer); + + stage.onFrame(function() { + rect.rotate(Math.PI / 100); + layer.draw(); + }); + //stage.start(); + }, + "SHAPES - add circle": function(containerId) { + var stage = new Kinetic.Stage(containerId, 578, 200); + var layer = new Kinetic.Layer(); + var circle = new Kinetic.Circle({ + x: stage.width / 2, + y: stage.height / 2, + radius: 70, + fill: "green", + stroke: "black", + strokeWidth: 4, + centerOffset: { + x: 0, + y: 0 + }, + scale: { + x: 2, + y: 2 + } + }); + layer.add(circle); + stage.add(layer); + + stage.onFrame(function() { + circle.rotate(Math.PI / 100); + layer.draw(); + }); + //stage.start(); + }, + "SHAPES - add image": function(containerId) { + var imageObj = new Image(); + imageObj.onload = function() { + var stage = new Kinetic.Stage(containerId, 578, 200); + var layer = new Kinetic.Layer(); + var darth = new Kinetic.Image({ + x: 10, + y: 10, + image: imageObj, + width: 100, + centerOffset: { + x: this.width / 2, + y: this.height / 2 + } + }); + + layer.add(darth); + stage.add(layer); + + stage.onFrame(function() { + darth.rotate(Math.PI / 100); + layer.draw(); + }); + //stage.start(); + }; + imageObj.src = "darth-vader.jpg"; + }, + "SHAPES - add polygon": function(containerId) { + var stage = new Kinetic.Stage(containerId, 578, 200); + var layer = new Kinetic.Layer(); + + var points = [{ + x: 73, + y: 192 + }, { + x: 73, + y: 160 + }, { + x: 340, + y: 23 + }, { + x: 500, + y: 109 + }, { + x: 499, + y: 139 + }, { + x: 342, + y: 93 + }]; + + var poly = new Kinetic.Polygon({ + points: points, + fill: "green", + stroke: "blue", + strokeWidth: 5, + centerOffset: { + x: 300, + y: 100 + } + }); + + layer.add(poly); + stage.add(layer); + + stage.onFrame(function() { + poly.rotate(Math.PI / 100); + layer.draw(); + }); + //stage.start(); + }, + "SHAPES - add regular polygon triangle": function(containerId) { + var stage = new Kinetic.Stage(containerId, 578, 200); + var layer = new Kinetic.Layer(); + + var poly = new Kinetic.RegularPolygon({ + x: 200, + y: 100, + sides: 3, + radius: 50, + fill: "green", + stroke: "blue", + strokeWidth: 5, + name: "foobar", + centerOffset: { + y: -50 + } + }); + + layer.add(poly); + stage.add(layer); + + stage.onFrame(function() { + poly.rotate(Math.PI / 100); + layer.draw(); + }); + //stage.start(); + }, + "SHAPES - add regular polygon square": function(containerId) { + var stage = new Kinetic.Stage(containerId, 578, 200); + var layer = new Kinetic.Layer(); + + var poly = new Kinetic.RegularPolygon({ + x: 200, + y: 100, + sides: 4, + radius: 50, + fill: "green", + stroke: "blue", + strokeWidth: 5, + name: "foobar" + }); + + layer.add(poly); + stage.add(layer); + }, + "SHAPES - add regular polygon pentagon": function(containerId) { + var stage = new Kinetic.Stage(containerId, 578, 200); + var layer = new Kinetic.Layer(); + + var poly = new Kinetic.RegularPolygon({ + x: 200, + y: 100, + sides: 5, + radius: 50, + fill: "green", + stroke: "blue", + strokeWidth: 5, + name: "foobar" + }); + + layer.add(poly); + stage.add(layer); + }, + "SHAPES - add regular polygon octogon": function(containerId) { + var stage = new Kinetic.Stage(containerId, 578, 200); + var layer = new Kinetic.Layer(); + + var poly = new Kinetic.RegularPolygon({ + x: 200, + y: 100, + sides: 8, + radius: 50, + fill: "green", + stroke: "blue", + strokeWidth: 5, + name: "foobar" + }); + + layer.add(poly); + stage.add(layer); + }, + "SHAPES - add 5 point star": function(containerId) { + var stage = new Kinetic.Stage(containerId, 578, 200); + var layer = new Kinetic.Layer(); + + var star = new Kinetic.Star({ + x: 200, + y: 100, + points: 5, + innerRadius: 40, + outerRadius: 70, + fill: "green", + stroke: "blue", + strokeWidth: 5, + name: "foobar", + centerOffset: { + y: -70 + }, + scale: { + x: 0.5, + y: 0.5 + } + }); + + layer.add(star); + stage.add(layer); + + stage.onFrame(function() { + star.rotate(Math.PI / 100); + layer.draw(); + }); + //stage.start(); + }, + "SHAPES - add stroke rect": function(containerId) { + var stage = new Kinetic.Stage(containerId, 578, 200); + var layer = new Kinetic.Layer(); + var rect = new Kinetic.Rect({ + x: 200, + y: 100, + width: 100, + height: 50, + stroke: "green", + strokeWidth: 4 + }); + + layer.add(rect); + stage.add(layer); + }, + "SHAPES - use default stroke": function(containerId) { + var stage = new Kinetic.Stage(containerId, 578, 200); + var layer = new Kinetic.Layer(); + var rect = new Kinetic.Rect({ + x: 200, + y: 100, + width: 100, + height: 50, + strokeWidth: 4 + }); + + layer.add(rect); + stage.add(layer); + + test(rect.stroke === "black", "stroke should be black"); + }, + "SHAPES - use default stroke width": function(containerId) { + var stage = new Kinetic.Stage(containerId, 578, 200); + var layer = new Kinetic.Layer(); + var rect = new Kinetic.Rect({ + x: 200, + y: 100, + width: 100, + height: 50, + stroke: "blue" + }); + + layer.add(rect); + stage.add(layer); + + test(rect.strokeWidth === 2, "stroke width should be 2"); + }, + "SHAPES - set center offset after instantiation": function(containerId) { + var stage = new Kinetic.Stage(containerId, 578, 200); + var layer = new Kinetic.Layer(); + var rect = new Kinetic.Rect({ + x: 200, + y: 100, + width: 100, + height: 50, + stroke: "blue", + centerOffset: { + x: 20, + y: 20 + } + }); + + layer.add(rect); + stage.add(layer); + + test(rect.centerOffset.x === 20, "center offset x should be 20"); + test(rect.centerOffset.y === 20, "center offset y should be 20"); + + rect.setCenterOffset(40, 40); + + test(rect.centerOffset.x === 40, "center offset x should be 40"); + test(rect.centerOffset.y === 40, "center offset y should be 40"); + + }, + "SHAPES - custom shape with fill, stroke, and strokeWidth": function(containerId) { + var stage = new Kinetic.Stage(containerId, 578, 200); + var layer = new Kinetic.Layer(); + var shape = new Kinetic.Shape({ + drawFunc: function() { + var context = this.getContext(); + context.beginPath(); + context.moveTo(0, 0); + context.lineTo(100, 0); + context.lineTo(100, 100); + context.closePath(); + this.fillStroke(); + }, + x: 200, + y: 100, + fill: "green", + stroke: "blue", + strokeWidth: 5 + }); + + layer.add(shape); + stage.add(layer); + }, + "SHAPES - init with position, scale, rotation, then change scale": function(containerId) { + var stage = new Kinetic.Stage(containerId, 578, 200); + var layer = new Kinetic.Layer(); + var rect = new Kinetic.Rect({ + x: 200, + y: 100, + width: 100, + height: 50, + fill: "green", + stroke: "black", + strokeWidth: 4, + scale: { + x: 0.5, + y: 0.5 + }, + rotation: 20 * Math.PI / 180 + }); + + test(rect.getPosition().x == 200, "rect should be at x = 200"); + test(rect.getPosition().y == 100, "rect should be at y = 100"); + test(rect.getScale().x == 0.5, "rect x scale should be 0.5"); + test(rect.getScale().y == 0.5, "rect y scale should be 0.5"); + test(rect.getRotation() == 20 * Math.PI / 180, "rect should rotated by 20 degrees"); + + rect.setScale(2, 0.3); + test(rect.getScale().x == 2, "rect x scale should be 2"); + test(rect.getScale().y == 0.3, "rect y scale should be 0.3"); + + layer.add(rect); + stage.add(layer); + }, + "SHAPES - rotation in degrees": function(containerId) { + var stage = new Kinetic.Stage(containerId, 578, 200); + var layer = new Kinetic.Layer(); + var rect = new Kinetic.Rect({ + x: 200, + y: 100, + width: 100, + height: 50, + fill: "green", + stroke: "black", + strokeWidth: 4, + rotationDeg: 10 + }); + + test(rect.getRotationDeg() === 10, "rotation should be 10 degrees"); + rect.setRotationDeg(20); + test(rect.getRotationDeg() === 20, "rotation should be 20 degrees"); + rect.rotateDeg(20); + test(rect.getRotationDeg() === 40, "rotation should be 40 degrees"); + + layer.add(rect); + stage.add(layer); + }, + "SHAPES - add text": function(containerId) { + var stage = new Kinetic.Stage(containerId, 578, 200); + var layer = new Kinetic.Layer(); + + var text = new Kinetic.Text({ + x: stage.width / 2, + y: stage.height / 2, + stroke: "green", + strokeWidth: 5, + fill: "#ddd", + text: "Hello World!", + fontSize: 60, + fontFamily: "Calibri", + textFill: "#888", + textStroke: "#333", + padding: 10, + //draggable: true, + align: "center", + verticalAlign: "middle" + }); + + layer.add(text); + stage.add(layer); + + stage.onFrame(function() { + text.rotate(Math.PI / 100); + layer.draw(); + }); + //stage.start(); + + /* + * test getters and setters + */ + text.setText("Bye World!"); + test(text.getText() === "Bye World!", "text should be Bye World!"); + test(text.getPadding() === 10, "padding should be 10"); + text.setPadding(20); + test(text.getPadding() === 20, "padding should be 20"); + + layer.draw(); + + text.setFontFamily("Arial"); + text.setFontSize(30); + text.setAlign("right"); + text.setVerticalAlign("top"); + text.setTextFill("blue"); + text.setTextStroke("red"); + text.setTextStrokeWidth(10); + + test(text.getFontFamily() === "Arial", "font family should be Arial"); + test(text.getFontSize() === 30, "text size should be 30"); + test(text.getAlign() === "right", "text align should be right"); + test(text.getVerticalAlign() === "top", "vertical align should be top"); + test(text.getTextFill() === "blue", "text fill should be blue"); + test(text.getTextStroke() === "red", "text stroke should be red"); + test(text.getTextStrokeWidth() === 10, "test stroke width should be 10"); + }, + "SHAPES - get shape name": function(containerId) { + var stage = new Kinetic.Stage(containerId, 578, 200); + var layer = new Kinetic.Layer(); + var circle = new Kinetic.Circle({ + x: stage.width / 2, + y: stage.height / 2, + radius: 70, + fill: "green", + stroke: "black", + strokeWidth: 4, + name: "myCircle" + }); + + layer.add(circle); + stage.add(layer); + + test(circle.getName() == "myCircle", "name should be myCircle"); + }, + "SHAPES - remove shape": function(containerId) { + var stage = new Kinetic.Stage(containerId, 578, 200); + var layer = new Kinetic.Layer(); + var circle = new Kinetic.Circle({ + x: stage.width / 2, + y: stage.height / 2, + radius: 70, + fill: "green", + stroke: "black", + strokeWidth: 4, + name: "myCircle" + }); + + layer.add(circle); + stage.add(layer); + + test(layer.children.length === 1, "layer should have 1 children"); + + layer.remove(circle); + + test(layer.children.length === 0, "layer should have 0 children"); + test(layer.getChild("myCircle") === undefined, "shape should be null"); + + layer.draw(); + }, + "STAGE - add layer then shape": function(containerId) { + var stage = new Kinetic.Stage(containerId, 578, 200); + var layer = new Kinetic.Layer(); + var circle = new Kinetic.Circle({ + x: stage.width / 2, + y: stage.height / 2, + radius: 70, + fill: "green", + stroke: "black", + strokeWidth: 4, + name: "myCircle" + }); + + stage.add(layer); + layer.add(circle); + layer.draw(); + }, + "SHAPES - move shape, group, and layer, and then get absolute position": function(containerId) { + var stage = new Kinetic.Stage(containerId, 578, 200); + var layer = new Kinetic.Layer(); + var group = new Kinetic.Group(); + + var circle = new Kinetic.Circle({ + x: stage.width / 2, + y: stage.height / 2, + radius: 70, + fill: "green", + stroke: "black", + strokeWidth: 4 + }); + + group.add(circle); + layer.add(group); + stage.add(layer); + + circle.setPosition(100, 0); + group.setPosition(100, 0); + layer.setPosition(100, 0); + + // test relative positions + test(circle.getPosition().x == 100, "circle should be at x = 100"); + test(group.getPosition().x == 100, "group should be at x = 100"); + test(layer.getPosition().x == 100, "layer should be at x = 100"); + + // test absolute positions + test(circle.getAbsolutePosition().x == 300, "circle should be at x = 300"); + test(group.getAbsolutePosition().x == 200, "group should be at x = 200"); + test(layer.getAbsolutePosition().x == 100, "layer should be at x = 100"); + + layer.draw(); + }, + "SHAPES - hide circle": function(containerId) { + var stage = new Kinetic.Stage(containerId, 578, 200); + var layer = new Kinetic.Layer(); + var circle = new Kinetic.Circle({ + x: stage.width / 2, + y: stage.height / 2, + radius: 70, + fill: "green", + stroke: "black", + strokeWidth: 4 + }); + + layer.add(circle); + stage.add(layer); + + circle.hide(); + layer.draw(); + }, + "SHAPES - hide show circle": function(containerId) { + var stage = new Kinetic.Stage(containerId, 578, 200); + var layer = new Kinetic.Layer(); + var circle = new Kinetic.Circle({ + x: stage.width / 2, + y: stage.height / 2, + radius: 70, + fill: "green", + stroke: "black", + strokeWidth: 4 + }); + + layer.add(circle); + stage.add(layer); + + circle.hide(); + layer.draw(); + + circle.show(); + layer.draw(); + }, + "GROUPS - hide group": function(containerId) { + var stage = new Kinetic.Stage(containerId, 578, 200); + var layer = new Kinetic.Layer(); + var group = new Kinetic.Group(); + var circle = new Kinetic.Circle({ + x: stage.width / 2, + y: stage.height / 2, + radius: 70, + fill: "green", + stroke: "black", + strokeWidth: 4 + }); + + group.add(circle); + layer.add(group); + stage.add(layer); + + group.hide(); + layer.draw(); + }, + "SHAPES - set shape alpha to 0.5": function(containerId) { + var stage = new Kinetic.Stage(containerId, 578, 200); + var layer = new Kinetic.Layer(); + var circle = new Kinetic.Circle({ + x: stage.width / 2, + y: stage.height / 2, + radius: 70, + fill: "green", + stroke: "black", + strokeWidth: 4 + }); + + circle.setAlpha(0.5); + layer.add(circle); + stage.add(layer); + }, + "SHAPES - set shape alpha to 0.5 then back to 1": function(containerId) { + var stage = new Kinetic.Stage(containerId, 578, 200); + var layer = new Kinetic.Layer(); + var circle = new Kinetic.Circle({ + x: stage.width / 2, + y: stage.height / 2, + radius: 70, + fill: "green", + stroke: "black", + strokeWidth: 4 + }); + + circle.setAlpha(0.5); + layer.add(circle); + stage.add(layer); + + test(circle.getAbsoluteAlpha() === 0.5, "abs alpha should be 0.5"); + + circle.setAlpha(1); + layer.draw(); + + test(circle.getAbsoluteAlpha() === 1, "abs alpha should be 1"); + }, + "STAGE - set shape and layer alpha to 0.5": function(containerId) { + var stage = new Kinetic.Stage(containerId, 578, 200); + var layer = new Kinetic.Layer(); + var circle = new Kinetic.Circle({ + x: stage.width / 2, + y: stage.height / 2, + radius: 70, + fill: "green", + stroke: "black", + strokeWidth: 4 + }); + + circle.setAlpha(0.5); + layer.setAlpha(0.5); + layer.add(circle); + stage.add(layer); + + test(circle.getAbsoluteAlpha() === 0.25, "abs alpha should be 0.25"); + test(layer.getAbsoluteAlpha() === 0.5, "abs alpha should be 0.5"); + }, + "SHAPES - scale shape by half": function(containerId) { + var stage = new Kinetic.Stage(containerId, 578, 200); + var layer = new Kinetic.Layer(); + var circle = new Kinetic.Circle({ + x: stage.width / 2, + y: stage.height / 2, + radius: 70, + fill: "green", + stroke: "black", + strokeWidth: 4 + }); + + circle.setScale(0.5, 1); + layer.add(circle); + stage.add(layer); + }, + "SHAPES - scale shape by half then back to 1": function(containerId) { + var stage = new Kinetic.Stage(containerId, 578, 200); + var layer = new Kinetic.Layer(); + var circle = new Kinetic.Circle({ + x: stage.width / 2, + y: stage.height / 2, + radius: 70, + fill: "green", + stroke: "black", + strokeWidth: 4 + }); + + circle.setScale(0.5, 1); + circle.setScale(1, 1); + layer.add(circle); + stage.add(layer); + }, + //////////////////////////////////////////////////////////////////////// + // LAYERING tests + //////////////////////////////////////////////////////////////////////// + + "LAYERING - move blue circle on top of green circle with moveToTop": function(containerId) { + var stage = new Kinetic.Stage(containerId, 578, 200); + var layer = new Kinetic.Layer(); + + var blueCircle = new Kinetic.Circle({ + x: 200, + y: stage.height / 2, + radius: 70, + fill: "blue", + stroke: "black", + strokeWidth: 4 + }); + + var greenCircle = new Kinetic.Circle({ + x: 280, + y: stage.height / 2, + radius: 70, + fill: "green", + stroke: "black", + strokeWidth: 4 + }); + + layer.add(blueCircle); + layer.add(greenCircle); + stage.add(layer); + + test(blueCircle.getZIndex() === 0, "blue circle should have zindex 0 before relayering"); + test(greenCircle.getZIndex() === 1, "green circle should have zindex 1 before relayering"); + + blueCircle.moveToTop(); + + test(blueCircle.getZIndex() === 1, "blue circle should have zindex 1 after relayering"); + test(greenCircle.getZIndex() === 0, "green circle should have zindex 0 after relayering"); + + layer.draw(); + }, + "LAYERING - move green circle below blue circle with moveDown": function(containerId) { + var stage = new Kinetic.Stage(containerId, 578, 200); + var layer = new Kinetic.Layer(); + + var blueCircle = new Kinetic.Circle({ + x: 200, + y: stage.height / 2, + radius: 70, + fill: "blue", + stroke: "black", + strokeWidth: 4 + }); + + var greenCircle = new Kinetic.Circle({ + x: 280, + y: stage.height / 2, + radius: 70, + fill: "green", + stroke: "black", + strokeWidth: 4 + }); + + layer.add(blueCircle); + layer.add(greenCircle); + stage.add(layer); + + test(blueCircle.getZIndex() === 0, "blue circle should have zindex 0 before relayering"); + test(greenCircle.getZIndex() === 1, "green circle should have zindex 1 before relayering"); + + greenCircle.moveDown(); + + test(blueCircle.getZIndex() === 1, "blue circle should have zindex 1 after relayering"); + test(greenCircle.getZIndex() === 0, "green circle should have zindex 0 after relayering"); + + layer.draw(); + }, + "LAYERING - move blue group on top of green group with moveToTop": function(containerId) { + var stage = new Kinetic.Stage(containerId, 578, 200); + var layer = new Kinetic.Layer(); + var greenGroup = new Kinetic.Group(); + var blueGroup = new Kinetic.Group(); + + var blueCircle = new Kinetic.Circle({ + x: 200, + y: stage.height / 2, + radius: 70, + fill: "blue", + stroke: "black", + strokeWidth: 4 + }); + + var greenCircle = new Kinetic.Circle({ + x: 280, + y: stage.height / 2, + radius: 70, + fill: "green", + stroke: "black", + strokeWidth: 4 + }); + + blueGroup.add(blueCircle); + greenGroup.add(greenCircle); + + layer.add(blueGroup); + layer.add(greenGroup); + stage.add(layer); + + test(blueGroup.getZIndex() === 0, "blue group should have zindex 0 before relayering"); + test(greenGroup.getZIndex() === 1, "green group should have zindex 1 before relayering"); + + blueGroup.moveToTop(); + + test(blueGroup.getZIndex() === 1, "blue group should have zindex 1 after relayering"); + test(greenGroup.getZIndex() === 0, "green group should have zindex 0 after relayering"); + + layer.draw(); + }, + "LAYERING - move blue group on top of green group with moveUp": function(containerId) { + var stage = new Kinetic.Stage(containerId, 578, 200); + var layer = new Kinetic.Layer(); + var greenGroup = new Kinetic.Group(); + var blueGroup = new Kinetic.Group(); + + var blueCircle = new Kinetic.Circle({ + x: 200, + y: stage.height / 2, + radius: 70, + fill: "blue", + stroke: "black", + strokeWidth: 4 + }); + + var greenCircle = new Kinetic.Circle({ + x: 280, + y: stage.height / 2, + radius: 70, + fill: "green", + stroke: "black", + strokeWidth: 4 + }); + + blueGroup.add(blueCircle); + greenGroup.add(greenCircle); + + layer.add(blueGroup); + layer.add(greenGroup); + stage.add(layer); + + test(blueGroup.getZIndex() === 0, "blue group should have zindex 0 before relayering"); + test(greenGroup.getZIndex() === 1, "green group should have zindex 1 before relayering"); + + blueGroup.moveUp(); + + test(blueGroup.getZIndex() === 1, "blue group should have zindex 1 after relayering"); + test(greenGroup.getZIndex() === 0, "green group should have zindex 0 after relayering"); + + layer.draw(); + }, + "LAYERING - move blue layer on top of green layer with moveToTop": function(containerId) { + var stage = new Kinetic.Stage(containerId, 578, 200); + var blueLayer = new Kinetic.Layer(); + var greenLayer = new Kinetic.Layer(); + + var blueCircle = new Kinetic.Circle({ + x: 200, + y: stage.height / 2, + radius: 70, + fill: "blue", + stroke: "black", + strokeWidth: 4 + }); + + var greenCircle = new Kinetic.Circle({ + x: 280, + y: stage.height / 2, + radius: 70, + fill: "green", + stroke: "black", + strokeWidth: 4 + }); + + blueLayer.add(blueCircle); + greenLayer.add(greenCircle); + + stage.add(blueLayer); + stage.add(greenLayer); + + blueLayer.moveToTop(); + }, + "LAYERING - move green layer below blue layer with moveToBottom": function(containerId) { + var stage = new Kinetic.Stage(containerId, 578, 200); + var blueLayer = new Kinetic.Layer(); + var greenLayer = new Kinetic.Layer(); + + var blueCircle = new Kinetic.Circle({ + x: 200, + y: stage.height / 2, + radius: 70, + fill: "blue", + stroke: "black", + strokeWidth: 4 + }); + + var greenCircle = new Kinetic.Circle({ + x: 280, + y: stage.height / 2, + radius: 70, + fill: "green", + stroke: "black", + strokeWidth: 4 + }); + + blueLayer.add(blueCircle); + greenLayer.add(greenCircle); + + stage.add(blueLayer); + stage.add(greenLayer); + + greenLayer.moveToBottom(); + }, + //////////////////////////////////////////////////////////////////////// + // ANIMATION tests + //////////////////////////////////////////////////////////////////////// + + "ANIMATION - stage and global object animation properties": function(containerId) { + var stage = new Kinetic.Stage(containerId, 578, 200); + var layer = new Kinetic.Layer(); + var rect = new Kinetic.Rect({ + x: 200, + y: 100, + width: 100, + height: 50, + fill: "green", + stroke: "black", + strokeWidth: 4 + }); + + layer.add(rect); + stage.add(layer); + + var amplitude = 150; + var period = 1000; + // in ms + var centerX = stage.width / 2 - 100 / 2; + + stage.onFrame(function(frame) { + rect.x = amplitude * Math.sin(frame.time * 2 * Math.PI / period) + centerX; + layer.draw(); + }); + test(stage.isAnimating === false, "stage should not be animating"); + test(Kinetic.GlobalObject.isAnimating === false, "global object should not be animating"); + + stage.start(); + + test(stage.isAnimating === true, "stage should be animating"); + test(Kinetic.GlobalObject.isAnimating === true, "global object should be animating"); + + stage.stop(); + + test(stage.isAnimating === false, "stage should not be animating"); + test(Kinetic.GlobalObject.isAnimating === false, "global object should not be animating"); + }, + "ANIMATION - run animation": function(containerId) { + var stage = new Kinetic.Stage(containerId, 578, 200); + var layer = new Kinetic.Layer(); + var rect = new Kinetic.Rect({ + x: 200, + y: 100, + width: 100, + height: 50, + fill: "green", + stroke: "black", + strokeWidth: 4 + }); + + layer.add(rect); + stage.add(layer); + + var amplitude = 150; + var period = 1000; + // in ms + var centerX = stage.width / 2 - 100 / 2; + + stage.onFrame(function(frame) { + rect.x = amplitude * Math.sin(frame.time * 2 * Math.PI / period) + centerX; + layer.draw(); + }); + + stage.start(); + + } + }; +} \ No newline at end of file