diff --git a/karma.conf.js b/karma.conf.js index cbf72b381..bce079624 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -2,6 +2,6 @@ module.exports = function(config) { config.set({ browsers: ['Chrome', 'Firefox'], frameworks: ['jasmine'], - reporters: ['progress'], + reporters: ['progress', 'html'], }); }; \ No newline at end of file diff --git a/package.json b/package.json index 066d65369..0e7b31939 100644 --- a/package.json +++ b/package.json @@ -30,6 +30,7 @@ "karma-coverage": "^0.5.1", "karma-firefox-launcher": "^0.1.6", "karma-jasmine": "^0.3.6", + "karma-jasmine-html-reporter": "^0.1.8", "onecolor": "^2.5.0", "semver": "^3.0.1" }, diff --git a/test/core.element.tests.js b/test/core.element.tests.js new file mode 100644 index 000000000..6443de099 --- /dev/null +++ b/test/core.element.tests.js @@ -0,0 +1,45 @@ +// Test the core element functionality +describe('Core element tests', function() { + it ('should transition model properties', function() { + var element = new Chart.Element({ + _model: { + numberProp: 0, + numberProp2: 100, + _underscoreProp: 0, + stringProp: 'abc', + objectProp: { + myObject: true + }, + colorProp: 'rgb(0, 0, 0)' + } + }); + + // First transition clones model into view + element.transition(0.25); + expect(element._view).toEqual(element._model); + expect(element._start).toEqual(element._model); // also cloned + + expect(element._view.objectProp).toBe(element._model.objectProp); // not cloned + expect(element._start.objectProp).toEqual(element._model.objectProp); // not cloned + + element._model.numberProp = 100; + element._model.numberProp2 = 250; + element._model._underscoreProp = 200; + element._model.stringProp = 'def' + element._model.newStringProp = 'newString'; + element._model.colorProp = 'rgb(255, 255, 0)' + + element.transition(0.25); + expect(element._view).toEqual({ + numberProp: 25, + numberProp2: 137.5, + _underscoreProp: 0, // underscore props are not transition to a new value + stringProp: 'def', + newStringProp: 'newString', + objectProp: { + myObject: true + }, + colorProp: 'rgb(64, 64, 0)', + }); + }); +}); \ No newline at end of file diff --git a/test/core.helpers.tests.js b/test/core.helpers.tests.js index 730222b5b..bbc7f4ab4 100644 --- a/test/core.helpers.tests.js +++ b/test/core.helpers.tests.js @@ -380,6 +380,59 @@ describe('Core helper tests', function() { expect(helpers.previousItem(testData, 0, true)).toEqual(2); expect(helpers.previousItem(testData, 2, false)).toEqual(1); expect(helpers.previousItem(testData, 1, true)).toEqual(0); + }); + it ('should clear a canvas', function() { + var context = window.createMockContext(); + helpers.clear({ + width: 100, + height: 150, + ctx: context + }); + + expect(context.getCalls()).toEqual([{ + name: 'clearRect', + args: [0, 0, 100, 150] + }]); + }); + + it ('should draw a rounded rectangle', function() { + var context = window.createMockContext(); + helpers.drawRoundedRectangle(context, 10, 20, 30, 40, 5); + + expect(context.getCalls()).toEqual([{ + name: 'beginPath', + args: [] + }, { + name: 'moveTo', + args: [15, 20] + }, { + name: 'lineTo', + args: [35, 20] + }, { + name: 'quadraticCurveTo', + args: [40, 20, 40, 25] + }, { + name: 'lineTo', + args: [40, 55] + }, { + name: 'quadraticCurveTo', + args: [40, 60, 35, 60] + }, { + name: 'lineTo', + args: [15, 60] + }, { + name: 'quadraticCurveTo', + args: [10, 60, 10, 55] + }, { + name: 'lineTo', + args: [10, 25] + }, { + name: 'quadraticCurveTo', + args: [10, 20, 15, 20] + }, { + name: 'closePath', + args: [] + }]) }); }); \ No newline at end of file diff --git a/test/mockContext.js b/test/mockContext.js index 239a0a3e4..d8b8e41b8 100644 --- a/test/mockContext.js +++ b/test/mockContext.js @@ -65,10 +65,12 @@ arc: function() {}, beginPath: function() {}, bezierCurveTo: function() {}, + clearRect: function() {}, closePath: function() {}, fill: function() {}, lineTo: function(x, y) {}, moveTo: function(x, y) {}, + quadraticCurveTo: function() {}, restore: function() {}, save: function() {}, setLineDash: function() {},