From 1b99a22c1d9e691f03d63f6d1acaf298d8e68deb Mon Sep 17 00:00:00 2001 From: jdescottes Date: Sun, 20 Jul 2014 23:55:10 +0200 Subject: [PATCH 01/20] Updated node and dependencies --- Gruntfile.js | 44 +++++++++++++++++--------------------------- package.json | 21 ++++++++++----------- 2 files changed, 27 insertions(+), 38 deletions(-) diff --git a/Gruntfile.js b/Gruntfile.js index 08788558..6440030d 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -27,7 +27,7 @@ module.exports = function(grunt) { filesSrc : ['test/integration/casperjs/*_test.js'], options : { args : { - baseUrl : 'http://localhost:' + '<%= connect.test.options.port %>/src/', + baseUrl : 'http://localhost:' + '<%= express.test.options.port %>/', mode : '?debug', delay : delay }, @@ -39,6 +39,16 @@ module.exports = function(grunt) { }; }; + var getExpressConfig = function (source, port, host) { + return { + options: { + port: port, + hostname : host || 'localhost', + bases: [source] + } + }; + }; + grunt.initConfig({ clean: { before: ['dest'], @@ -62,29 +72,10 @@ module.exports = function(grunt) { '!src/js/lib/**/*.js' // Exclude lib folder (note the leading !) ] }, - connect : { - test : { - options : { - base : '.', - port : 4321 - } - } - }, express: { - regular: { - options: { - port: 9001, - hostname : 'localhost', - bases: ['dest'] - } - }, - debug: { - options: { - port: 9901, - hostname : 'localhost', - bases: ['src'] - } - } + test: getExpressConfig('src', 9991), + regular: getExpressConfig('dest', 9001), + debug: getExpressConfig('src', 9901) }, open : { regular : { @@ -106,7 +97,7 @@ module.exports = function(grunt) { }, ghost : { 'default' : getGhostConfig(5000), - local : getGhostConfig(50) + 'local' : getGhostConfig(50) }, concat : { js : { @@ -262,7 +253,6 @@ module.exports = function(grunt) { grunt.loadNpmTasks('grunt-closure-tools'); grunt.loadNpmTasks('grunt-contrib-clean'); grunt.loadNpmTasks('grunt-contrib-concat'); - grunt.loadNpmTasks('grunt-contrib-connect'); grunt.loadNpmTasks('grunt-contrib-copy'); grunt.loadNpmTasks('grunt-contrib-jshint'); grunt.loadNpmTasks('grunt-contrib-uglify'); @@ -279,10 +269,10 @@ module.exports = function(grunt) { grunt.registerTask('lint', ['leadingIndent:jsFiles', 'leadingIndent:cssFiles', 'jshint']); // Validate & Test - grunt.registerTask('test', ['lint', 'compile', 'connect:test', 'ghost:default']); + grunt.registerTask('test', ['lint', 'compile', 'express:test', 'ghost:default']); // Validate & Test (faster version) will NOT work on travis !! - grunt.registerTask('precommit', ['lint', 'compile', 'connect:test', 'ghost:local']); + grunt.registerTask('precommit', ['lint', 'compile', 'express:test', 'ghost:local']); // Compile JS code (eg verify JSDoc annotation and types, no actual minified code generated). grunt.registerTask('compile', ['closureCompiler:compile', 'clean:after']); diff --git a/package.json b/package.json index 5e24da08..1363a98c 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "name": "piskel", "main": "./dest/index.html", "description": "Web based 2d animations editor", - "version": "0.1.0", + "version": "0.1.1", "homepage": "http://github.com/juliandescottes/piskel", "repository": { "type": "git", @@ -14,22 +14,21 @@ "start": "nodewebkit" }, "devDependencies": { - "grunt": "~0.4.1", + "grunt": "~0.4.5", "grunt-contrib-clean": "0.5.0", - "grunt-contrib-connect": "0.3.0", - "grunt-contrib-concat": "0.1.2", + "grunt-contrib-concat": "0.5.0", "grunt-contrib-copy": "0.5.0", - "grunt-contrib-jshint": "0.5.4", - "grunt-contrib-uglify": "0.2.2", + "grunt-contrib-jshint": "0.10.0", + "grunt-contrib-uglify": "0.5.0", "grunt-contrib-watch": "0.6.1", - "grunt-express": "1.0", + "grunt-express": "1.4.1", "grunt-replace": "0.7.8", - "grunt-ghost": "1.0.12", + "grunt-ghost": "1.1.0", "grunt-open": "0.2.3", "grunt-leading-indent": "0.1.0", - "grunt-closure-tools": "~0.8.3", - "grunt-node-webkit-builder": "0.1.19", - "nodewebkit": "0.8.4", + "grunt-closure-tools": "~0.9.7", + "grunt-node-webkit-builder": "0.1.21", + "nodewebkit": "~0.9.2-8", "dateformat" : "1.0.8-1.2.3" }, "window": { From 05e8f9adac0336f1d497c715385d2920526bd022 Mon Sep 17 00:00:00 2001 From: jdescottes Date: Wed, 23 Jul 2014 19:42:08 +0200 Subject: [PATCH 02/20] added karma runner + first test --- Gruntfile.js | 1 + karma.conf.js | 70 +++++++++++++++++++++++++ package.json | 13 +++-- test/integration/casperjs/smoke_test.js | 2 +- test/js/service/HistoryServiceTest.js | 8 +++ 5 files changed, 88 insertions(+), 6 deletions(-) create mode 100644 karma.conf.js create mode 100644 test/js/service/HistoryServiceTest.js diff --git a/Gruntfile.js b/Gruntfile.js index 6440030d..6981bb2d 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -31,6 +31,7 @@ module.exports = function(grunt) { mode : '?debug', delay : delay }, + async : false, direct : false, logLevel : 'info', printCommand : false, diff --git a/karma.conf.js b/karma.conf.js new file mode 100644 index 00000000..91d9f73b --- /dev/null +++ b/karma.conf.js @@ -0,0 +1,70 @@ +// Karma configuration +// Generated on Tue Jul 22 2014 23:49:26 GMT+0200 (Romance Daylight Time) + +module.exports = function(config) { + + var mapToSrcFolder = function (path) {return ['src', path].join('/');}; + + var piskelScripts = require('./src/piskel-script-list.js').scripts.map(mapToSrcFolder); + piskelScripts.push('test/**/*.js'); + config.set({ + + // base path that will be used to resolve all patterns (eg. files, exclude) + basePath: '', + + + // frameworks to use + // available frameworks: https://npmjs.org/browse/keyword/karma-adapter + frameworks: ['jasmine'], + + + // list of files / patterns to load in the browser + files: piskelScripts, + + + // list of files to exclude + exclude: [ + 'src/js/app.js', + 'test/integration/**/*.js' + ], + + + // preprocess matching files before serving them to the browser + // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor + preprocessors: { + }, + + + // test results reporter to use + // possible values: 'dots', 'progress' + // available reporters: https://npmjs.org/browse/keyword/karma-reporter + reporters: ['progress'], + + + // web server port + port: 9876, + + + // enable / disable colors in the output (reporters and logs) + colors: true, + + + // level of logging + // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG + logLevel: config.LOG_INFO, + + + // enable / disable watching file and executing tests whenever any file changes + autoWatch: false, + + + // start these browsers + // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher + browsers: ['Chrome'], + + + // Continuous Integration mode + // if true, Karma captures browsers, runs the tests and exits + singleRun: false + }); +}; diff --git a/package.json b/package.json index 1363a98c..e5c39646 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,9 @@ "start": "nodewebkit" }, "devDependencies": { + "dateformat": "1.0.8-1.2.3", "grunt": "~0.4.5", + "grunt-closure-tools": "~0.9.7", "grunt-contrib-clean": "0.5.0", "grunt-contrib-concat": "0.5.0", "grunt-contrib-copy": "0.5.0", @@ -22,14 +24,15 @@ "grunt-contrib-uglify": "0.5.0", "grunt-contrib-watch": "0.6.1", "grunt-express": "1.4.1", - "grunt-replace": "0.7.8", "grunt-ghost": "1.1.0", - "grunt-open": "0.2.3", "grunt-leading-indent": "0.1.0", - "grunt-closure-tools": "~0.9.7", "grunt-node-webkit-builder": "0.1.21", - "nodewebkit": "~0.9.2-8", - "dateformat" : "1.0.8-1.2.3" + "grunt-open": "0.2.3", + "grunt-replace": "0.7.8", + "karma": "0.12.17", + "karma-chrome-launcher": "^0.1.4", + "karma-jasmine": "^0.1.5", + "nodewebkit": "~0.9.2-8" }, "window": { "title": "Piskel", diff --git a/test/integration/casperjs/smoke_test.js b/test/integration/casperjs/smoke_test.js index c9782511..2bc25ab1 100644 --- a/test/integration/casperjs/smoke_test.js +++ b/test/integration/casperjs/smoke_test.js @@ -7,7 +7,7 @@ casper this.echo(casper.cli.get('baseUrl')+"?debug"); // If there was a JS error after the page load, casper won't perform asserts this.test.assertExists('html', 'Casper JS cannot assert DOM elements. A JS error has probably occured.'); - + this.test.assertExists('#drawing-canvas-container canvas', 'Check if drawing canvas element is created'); }) .run(function () { diff --git a/test/js/service/HistoryServiceTest.js b/test/js/service/HistoryServiceTest.js new file mode 100644 index 00000000..b85a64a4 --- /dev/null +++ b/test/js/service/HistoryServiceTest.js @@ -0,0 +1,8 @@ +describe("History Service suite", function() { + it("contains spec with an expectation", function() { + + var mockPiskelController = {}; + var historyService = new pskl.service.HistoryService(mockPiskelController); + expect(historyService.currentIndex).toBe(0); + }); +}); \ No newline at end of file From 6d6e80c76291943f188a688e02f2f8f49ab0d8dd Mon Sep 17 00:00:00 2001 From: jdescottes Date: Tue, 12 Aug 2014 00:30:57 +0200 Subject: [PATCH 03/20] tests update --- src/js/service/HistoryService.js | 17 +++++++---------- test/js/service/HistoryServiceTest.js | 20 +++++++++++++++++--- 2 files changed, 24 insertions(+), 13 deletions(-) diff --git a/src/js/service/HistoryService.js b/src/js/service/HistoryService.js index 4d7599b7..973f4282 100644 --- a/src/js/service/HistoryService.js +++ b/src/js/service/HistoryService.js @@ -4,11 +4,12 @@ var SNAPSHOT_PERIOD = 50; var LOAD_STATE_INTERVAL = 50; - ns.HistoryService = function (piskelController) { - this.piskelController = piskelController; + ns.HistoryService = function (piskelController, shortcutService) { + this.piskelController = piskelController || pskl.app.piskelController; + this.shortcutService = shortcutService || pskl.app.shortcutService; + this.stateQueue = []; this.currentIndex = -1; - this.saveState__b = this.onSaveStateEvent.bind(this); this.lastLoadState = -1; @@ -24,10 +25,10 @@ ns.HistoryService.REPLAY_NO_SNAPSHOT = 'REPLAY_NO_SNAPSHOT'; ns.HistoryService.prototype.init = function () { - $.subscribe(Events.PISKEL_SAVE_STATE, this.saveState__b); + $.subscribe(Events.PISKEL_SAVE_STATE, this.onSaveStateEvent.bind(this)); - pskl.app.shortcutService.addShortcut('ctrl+Z', this.undo.bind(this)); - pskl.app.shortcutService.addShortcut('ctrl+Y', this.redo.bind(this)); + this.shortcutService.addShortcut('ctrl+Z', this.undo.bind(this)); + this.shortcutService.addShortcut('ctrl+Y', this.redo.bind(this)); this.saveState({ type : ns.HistoryService.SNAPSHOT @@ -58,10 +59,6 @@ this.saveNextAsSnapshot = false; } - if (isSnapshot) { - - } - this.stateQueue.push(state); }; diff --git a/test/js/service/HistoryServiceTest.js b/test/js/service/HistoryServiceTest.js index b85a64a4..f201f41d 100644 --- a/test/js/service/HistoryServiceTest.js +++ b/test/js/service/HistoryServiceTest.js @@ -1,8 +1,22 @@ describe("History Service suite", function() { - it("contains spec with an expectation", function() { - + it("starts at -1", function() { var mockPiskelController = {}; - var historyService = new pskl.service.HistoryService(mockPiskelController); + var mockShortcutService = {}; + var historyService = new pskl.service.HistoryService(mockPiskelController, mockShortcutService); + expect(historyService.currentIndex).toBe(-1); + }); + + it("is at 0 after init", function() { + var mockPiskelController = { + serialize : function () { + return 'serialized-piskel'; + } + }; + var mockShortcutService = { + addShortcut : function () {} + }; + var historyService = new pskl.service.HistoryService(mockPiskelController, mockShortcutService); + historyService.init(); expect(historyService.currentIndex).toBe(0); }); }); \ No newline at end of file From 8d8c40e6a6d903922b01f3223c31147e4f0a04a9 Mon Sep 17 00:00:00 2001 From: jdescottes Date: Tue, 12 Aug 2014 07:11:23 +0200 Subject: [PATCH 04/20] tests update --- src/js/service/HistoryService.js | 41 ++++++------- test/js/service/HistoryServiceTest.js | 84 +++++++++++++++++++++++---- 2 files changed, 95 insertions(+), 30 deletions(-) diff --git a/src/js/service/HistoryService.js b/src/js/service/HistoryService.js index 973f4282..62b84e31 100644 --- a/src/js/service/HistoryService.js +++ b/src/js/service/HistoryService.js @@ -1,12 +1,10 @@ (function () { var ns = $.namespace('pskl.service'); - var SNAPSHOT_PERIOD = 50; - var LOAD_STATE_INTERVAL = 50; - - ns.HistoryService = function (piskelController, shortcutService) { - this.piskelController = piskelController || pskl.app.piskelController; - this.shortcutService = shortcutService || pskl.app.shortcutService; + ns.HistoryService = function (piskelController, shortcutService, deserializer) { + this.$piskelController = piskelController || pskl.app.piskelController; + this.$shortcutService = shortcutService || pskl.app.shortcutService; + this.$deserializer = deserializer || pskl.utils.serialization.Deserializer; this.stateQueue = []; this.currentIndex = -1; @@ -18,6 +16,8 @@ ns.HistoryService.SNAPSHOT = 'SNAPSHOT'; ns.HistoryService.REPLAY = 'REPLAY'; + ns.HistoryService.SNAPSHOT_PERIOD = 50; + ns.HistoryService.LOAD_STATE_INTERVAL = 50; /** * This event alters the state (frames, layers) of the piskel. The event is triggered before the execution of associated command. * Don't store snapshots for such events. @@ -27,8 +27,8 @@ ns.HistoryService.prototype.init = function () { $.subscribe(Events.PISKEL_SAVE_STATE, this.onSaveStateEvent.bind(this)); - this.shortcutService.addShortcut('ctrl+Z', this.undo.bind(this)); - this.shortcutService.addShortcut('ctrl+Y', this.redo.bind(this)); + this.$shortcutService.addShortcut('ctrl+Z', this.undo.bind(this)); + this.$shortcutService.addShortcut('ctrl+Y', this.redo.bind(this)); this.saveState({ type : ns.HistoryService.SNAPSHOT @@ -45,17 +45,17 @@ var state = { action : stateInfo, - frameIndex : this.piskelController.currentFrameIndex, - layerIndex : this.piskelController.currentLayerIndex + frameIndex : this.$piskelController.currentFrameIndex, + layerIndex : this.$piskelController.currentLayerIndex }; var isSnapshot = stateInfo.type === ns.HistoryService.SNAPSHOT; var isNoSnapshot = stateInfo.type === ns.HistoryService.REPLAY_NO_SNAPSHOT; - var isAtAutoSnapshotInterval = this.currentIndex % SNAPSHOT_PERIOD === 0 || this.saveNextAsSnapshot; + var isAtAutoSnapshotInterval = this.currentIndex % ns.HistoryService.SNAPSHOT_PERIOD === 0 || this.saveNextAsSnapshot; if (isNoSnapshot && isAtAutoSnapshotInterval) { this.saveNextAsSnapshot = true; } else if (isSnapshot || isAtAutoSnapshotInterval) { - state.piskel = this.piskelController.serialize(true); + state.piskel = this.$piskelController.serialize(true); this.saveNextAsSnapshot = false; } @@ -71,7 +71,7 @@ }; ns.HistoryService.prototype.isLoadStateAllowed_ = function (index) { - var timeOk = (Date.now() - this.lastLoadState) > LOAD_STATE_INTERVAL; + var timeOk = (Date.now() - this.lastLoadState) > ns.HistoryService.LOAD_STATE_INTERVAL; var indexInRange = index >= 0 && index < this.stateQueue.length; return timeOk && indexInRange; }; @@ -94,7 +94,7 @@ } var serializedPiskel = this.getSnapshotFromState_(snapshotIndex); var onPiskelLoadedCb = this.onPiskelLoaded_.bind(this, index, snapshotIndex); - pskl.utils.serialization.Deserializer.deserialize(serializedPiskel, onPiskelLoadedCb); + this.$deserializer.deserialize(serializedPiskel, onPiskelLoadedCb); } } catch (e) { window.console.error("[CRITICAL ERROR] : Unable to load a history state."); @@ -126,8 +126,8 @@ ns.HistoryService.prototype.onPiskelLoaded_ = function (index, snapshotIndex, piskel) { var originalSize = this.getPiskelSize_(); - piskel.setDescriptor(this.piskelController.piskel.getDescriptor()); - this.piskelController.setPiskel(piskel); + piskel.setDescriptor(this.$piskelController.piskel.getDescriptor()); + this.$piskelController.setPiskel(piskel); for (var i = snapshotIndex + 1 ; i <= index ; i++) { var state = this.stateQueue[i]; @@ -135,6 +135,7 @@ this.replayState(state); } + // Should only do this when going backwards var lastState = this.stateQueue[index+1]; if (lastState) { this.setupState(lastState); @@ -148,18 +149,18 @@ }; ns.HistoryService.prototype.getPiskelSize_ = function () { - return this.piskelController.getWidth() + 'x' + this.piskelController.getHeight(); + return this.$piskelController.getWidth() + 'x' + this.$piskelController.getHeight(); }; ns.HistoryService.prototype.setupState = function (state) { - this.piskelController.setCurrentFrameIndex(state.frameIndex); - this.piskelController.setCurrentLayerIndex(state.layerIndex); + this.$piskelController.setCurrentFrameIndex(state.frameIndex); + this.$piskelController.setCurrentLayerIndex(state.layerIndex); }; ns.HistoryService.prototype.replayState = function (state) { var action = state.action; var type = action.type; - var layer = this.piskelController.getLayerAt(state.layerIndex); + var layer = this.$piskelController.getLayerAt(state.layerIndex); var frame = layer.getFrameAt(state.frameIndex); action.scope.replay(frame, action.replay); }; diff --git a/test/js/service/HistoryServiceTest.js b/test/js/service/HistoryServiceTest.js index f201f41d..15827bb4 100644 --- a/test/js/service/HistoryServiceTest.js +++ b/test/js/service/HistoryServiceTest.js @@ -1,22 +1,86 @@ -describe("History Service suite", function() { - it("starts at -1", function() { - var mockPiskelController = {}; - var mockShortcutService = {}; - var historyService = new pskl.service.HistoryService(mockPiskelController, mockShortcutService); - expect(historyService.currentIndex).toBe(-1); - }); +var callFactory = function (method) { + return { + times : function (times) { + var results = []; + for (var i = 0 ; i < times ; i++) { + results.push(method()); + } + return results; + }, + once : function () { + return method(); + } + }; +}; - it("is at 0 after init", function() { +describe("History Service suite", function() { + var SERIALIZED_PISKEL = 'serialized-piskel'; + var historyService = null; + + var getLastState = function () { + return historyService.stateQueue[historyService.currentIndex]; + }; + + var createMockHistoryService = function () { var mockPiskelController = { serialize : function () { - return 'serialized-piskel'; + return SERIALIZED_PISKEL; } }; var mockShortcutService = { addShortcut : function () {} }; - var historyService = new pskl.service.HistoryService(mockPiskelController, mockShortcutService); + return new pskl.service.HistoryService(mockPiskelController, mockShortcutService); + }; + + it("starts at -1", function() { + historyService = createMockHistoryService(); + expect(historyService.currentIndex).toBe(-1); + }); + + it("is at 0 after init", function() { + historyService = createMockHistoryService(); historyService.init(); expect(historyService.currentIndex).toBe(0); }); + + var sendSaveEvents = function (type) { + return callFactory (function () { + $.publish(Events.PISKEL_SAVE_STATE, { + type : type, + scope : {}, + replay : {} + }); + }); + }; + + it("stores a piskel snapshot after 5 SAVE", function () { + // BEFORE + var SNAPSHOT_PERIOD_BACKUP = pskl.service.HistoryService.SNAPSHOT_PERIOD; + pskl.service.HistoryService.SNAPSHOT_PERIOD = 5; + + historyService = createMockHistoryService(); + historyService.init(); + + sendSaveEvents(pskl.service.HistoryService.REPLAY).times(5); + + expect(historyService.currentIndex).toBe(5); + + expect(getLastState().piskel).toBe(SERIALIZED_PISKEL); + + sendSaveEvents(pskl.service.HistoryService.REPLAY).times(4); + + sendSaveEvents(pskl.service.HistoryService.REPLAY_NO_SNAPSHOT).once(); + expect(getLastState().piskel).toBeUndefined(); + + sendSaveEvents(pskl.service.HistoryService.REPLAY_NO_SNAPSHOT).once(); + expect(getLastState().piskel).toBeUndefined(); + + sendSaveEvents(pskl.service.HistoryService.REPLAY).once(); + expect(getLastState().piskel).toBe(SERIALIZED_PISKEL); + + // AFTER + pskl.service.HistoryService.SNAPSHOT_PERIOD = SNAPSHOT_PERIOD_BACKUP; + + }) }); \ No newline at end of file From b0ec276aacd9006945a7d6ea1d9b6d7ec511bb05 Mon Sep 17 00:00:00 2001 From: jdescottes Date: Thu, 14 Aug 2014 01:50:33 +0200 Subject: [PATCH 05/20] Adding karma tests to grunt build --- Gruntfile.js | 11 ++++++++- karma.conf.js | 4 ++-- misc/scripts/package-windows-executable.cmd | 26 +++------------------ package.json | 1 + 4 files changed, 16 insertions(+), 26 deletions(-) diff --git a/Gruntfile.js b/Gruntfile.js index 6981bb2d..250a884e 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -228,6 +228,11 @@ module.exports = function(grunt) { dest: 'build/closure/closure_compiled_binary.js' } }, + karma: { + unit: { + configFile: 'karma.conf.js' + } + }, nodewebkit: { options: { build_dir: './dest/desktop/', // destination folder of releases. @@ -262,6 +267,7 @@ module.exports = function(grunt) { grunt.loadNpmTasks('grunt-replace'); grunt.loadNpmTasks('grunt-ghost'); grunt.loadNpmTasks('grunt-open'); + grunt.loadNpmTasks('grunt-karma'); grunt.loadNpmTasks('grunt-leading-indent'); grunt.loadNpmTasks('grunt-node-webkit-builder'); grunt.loadNpmTasks('grunt-contrib-copy'); @@ -269,8 +275,11 @@ module.exports = function(grunt) { // Validate grunt.registerTask('lint', ['leadingIndent:jsFiles', 'leadingIndent:cssFiles', 'jshint']); + // karma/unit-tests task + grunt.registerTask('unit-test', ['karma']); + // Validate & Test - grunt.registerTask('test', ['lint', 'compile', 'express:test', 'ghost:default']); + grunt.registerTask('test', ['lint', 'compile', 'unit-test','express:test', 'ghost:default']); // Validate & Test (faster version) will NOT work on travis !! grunt.registerTask('precommit', ['lint', 'compile', 'express:test', 'ghost:local']); diff --git a/karma.conf.js b/karma.conf.js index 91d9f73b..1580b4b3 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -60,11 +60,11 @@ module.exports = function(config) { // start these browsers // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher - browsers: ['Chrome'], + browsers: ['PhantomJS'], // Continuous Integration mode // if true, Karma captures browsers, runs the tests and exits - singleRun: false + singleRun: true }); }; diff --git a/misc/scripts/package-windows-executable.cmd b/misc/scripts/package-windows-executable.cmd index 5d37241c..f8fd6c4f 100644 --- a/misc/scripts/package-windows-executable.cmd +++ b/misc/scripts/package-windows-executable.cmd @@ -12,34 +12,14 @@ SETLOCAL set APP_BIN="%PISKEL_HOME%\dest\desktop\cache\win\0.9.2" set MISC_FOLDER=%PISKEL_HOME%\misc set RELEASES_FOLDER=%PISKEL_HOME%\dest\desktop\releases - set DEST_FOLDER=%RELEASES_FOLDER%\win + set DEST_FOLDER=%RELEASES_FOLDER%\piskel\win\piskel - ECHO "Building Piskel executable for Windows ..." - - ECHO "Creating release directory ..." - MKDIR "%DEST_FOLDER%" - ECHO "DONE" - - ECHO "Packaging executable ..." - COPY /b "%APP_BIN%\nw.exe"+"%RELEASES_FOLDER%\piskel\piskel.nw" "%DEST_FOLDER%\piskel-raw.exe" - ECHO "DONE" - - ECHO "COPYing dependencies ..." - COPY "%APP_BIN%\*.dll" "%DEST_FOLDER%\" - COPY "%APP_BIN%\nw.pak" "%DEST_FOLDER%\" - ECHO "DONE" ECHO "Updating Piskel icon -- Using Resource Hacker" - %RESOURCE_HACKER_PATH%\ResHacker -addoverwrite "%DEST_FOLDER%\piskel-raw.exe", "%DEST_FOLDER%\piskel-exploded.exe", "%MISC_FOLDER%\desktop\logo.ico", ICONGROUP, IDR_MAINFRAME, 1033 - DEL "%DEST_FOLDER%\piskel-raw.exe" + %RESOURCE_HACKER_PATH%\ResHacker -addoverwrite "%DEST_FOLDER%\piskel.exe", "%DEST_FOLDER%\piskel-logo.exe", "%MISC_FOLDER%\desktop\logo.ico", ICONGROUP, IDR_MAINFRAME, 1033 + DEL "%DEST_FOLDER%\piskel.exe" ECHO "DONE" - ECHO "Boxing application to single file -- Using Enigma Virtual Box" - %VBOX_PATH%\enigmavbconsole "%MISC_FOLDER%\desktop\package-piskel.evb" - DEL "%DEST_FOLDER%\*.dll" - DEL "%DEST_FOLDER%\nw.pak" - DEL "%DEST_FOLDER%\piskel-exploded.exe" - ECHO "DONE" PAUSE explorer "%DEST_FOLDER%\" diff --git a/package.json b/package.json index e5c39646..a24fa246 100644 --- a/package.json +++ b/package.json @@ -29,6 +29,7 @@ "grunt-node-webkit-builder": "0.1.21", "grunt-open": "0.2.3", "grunt-replace": "0.7.8", + "grunt-karma": "~0.8.2", "karma": "0.12.17", "karma-chrome-launcher": "^0.1.4", "karma-jasmine": "^0.1.5", From 715c148908e99d3f2f98258cadb53879f55d16cf Mon Sep 17 00:00:00 2001 From: jdescottes Date: Thu, 14 Aug 2014 02:00:49 +0200 Subject: [PATCH 06/20] Update node version for travis build --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index d90e659c..1f0d5f38 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,6 @@ language: node_js node_js: - - 0.8 + - 0.10.9 before_install: - npm update -g npm - npm install -g grunt-cli From 844437dfc956c8c6a926aa45b9ceb5d90d8b6977 Mon Sep 17 00:00:00 2001 From: jdescottes Date: Thu, 14 Aug 2014 02:09:08 +0200 Subject: [PATCH 07/20] Update (hardcode to 1.4.21) npm version for travis build --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 1f0d5f38..891041c2 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,8 +1,8 @@ language: node_js node_js: - - 0.10.9 + - 0.10 before_install: - - npm update -g npm + - npm update -g npm@1.4.21 - npm install -g grunt-cli - git clone git://github.com/n1k0/casperjs.git ~/casperjs - cd ~/casperjs From e711050f75d3be25e88fcb31f896bc1cd29e081c Mon Sep 17 00:00:00 2001 From: jdescottes Date: Thu, 14 Aug 2014 02:24:59 +0200 Subject: [PATCH 08/20] Trying other version of node-webkit --- .travis.yml | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 891041c2..620a33f3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,7 +2,7 @@ language: node_js node_js: - 0.10 before_install: - - npm update -g npm@1.4.21 + - npm update -g npm - npm install -g grunt-cli - git clone git://github.com/n1k0/casperjs.git ~/casperjs - cd ~/casperjs diff --git a/package.json b/package.json index a24fa246..0c5d5df4 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ "karma": "0.12.17", "karma-chrome-launcher": "^0.1.4", "karma-jasmine": "^0.1.5", - "nodewebkit": "~0.9.2-8" + "nodewebkit": "~0.10.1" }, "window": { "title": "Piskel", From 34dbcedec3d5f2811500e23df8605d49b53fda7d Mon Sep 17 00:00:00 2001 From: jdescottes Date: Thu, 14 Aug 2014 02:28:37 +0200 Subject: [PATCH 09/20] Adding karma-phantomjs-launcher to package.json --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index 0c5d5df4..05405c69 100644 --- a/package.json +++ b/package.json @@ -32,6 +32,7 @@ "grunt-karma": "~0.8.2", "karma": "0.12.17", "karma-chrome-launcher": "^0.1.4", + "karma-phantomjs-launcher": "^0.1.4", "karma-jasmine": "^0.1.5", "nodewebkit": "~0.10.1" }, From 1955d3f8f5c4b42418af333630960b4cff3cce91 Mon Sep 17 00:00:00 2001 From: jdescottes Date: Thu, 21 Aug 2014 00:50:59 +0200 Subject: [PATCH 10/20] First implementation of tool tester --- src/js/Events.js | 10 +- src/js/app.js | 11 +- src/js/controller/DrawingController.js | 13 +- src/js/controller/ToolController.js | 9 ++ .../piskel/PublicPiskelController.js | 22 ++-- .../controller/settings/ImportController.js | 26 ++-- src/js/devtools/MouseEvent.js | 25 ++++ src/js/devtools/TestRecordController.js | 76 ++++++++++++ src/js/devtools/TestRecordPlayer.js | 116 ++++++++++++++++++ src/js/devtools/TestRecorder.js | 115 +++++++++++++++++ src/js/rendering/frame/FrameRenderer.js | 22 ++++ src/piskel-script-list.js | 7 ++ 12 files changed, 422 insertions(+), 30 deletions(-) create mode 100644 src/js/devtools/MouseEvent.js create mode 100644 src/js/devtools/TestRecordController.js create mode 100644 src/js/devtools/TestRecordPlayer.js create mode 100644 src/js/devtools/TestRecorder.js diff --git a/src/js/Events.js b/src/js/Events.js index 4c943a70..31d1d0e3 100644 --- a/src/js/Events.js +++ b/src/js/Events.js @@ -2,6 +2,8 @@ var Events = { TOOL_SELECTED : "TOOL_SELECTED", + SELECT_TOOL : "SELECT_TOOL", + TOOL_RELEASED : "TOOL_RELEASED", SELECT_PRIMARY_COLOR: "SELECT_PRIMARY_COLOR", SELECT_SECONDARY_COLOR: "SELECT_SECONDARY_COLOR", @@ -47,5 +49,11 @@ var Events = { ZOOM_CHANGED : "ZOOM_CHANGED", - CURRENT_COLORS_UPDATED : "CURRENT_COLORS_UPDATED" + CURRENT_COLORS_UPDATED : "CURRENT_COLORS_UPDATED", + + MOUSE_EVENT : "MOUSE_EVENT", + + // Tests + + TEST_RECORD_END : "TEST_RECORD_END" }; \ No newline at end of file diff --git a/src/js/app.js b/src/js/app.js index 8c940368..4142bc2f 100644 --- a/src/js/app.js +++ b/src/js/app.js @@ -29,8 +29,8 @@ var layer = new pskl.model.Layer("Layer 1"); var frame = new pskl.model.Frame(size.width, size.height); - layer.addFrame(frame); + layer.addFrame(frame); piskel.addLayer(layer); this.corePiskelController = new pskl.controller.piskel.PiskelController(piskel); @@ -115,6 +115,15 @@ } this.storageService.init(); + // test tools + var testModeOn = document.location.href.toLowerCase().indexOf('test=true') !== -1; + if (testModeOn) { + this.testRecorder = new pskl.devtools.TestRecorder(this.piskelController); + this.testRecorder.init(); + + this.testRecordController = new pskl.devtools.TestRecordController(this.testRecorder); + this.testRecordController.init(); + } var drawingLoop = new pskl.rendering.DrawingLoop(); drawingLoop.addCallback(this.render, this); diff --git a/src/js/controller/DrawingController.js b/src/js/controller/DrawingController.js index 838db2d3..b4415679 100644 --- a/src/js/controller/DrawingController.js +++ b/src/js/controller/DrawingController.js @@ -134,8 +134,9 @@ * @private */ ns.DrawingController.prototype.onMousedown_ = function (event) { + $.publish(Events.MOUSE_EVENT, [event, this]); var frame = this.piskelController.getCurrentFrame(); - var coords = this.renderer.getCoordinates(event.clientX, event.clientY); + var coords = this.getSpriteCoordinates(event.clientX, event.clientY); if (event.button === Constants.MIDDLE_BUTTON) { if (frame.containsPixel(coords.x, coords.y)) { @@ -204,10 +205,11 @@ }; ns.DrawingController.prototype.moveTool_ = function (x, y, event) { - var coords = this.renderer.getCoordinates(x, y); + var coords = this.getSpriteCoordinates(x, y); var currentFrame = this.piskelController.getCurrentFrame(); if (this.isClicked) { + $.publish(Events.MOUSE_EVENT, [event, this]); // Warning : do not call setCurrentButton here // mousemove do not have the correct mouse button information on all browsers this.currentToolBehavior.moveToolAt( @@ -248,6 +250,7 @@ */ ns.DrawingController.prototype.onMouseup_ = function (event) { if(this.isClicked) { + $.publish(Events.MOUSE_EVENT, [event, this]); // A mouse button was clicked on the drawing canvas before this mouseup event, // the user was probably drawing on the canvas. // Note: The mousemove movement (and the mouseup) may end up outside @@ -256,7 +259,7 @@ this.isClicked = false; this.setCurrentButton(event); - var coords = this.renderer.getCoordinates(event.clientX, event.clientY); + var coords = this.getSpriteCoordinates(event.clientX, event.clientY); this.currentToolBehavior.releaseToolAt( coords.x, coords.y, @@ -280,6 +283,10 @@ return this.renderer.getCoordinates(screenX, screenY); }; + ns.DrawingController.prototype.getScreenCoordinates = function(spriteX, spriteY) { + return this.renderer.reverseCoordinates(spriteX, spriteY); + }; + ns.DrawingController.prototype.setCurrentButton = function (event) { this.currentMouseButton_ = event.button; }; diff --git a/src/js/controller/ToolController.js b/src/js/controller/ToolController.js index 4aaa988f..270718c8 100644 --- a/src/js/controller/ToolController.js +++ b/src/js/controller/ToolController.js @@ -38,6 +38,8 @@ this.selectTool_(this.tools[0]); // Activate listener on tool panel: $("#tool-section").mousedown($.proxy(this.onToolIconClicked_, this)); + + $.subscribe(Events.SELECT_TOOL, this.onSelectToolEvent_.bind(this)); }; /** @@ -54,6 +56,13 @@ stage.data("selected-tool-class", tool.instance.toolId); }; + ns.ToolController.prototype.onSelectToolEvent_ = function(event, toolId) { + var tool = this.getToolById_(toolId); + if (tool) { + this.selectTool_(tool); + } + }; + /** * @private */ diff --git a/src/js/controller/piskel/PublicPiskelController.js b/src/js/controller/piskel/PublicPiskelController.js index 24ebb4e3..39264cef 100644 --- a/src/js/controller/piskel/PublicPiskelController.js +++ b/src/js/controller/piskel/PublicPiskelController.js @@ -47,17 +47,6 @@ this.duplicateFrameAt(this.getCurrentFrameIndex()); }; - ns.PublicPiskelController.prototype.raiseSaveStateEvent_ = function (fn, args) { - $.publish(Events.PISKEL_SAVE_STATE, { - type : pskl.service.HistoryService.REPLAY_NO_SNAPSHOT, - scope : this, - replay : { - fn : fn, - args : args - } - }); - }; - ns.PublicPiskelController.prototype.replay = function (frame, replayData) { replayData.fn.apply(this.piskelController, replayData.args); }; @@ -141,4 +130,15 @@ return this.piskelController.piskel; }; + ns.PublicPiskelController.prototype.raiseSaveStateEvent_ = function (fn, args) { + $.publish(Events.PISKEL_SAVE_STATE, { + type : pskl.service.HistoryService.REPLAY_NO_SNAPSHOT, + scope : this, + replay : { + fn : fn, + args : args + } + }); + }; + })(); \ No newline at end of file diff --git a/src/js/controller/settings/ImportController.js b/src/js/controller/settings/ImportController.js index b626dbee..3821a1e6 100644 --- a/src/js/controller/settings/ImportController.js +++ b/src/js/controller/settings/ImportController.js @@ -39,7 +39,10 @@ }; ns.ImportController.prototype.onOpenPiskelChange_ = function (evt) { - this.openPiskelFile_(); + var files = this.hiddenOpenPiskelInput.get(0).files; + if (files.length == 1) { + this.openPiskelFile_(files[0]); + } }; ns.ImportController.prototype.onOpenPiskelClick_ = function (evt) { @@ -51,19 +54,14 @@ this.closeDrawer_(); }; - ns.ImportController.prototype.openPiskelFile_ = function () { - var files = this.hiddenOpenPiskelInput.get(0).files; - if (files.length == 1) { - - var file = files[0]; - if (this.isPiskel_(file)){ - pskl.utils.PiskelFileUtils.loadFromFile(file, function (piskel, descriptor, fps) { - piskel.setDescriptor(descriptor); - pskl.app.piskelController.setPiskel(piskel); - pskl.app.animationController.setFPS(fps); - }); - this.closeDrawer_(); - } + ns.ImportController.prototype.openPiskelFile_ = function (file) { + if (this.isPiskel_(file)){ + pskl.utils.PiskelFileUtils.loadFromFile(file, function (piskel, descriptor, fps) { + piskel.setDescriptor(descriptor); + pskl.app.piskelController.setPiskel(piskel); + pskl.app.animationController.setFPS(fps); + }); + this.closeDrawer_(); } }; diff --git a/src/js/devtools/MouseEvent.js b/src/js/devtools/MouseEvent.js new file mode 100644 index 00000000..7fe44904 --- /dev/null +++ b/src/js/devtools/MouseEvent.js @@ -0,0 +1,25 @@ +(function () { + var ns = $.namespace('pskl.devtools'); + + ns.MouseEvent = function (event, coords) { + this.event = { + type : event.type, + button : event.button, + shiftKey : event.shiftKey, + altKey : event.altKey, + ctrlKey : event.ctrlKey + }; + this.coords = coords; + this.type = 'mouse-event'; + }; + + ns.MouseEvent.prototype.equals = function (otherEvent) { + if (otherEvent && otherEvent instanceof ns.MouseEvent) { + var sameEvent = JSON.stringify(otherEvent.event) == JSON.stringify(this.event); + var sameCoords = JSON.stringify(otherEvent.coords) == JSON.stringify(this.coords); + } else { + return false; + } + }; + +})(); \ No newline at end of file diff --git a/src/js/devtools/TestRecordController.js b/src/js/devtools/TestRecordController.js new file mode 100644 index 00000000..22016a1f --- /dev/null +++ b/src/js/devtools/TestRecordController.js @@ -0,0 +1,76 @@ +(function () { + var ns = $.namespace('pskl.devtools'); + + ns.TestRecordController = function (testRecorder) { + this.testRecorder = testRecorder; + $.subscribe(Events.TEST_RECORD_END, this.onTestRecordEnd_.bind(this)); + }; + + ns.TestRecordController.prototype.init = function () { + var fileInput = document.createElement('input'); + fileInput.setAttribute('type', 'file'); + fileInput.addEventListener('change', this.onFileInputChange_.bind(this)); + fileInput.style.display = 'none'; + + var container = document.createElement('div'); + container.style.cssText = 'position:absolute;z-index:10000;margin:5px;padding:10px;background:lightgrey'; + document.body.appendChild(container); + + var loadInput = document.createElement('button'); + loadInput.innerHTML = 'Load Test ...'; + loadInput.addEventListener('click', this.onLoadInputClick_.bind(this)); + + var startInput = document.createElement('button'); + startInput.innerHTML = 'Start record'; + startInput.addEventListener('click', this.onStartInputClick_.bind(this)); + + var stopInput = document.createElement('button'); + stopInput.innerHTML = 'Stop record'; + stopInput.addEventListener('click', this.onStopInputClick_.bind(this)); + stopInput.setAttribute('disabled','disabled'); + + this.container = container; + this.fileInput = this.container.appendChild(fileInput); + this.loadInput = this.container.appendChild(loadInput); + this.startInput = this.container.appendChild(startInput); + this.stopInput = this.container.appendChild(stopInput); + }; + + ns.TestRecordController.prototype.onLoadInputClick_ = function () { + this.fileInput.click(); + }; + + ns.TestRecordController.prototype.onFileInputChange_ = function () { + var files = this.fileInput.files; + if (files.length == 1) { + var file =files[0]; + pskl.utils.FileUtils.readFile(file, function (content) { + var testRecord = JSON.parse(window.atob(content.replace(/data\:.*?\;base64\,/,''))); + var testRecordPlayer = new ns.TestRecordPlayer(testRecord); + testRecordPlayer.start(); + }.bind(this)); + } + }; + + ns.TestRecordController.prototype.onStartInputClick_ = function () { + this.testRecorder.startRecord(); + this.startInput.setAttribute('disabled','disabled'); + this.stopInput.removeAttribute('disabled'); + }; + + ns.TestRecordController.prototype.onStopInputClick_ = function () { + var testRecord = this.testRecorder.stopRecord(); + + pskl.utils.BlobUtils.stringToBlob(testRecord, function(blob) { + pskl.utils.FileUtils.downloadAsFile(blob, 'record_piskel.json'); + }.bind(this), "application/json"); + + this.startInput.removeAttribute('disabled'); + this.stopInput.setAttribute('disabled','disabled'); + }; + + ns.TestRecordController.prototype.onTestRecordEnd_ = function (evt, success) { + console.log('test finished : ', success); + }; + +})(); \ No newline at end of file diff --git a/src/js/devtools/TestRecordPlayer.js b/src/js/devtools/TestRecordPlayer.js new file mode 100644 index 00000000..eef846c6 --- /dev/null +++ b/src/js/devtools/TestRecordPlayer.js @@ -0,0 +1,116 @@ +(function () { + var ns = $.namespace('pskl.devtools'); + + ns.TestRecordPlayer = function (testRecord) { + this.initialState = testRecord.initialState; + this.events = testRecord.events; + this.png = testRecord.png; + this.shim = null; + }; + + ns.TestRecordPlayer.STEP = 30; + + ns.TestRecordPlayer.prototype.start = function () { + this.setupInitialState_(); + this.createMouseShim_(); + this.playEvent_(0); + }; + + ns.TestRecordPlayer.prototype.setupInitialState_ = function () { + var size = this.initialState.size; + var piskel = this.createPiskel_(size.width, size.height); + pskl.app.piskelController.setPiskel(piskel, true); + + $.publish(Events.SELECT_PRIMARY_COLOR, [this.initialState.primaryColor]); + $.publish(Events.SELECT_SECONDARY_COLOR, [this.initialState.secondaryColor]); + $.publish(Events.SELECT_TOOL, [this.initialState.selectedTool]); + }; + + ns.TestRecordPlayer.prototype.createMouseShim_ = function () { + this.shim = document.createElement('DIV'); + this.shim.style.cssText = 'position:fixed;top:0;left:0;right:0;left:0;bottom:0;z-index:15000'; + this.shim.addEventListener('mousemove', function (e) { + e.stopPropagation(); + e.preventDefault(); + }); + document.body.appendChild(this.shim); + }; + + ns.TestRecordPlayer.prototype.createPiskel_ = function (width, height) { + var descriptor = new pskl.model.piskel.Descriptor('TestPiskel', ''); + var piskel = new pskl.model.Piskel(width, height, descriptor); + var layer = new pskl.model.Layer("Layer 1"); + var frame = new pskl.model.Frame(width, height); + + layer.addFrame(frame); + piskel.addLayer(layer); + + return piskel; + }; + + ns.TestRecordPlayer.prototype.playEvent_ = function (index) { + this.timer = window.setTimeout(function () { + var recordEvent = this.events[index]; + + if (recordEvent.type === 'mouse-event') { + this.playMouseEvent_(recordEvent); + } else if (recordEvent.type === 'color-event') { + this.playColorEvent_(recordEvent); + } else if (recordEvent.type === 'tool-event') { + this.playToolEvent_(recordEvent); + } else if (recordEvent.type === 'instrumented-event') { + this.playInstrumentedEvent_(recordEvent); + } + + if (this.events[index+1]) { + this.playEvent_(index+1); + } else { + this.onTestEnd_(); + } + }.bind(this), ns.TestRecordPlayer.STEP); + }; + + ns.TestRecordPlayer.prototype.onTestEnd_ = function () { + var renderer = new pskl.rendering.PiskelRenderer(pskl.app.piskelController); + var png = renderer.renderAsCanvas().toDataURL(); + + var success = png === this.png; + + this.shim.parentNode.removeChild(this.shim); + this.shim = null; + + $.publish(Events.TEST_RECORD_END, [success]); + }; + + ns.TestRecordPlayer.prototype.playMouseEvent_ = function (recordEvent) { + var event = recordEvent.event; + var screenCoordinates = pskl.app.drawingController.getScreenCoordinates(recordEvent.coords.x, recordEvent.coords.y); + event.clientX = screenCoordinates.x; + event.clientY = screenCoordinates.y; + if (event.type == 'mousedown') { + pskl.app.drawingController.onMousedown_(event); + } else if (event.type == 'mouseup') { + pskl.app.drawingController.onMouseup_(event); + } else if (event.type == 'mousemove') { + pskl.app.drawingController.onMousemove_(event); + } + }; + + ns.TestRecordPlayer.prototype.playColorEvent_ = function (recordEvent) { + if (recordEvent.isPrimary) { + $.publish(Events.SELECT_PRIMARY_COLOR, [recordEvent.color]); + } else { + $.publish(Events.SELECT_SECONDARY_COLOR, [recordEvent.color]); + } + }; + + ns.TestRecordPlayer.prototype.playToolEvent_ = function (recordEvent) { + $.publish(Events.SELECT_TOOL, [recordEvent.toolId]); + }; + + ns.TestRecordPlayer.prototype.playInstrumentedEvent_ = function (recordEvent) { + pskl.app.piskelController[recordEvent.methodName].apply(pskl.app.piskelController, recordEvent.args); + }; + + +})(); \ No newline at end of file diff --git a/src/js/devtools/TestRecorder.js b/src/js/devtools/TestRecorder.js new file mode 100644 index 00000000..b04b7b97 --- /dev/null +++ b/src/js/devtools/TestRecorder.js @@ -0,0 +1,115 @@ +(function () { + var ns = $.namespace('pskl.devtools'); + + ns.TestRecorder = function (piskelController) { + this.piskelController = piskelController; + this.isRecording = false; + this.reset(); + }; + + ns.TestRecorder.prototype.init = function () { + $.subscribe(Events.MOUSE_EVENT, this.onMouseEvent_.bind(this)); + $.subscribe(Events.TOOL_SELECTED, this.onToolEvent_.bind(this)); + $.subscribe(Events.PRIMARY_COLOR_SELECTED, this.onColorEvent_.bind(this, true)); + $.subscribe(Events.SECONDARY_COLOR_SELECTED, this.onColorEvent_.bind(this, false)); + + for (var key in this.piskelController) { + if (typeof this.piskelController[key] == 'function') { + var methodTriggersReset = this.piskelController[key].toString().indexOf('Events.PISKEL_RESET') != -1; + if (methodTriggersReset) { + this.piskelController[key] = this.instrumentMethod_(this.piskelController, key); + } + } + } + }; + + ns.TestRecorder.prototype.instrumentMethod_ = function (object, methodName) { + var method = object[methodName]; + var testRecorder = this; + return function () { + testRecorder.onInstrumentedMethod_(object, methodName, arguments); + return method.apply(this, arguments); + }; + }; + + ns.TestRecorder.prototype.reset = function () { + this.initialState = {}; + this.events = []; + }; + + ns.TestRecorder.prototype.startRecord = function () { + this.isRecording = true; + this.initialState = { + size : { + width : this.piskelController.getWidth(), + height : this.piskelController.getHeight() + }, + primaryColor : pskl.app.paletteController.getPrimaryColor(), + secondaryColor : pskl.app.paletteController.getSecondaryColor(), + selectedTool : pskl.app.toolController.currentSelectedTool.instance.toolId + }; + }; + + ns.TestRecorder.prototype.stopRecord = function () { + this.isRecording = false; + + var renderer = new pskl.rendering.PiskelRenderer(this.piskelController); + var png = renderer.renderAsCanvas().toDataURL(); + + var testRecord = JSON.stringify({ + events : this.events, + initialState : this.initialState, + png : png + }); + + this.reset(); + + return testRecord; + }; + + ns.TestRecorder.prototype.onMouseEvent_ = function (evt, mouseEvent, originator) { + if (this.isRecording) { + this.recordMouseEvent_(mouseEvent); + } + }; + + ns.TestRecorder.prototype.onColorEvent_ = function (isPrimary, evt, color) { + if (this.isRecording) { + var recordEvent = {}; + recordEvent.type = 'color-event'; + recordEvent.color = color; + recordEvent.isPrimary = isPrimary; + this.events.push(recordEvent); + } + }; + + ns.TestRecorder.prototype.onToolEvent_ = function (evt, tool) { + if (this.isRecording) { + var recordEvent = {}; + recordEvent.type = 'tool-event'; + recordEvent.toolId = tool.toolId; + this.events.push(recordEvent); + } + }; + + ns.TestRecorder.prototype.onInstrumentedMethod_ = function (callee, methodName, args) { + if (this.isRecording) { + var recordEvent = {}; + recordEvent.type = 'instrumented-event'; + recordEvent.methodName = methodName; + recordEvent.args = Array.prototype.slice.call(args, 0); + this.events.push(recordEvent); + } + }; + + ns.TestRecorder.prototype.recordMouseEvent_ = function (mouseEvent) { + var coords = pskl.app.drawingController.getSpriteCoordinates(mouseEvent.clientX, mouseEvent.clientY); + var recordEvent = new ns.MouseEvent(mouseEvent, coords); + var lastEvent = this.events[this.events.length-1]; + + if (!recordEvent.equals(lastEvent)) { + this.events.push(recordEvent); + } + }; + +})(); \ No newline at end of file diff --git a/src/js/rendering/frame/FrameRenderer.js b/src/js/rendering/frame/FrameRenderer.js index ae16f7a9..94d5a440 100644 --- a/src/js/rendering/frame/FrameRenderer.js +++ b/src/js/rendering/frame/FrameRenderer.js @@ -196,6 +196,28 @@ }; }; + ns.FrameRenderer.prototype.reverseCoordinates = function(x, y) { + var cellSize = this.zoom; + + x = x * cellSize; + y = y * cellSize; + + x = x - this.offset.x * cellSize; + y = y - this.offset.y * cellSize; + + x = x + this.margin.x; + y = y + this.margin.y; + + var containerOffset = this.container.offset(); + x = x + containerOffset.left; + y = y + containerOffset.top; + + return { + x : x + (cellSize/2), + y : y + (cellSize/2) + }; + }; + /** * @private */ diff --git a/src/piskel-script-list.js b/src/piskel-script-list.js index 09e4041b..2fc6e651 100644 --- a/src/piskel-script-list.js +++ b/src/piskel-script-list.js @@ -137,6 +137,13 @@ "js/drawingtools/selectiontools/ShapeSelect.js", "js/drawingtools/ColorPicker.js", "js/drawingtools/ColorSwap.js", + + // Devtools + "js/devtools/MouseEvent.js", + "js/devtools/TestRecorder.js", + "js/devtools/TestRecordPlayer.js", + "js/devtools/TestRecordController.js", + // Application controller and initialization "js/app.js", // Bonus features !! From 56b1f421bc07211602a70b3b0528ef761d22c52d Mon Sep 17 00:00:00 2001 From: jdescottes Date: Fri, 22 Aug 2014 00:37:35 +0200 Subject: [PATCH 11/20] add drawing tests to casper --- Gruntfile.js | 33 +++- out.txt | 176 ++++++++++++++++++ src/js/app.js | 15 +- src/js/devtools/DrawingTestRunner.js | 37 ++++ src/js/devtools/MouseEvent.js | 1 + src/js/devtools/TestRecordPlayer.js | 19 +- src/js/utils/CanvasUtils.js | 7 + src/js/utils/core.js | 27 ++- src/piskel-script-list.js | 1 + test/integration/casperjs/DrawingTest.js | 42 +++++ .../casperjs/{smoke_test.js => SmokeTest.js} | 0 test/integration/casperjs/TestSuite.js | 4 + .../drawing-records/ComplexDrawing1.json | 1 + .../drawing-records/ComplexDrawing2.json | 1 + .../drawing-records/SimplePenDrawing1.json | 1 + 15 files changed, 341 insertions(+), 24 deletions(-) create mode 100644 out.txt create mode 100644 src/js/devtools/DrawingTestRunner.js create mode 100644 test/integration/casperjs/DrawingTest.js rename test/integration/casperjs/{smoke_test.js => SmokeTest.js} (100%) create mode 100644 test/integration/casperjs/TestSuite.js create mode 100644 test/integration/casperjs/drawing-records/ComplexDrawing1.json create mode 100644 test/integration/casperjs/drawing-records/ComplexDrawing2.json create mode 100644 test/integration/casperjs/drawing-records/SimplePenDrawing1.json diff --git a/Gruntfile.js b/Gruntfile.js index 250a884e..624806cb 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -10,21 +10,27 @@ * If you run this task locally, it may require some env set up first. */ -var SOURCE_FOLDER = "src"; module.exports = function(grunt) { var dateFormat = require('dateformat'); var now = new Date(); var version = '-' + dateFormat(now, "yyyy-mm-dd-hh-MM"); - var mapToSrcFolder = function (path) {return [SOURCE_FOLDER, path].join('/');}; + var mapToSrcFolder = function (path) { + return "src/" + path; + }; var piskelScripts = require('./src/piskel-script-list.js').scripts.map(mapToSrcFolder); var piskelStyles = require('./src/piskel-style-list.js').styles.map(mapToSrcFolder); - var getGhostConfig = function (delay) { + var mapToCasperFolder = function (path) { + return "test/integration/casperjs/" + path; + }; + var casperTests = require('./test/integration/casperjs/TestSuite.js').tests.map(mapToCasperFolder); + + var getCasperConfig = function (delay) { return { - filesSrc : ['test/integration/casperjs/*_test.js'], + filesSrc : casperTests, options : { args : { baseUrl : 'http://localhost:' + '<%= express.test.options.port %>/', @@ -41,11 +47,18 @@ module.exports = function(grunt) { }; var getExpressConfig = function (source, port, host) { + var bases; + if (typeof source === 'string') { + bases = [source]; + } else if (Array.isArray(source)) { + bases = source; + } + return { options: { port: port, hostname : host || 'localhost', - bases: [source] + bases: bases } }; }; @@ -74,9 +87,9 @@ module.exports = function(grunt) { ] }, express: { - test: getExpressConfig('src', 9991), + test: getExpressConfig(['src', 'test'], 9991), regular: getExpressConfig('dest', 9001), - debug: getExpressConfig('src', 9901) + debug: getExpressConfig(['src', 'test'], 9901) }, open : { regular : { @@ -97,8 +110,8 @@ module.exports = function(grunt) { } }, ghost : { - 'default' : getGhostConfig(5000), - 'local' : getGhostConfig(50) + 'default' : getCasperConfig(5000), + 'local' : getCasperConfig(50) }, concat : { js : { @@ -282,7 +295,7 @@ module.exports = function(grunt) { grunt.registerTask('test', ['lint', 'compile', 'unit-test','express:test', 'ghost:default']); // Validate & Test (faster version) will NOT work on travis !! - grunt.registerTask('precommit', ['lint', 'compile', 'express:test', 'ghost:local']); + grunt.registerTask('precommit', ['lint', 'compile', 'express:test', 'ghost:default']); // Compile JS code (eg verify JSDoc annotation and types, no actual minified code generated). grunt.registerTask('compile', ['closureCompiler:compile', 'clean:after']); diff --git a/out.txt b/out.txt new file mode 100644 index 00000000..497c0dc9 --- /dev/null +++ b/out.txt @@ -0,0 +1,176 @@ +Running "leadingIndent:jsFiles" (leadingIndent) task +Checking files indentation. Desired indentation: spaces (104 files) +OK + +Running "leadingIndent:cssFiles" (leadingIndent) task +Checking files indentation. Desired indentation: spaces (24 files) +OK + +Running "jshint:files" (jshint) task +>> 106 files lint free. + +Running "closureCompiler:compile" (closureCompiler) task +Executing: java -jar "build/closure/closure_compiler_20130823.jar" --js src/js/Constants.js --js src/js/Events.js --js src/js/app.js --js src/js/controller/AnimatedPreviewController.js --js src/js/controller/CanvasBackgroundController.js --js src/js/controller/CursorCoordinatesController.js --js src/js/controller/DrawingController.js --js src/js/controller/LayersListController.js --js src/js/controller/MinimapController.js --js src/js/controller/NotificationController.js --js src/js/controller/PaletteController.js --js src/js/controller/PalettesListController.js --js src/js/controller/PreviewFilmController.js --js src/js/controller/ToolController.js --js src/js/controller/dialogs/AbstractDialogController.js --js src/js/controller/dialogs/BrowseLocalController.js --js src/js/controller/dialogs/DialogsController.js --js src/js/controller/dialogs/ImportImageController.js --js src/js/controller/dialogs/PaletteManagerController.js --js src/js/controller/piskel/PiskelController.js --js src/js/controller/piskel/PublicPiskelController.js --js src/js/controller/settings/ApplicationSettingsController.js --js src/js/controller/settings/GifExportController.js --js src/js/controller/settings/ImageExportController.js --js src/js/controller/settings/ImportController.js --js src/js/controller/settings/PngExportController.js --js src/js/controller/settings/ResizeController.js --js src/js/controller/settings/SaveController.js --js src/js/controller/settings/SettingsController.js --js src/js/devtools/DrawingTestRunner.js --js src/js/devtools/MouseEvent.js --js src/js/devtools/TestRecordController.js --js src/js/devtools/TestRecordPlayer.js --js src/js/devtools/TestRecorder.js --js src/js/drawingtools/BaseTool.js --js src/js/drawingtools/Circle.js --js src/js/drawingtools/ColorPicker.js --js src/js/drawingtools/ColorSwap.js --js src/js/drawingtools/Eraser.js --js src/js/drawingtools/Lighten.js --js src/js/drawingtools/Move.js --js src/js/drawingtools/PaintBucket.js --js src/js/drawingtools/Rectangle.js --js src/js/drawingtools/ShapeTool.js --js src/js/drawingtools/SimplePen.js --js src/js/drawingtools/Stroke.js --js src/js/drawingtools/VerticalMirrorPen.js --js src/js/drawingtools/selectiontools/BaseSelect.js --js src/js/drawingtools/selectiontools/RectangleSelect.js --js src/js/drawingtools/selectiontools/ShapeSelect.js --js src/js/model/Frame.js --js src/js/model/Layer.js --js src/js/model/Piskel.js --js src/js/model/frame/CachedFrameProcessor.js --js src/js/model/piskel/Descriptor.js --js src/js/rendering/AbstractRenderer.js --js src/js/rendering/CanvasRenderer.js --js src/js/rendering/CompositeRenderer.js --js src/js/rendering/DrawingLoop.js --js src/js/rendering/FramesheetRenderer.js --js src/js/rendering/OnionSkinRenderer.js --js src/js/rendering/PiskelRenderer.js --js src/js/rendering/frame/CachedFrameRenderer.js --js src/js/rendering/frame/FrameRenderer.js --js src/js/rendering/frame/TiledFrameRenderer.js --js src/js/rendering/layer/LayersRenderer.js --js src/js/selection/BaseSelection.js --js src/js/selection/RectangularSelection.js --js src/js/selection/SelectionManager.js --js src/js/selection/ShapeSelection.js --js src/js/service/AppEngineStorageService.js --js src/js/service/BackupService.js --js src/js/service/BeforeUnloadService.js --js src/js/service/CurrentColorsService.js --js src/js/service/FileDropperService.js --js src/js/service/GithubStorageService.js --js src/js/service/HistoryService.js --js src/js/service/ImageUploadService.js --js src/js/service/LocalStorageService.js --js src/js/service/SavedStatusService.js --js src/js/service/keyboard/CheatsheetService.js --js src/js/service/keyboard/KeycodeTranslator.js --js src/js/service/keyboard/ShortcutService.js --js src/js/snippets.js --js src/js/utils/Base64.js --js src/js/utils/BlobUtils.js --js src/js/utils/CanvasUtils.js --js src/js/utils/DateUtils.js --js src/js/utils/Dom.js --js src/js/utils/FileUtils.js --js src/js/utils/FrameUtils.js --js src/js/utils/ImageResizer.js --js src/js/utils/LayerUtils.js --js src/js/utils/Math.js --js src/js/utils/PiskelFileUtils.js --js src/js/utils/PixelUtils.js --js src/js/utils/Template.js --js src/js/utils/UserAgent.js --js src/js/utils/UserSettings.js --js src/js/utils/core.js --js src/js/utils/serialization/Deserializer.js --js src/js/utils/serialization/Serializer.js --js src/js/utils/serialization/backward/Deserializer_v0.js --js src/js/utils/serialization/backward/Deserializer_v1.js --js src/piskel-boot-0.1.0.js --js src/piskel-script-list.js --js_output_file=build/closure/closure_compiled_binary.js --compilation_level SIMPLE_OPTIMIZATIONS --externs build/closure/piskel-closure-externs.js --warning_level verbose --jscomp_off checkTypes --jscomp_off fileoverviewTags --summary_detail_level 1 --language_in ECMASCRIPT3 +src\js\app.js:2: WARNING - Parse error. illegal use of unknown JSDoc tag "require"; ignoring it + * @require Constants + ^ + +src\js\app.js:3: WARNING - Parse error. illegal use of unknown JSDoc tag "require"; ignoring it + * @require Events + ^ + +src\js\drawingtools\BaseTool.js:2: WARNING - Parse error. illegal use of unknown JSDoc tag "provide"; ignoring it + * @provide pskl.drawingtools.BaseTool + ^ + +src\js\drawingtools\BaseTool.js:4: WARNING - Parse error. illegal use of unknown JSDoc tag "require"; ignoring it + * @require pskl.utils + ^ + +src\js\drawingtools\Circle.js:2: WARNING - Parse error. illegal use of unknown JSDoc tag "provide"; ignoring it + * @provide pskl.drawingtools.Circle + ^ + +src\js\drawingtools\Circle.js:4: WARNING - Parse error. illegal use of unknown JSDoc tag "require"; ignoring it + * @require pskl.utils + ^ + +src\js\drawingtools\ColorPicker.js:2: WARNING - Parse error. illegal use of unknown JSDoc tag "provide"; ignoring it + * @provide pskl.drawingtools.ColorPicker + ^ + +src\js\drawingtools\ColorPicker.js:4: WARNING - Parse error. illegal use of unknown JSDoc tag "require"; ignoring it + * @require pskl.utils + ^ + +src\js\drawingtools\ColorSwap.js:2: WARNING - Parse error. illegal use of unknown JSDoc tag "provide"; ignoring it + * @provide pskl.drawingtools.ColorSwap + ^ + +src\js\drawingtools\Eraser.js:2: WARNING - Parse error. illegal use of unknown JSDoc tag "provide"; ignoring it + * @provide pskl.drawingtools.Eraser + ^ + +src\js\drawingtools\Eraser.js:4: WARNING - Parse error. illegal use of unknown JSDoc tag "require"; ignoring it + * @require Constants + ^ + +src\js\drawingtools\Eraser.js:5: WARNING - Parse error. illegal use of unknown JSDoc tag "require"; ignoring it + * @require pskl.utils + ^ + +src\js\drawingtools\Lighten.js:2: WARNING - Parse error. illegal use of unknown JSDoc tag "provide"; ignoring it + * @provide pskl.drawingtools.Eraser + ^ + +src\js\drawingtools\Lighten.js:4: WARNING - Parse error. illegal use of unknown JSDoc tag "require"; ignoring it + * @require Constants + ^ + +src\js\drawingtools\Lighten.js:5: WARNING - Parse error. illegal use of unknown JSDoc tag "require"; ignoring it + * @require pskl.utils + ^ + +src\js\drawingtools\Lighten.js:31: WARNING - Parse error. illegal use of unknown JSDoc tag "Override"; ignoring it + * @Override + ^ + +src\js\drawingtools\Lighten.js:42: WARNING - Parse error. illegal use of unknown JSDoc tag "Override"; ignoring it + * @Override + ^ + +src\js\drawingtools\Move.js:2: WARNING - Parse error. illegal use of unknown JSDoc tag "provide"; ignoring it + * @provide pskl.drawingtools.Move + ^ + +src\js\drawingtools\Move.js:4: WARNING - Parse error. illegal use of unknown JSDoc tag "require"; ignoring it + * @require pskl.utils + ^ + +src\js\drawingtools\PaintBucket.js:2: WARNING - Parse error. illegal use of unknown JSDoc tag "provide"; ignoring it + * @provide pskl.drawingtools.PaintBucket + ^ + +src\js\drawingtools\PaintBucket.js:4: WARNING - Parse error. illegal use of unknown JSDoc tag "require"; ignoring it + * @require pskl.utils + ^ + +src\js\drawingtools\Rectangle.js:2: WARNING - Parse error. illegal use of unknown JSDoc tag "provide"; ignoring it + * @provide pskl.drawingtools.Rectangle + ^ + +src\js\drawingtools\Rectangle.js:4: WARNING - Parse error. illegal use of unknown JSDoc tag "require"; ignoring it + * @require pskl.utils + ^ + +src\js\drawingtools\SimplePen.js:2: WARNING - Parse error. illegal use of unknown JSDoc tag "provide"; ignoring it + * @provide pskl.drawingtools.SimplePen + ^ + +src\js\drawingtools\SimplePen.js:4: WARNING - Parse error. illegal use of unknown JSDoc tag "require"; ignoring it + * @require pskl.utils + ^ + +src\js\drawingtools\Stroke.js:2: WARNING - Parse error. illegal use of unknown JSDoc tag "provide"; ignoring it + * @provide pskl.drawingtools.Stroke + ^ + +src\js\drawingtools\Stroke.js:4: WARNING - Parse error. illegal use of unknown JSDoc tag "require"; ignoring it + * @require pskl.utils + ^ + +src\js\drawingtools\selectiontools\BaseSelect.js:2: WARNING - Parse error. illegal use of unknown JSDoc tag "provide"; ignoring it + * @provide pskl.drawingtools.BaseSelect + ^ + +src\js\drawingtools\selectiontools\BaseSelect.js:4: WARNING - Parse error. illegal use of unknown JSDoc tag "require"; ignoring it + * @require pskl.utils + ^ + +src\js\drawingtools\selectiontools\RectangleSelect.js:2: WARNING - Parse error. illegal use of unknown JSDoc tag "provide"; ignoring it + * @provide pskl.drawingtools.RectangleSelect + ^ + +src\js\drawingtools\selectiontools\RectangleSelect.js:4: WARNING - Parse error. illegal use of unknown JSDoc tag "require"; ignoring it + * @require pskl.utils + ^ + +src\js\drawingtools\selectiontools\ShapeSelect.js:2: WARNING - Parse error. illegal use of unknown JSDoc tag "provide"; ignoring it + * @provide pskl.drawingtools.ShapeSelect + ^ + +src\js\drawingtools\selectiontools\ShapeSelect.js:4: WARNING - Parse error. illegal use of unknown JSDoc tag "require"; ignoring it + * @require pskl.utils + ^ + +src\js\service\keyboard\CheatsheetService.js:20: WARNING - Events.TOGGLE_HELP is never defined + $.subscribe(Events.TOGGLE_HELP, this.toggleCheatsheet_.bind(this)); + ^ + +src\js\service\keyboard\CheatsheetService.js:21: WARNING - Events.ESCAPE is never defined + $.subscribe(Events.ESCAPE, this.onEscape_.bind(this)); + ^ + +src\js\utils\FrameUtils.js:102: WARNING - Parse error. Non-JSDoc comment has annotations. Did you mean to start it with '/**'? + /* +^ + +src\js\utils\core.js:28: WARNING - Parse error. illegal use of unknown JSDoc tag "provide"; ignoring it + * @provide pskl.utils + ^ + +src\js\utils\core.js:30: WARNING - Parse error. illegal use of unknown JSDoc tag "require"; ignoring it + * @require Constants + ^ + +0 error(s), 38 warning(s) + +Command complete for target: compile + +Running "clean:after" (clean) task +Cleaning build/closure/closure_compiled_binary.js...OK + +Running "karma:unit" (karma) task +INFO [karma]: Karma v0.12.17 server started at http://localhost:9876/ +INFO [launcher]: Starting browser PhantomJS +WARN [watcher]: All files matched by "c:/Development/git/piskel/src/js/app.js" were excluded. diff --git a/src/js/app.js b/src/js/app.js index 4142bc2f..4d39ee5a 100644 --- a/src/js/app.js +++ b/src/js/app.js @@ -115,8 +115,10 @@ } this.storageService.init(); + + var href = document.location.href.toLowerCase(); // test tools - var testModeOn = document.location.href.toLowerCase().indexOf('test=true') !== -1; + var testModeOn = href.indexOf('test=true') !== -1; if (testModeOn) { this.testRecorder = new pskl.devtools.TestRecorder(this.piskelController); this.testRecorder.init(); @@ -125,6 +127,13 @@ this.testRecordController.init(); } + // test tools + var runTestModeOn = href.indexOf('test-run=') !== -1; + if (runTestModeOn) { + var testName = href.split('test-run=')[1]; + this.testRunner = new pskl.devtools.DrawingTestRunner(testName); + } + var drawingLoop = new pskl.rendering.DrawingLoop(); drawingLoop.addCallback(this.render, this); drawingLoop.start(); @@ -135,6 +144,10 @@ if (piskelData && piskelData.piskel) { this.loadPiskel_(piskelData.piskel, piskelData.descriptor, piskelData.fps); } + + if (this.testRunner) { + this.testRunner.start(); + } }, loadPiskel_ : function (serializedPiskel, descriptor, fps) { diff --git a/src/js/devtools/DrawingTestRunner.js b/src/js/devtools/DrawingTestRunner.js new file mode 100644 index 00000000..1d09adab --- /dev/null +++ b/src/js/devtools/DrawingTestRunner.js @@ -0,0 +1,37 @@ +(function () { + var ns = $.namespace('pskl.devtools'); + + ns.DrawingTestRunner = function (testName) { + this.testName = testName; + $.subscribe(Events.TEST_RECORD_END, this.onTestRecordEnd_.bind(this)); + }; + + ns.DrawingTestRunner.prototype.start = function () { + var testName = this.testName; + var xhr = new XMLHttpRequest(); + xhr.open('GET', testName, true); + + xhr.onload = function(e) { + if (this.status == 200) { + var recordPlayer = new ns.TestRecordPlayer(JSON.parse(this.responseText)); + recordPlayer.start(); + } else { + this.onerror(e); + } + }; + xhr.onerror = function(e) { + console.error('Could not load file : ' + testName); + }; + xhr.send(); + }; + + ns.DrawingTestRunner.prototype.onTestRecordEnd_ = function (evt, success, png) { + var testResult = document.createElement('div'); + testResult.id = 'drawing-test-result'; + testResult.setAttribute('data-test-name', this.testName); + // pskl.app.paletteController.setPrimaryColor('rgba(0,255,0,0)'); + testResult.innerHTML = success ? 'OK' : ('KO:'+png); + document.body.appendChild(testResult); + }; + +})(); \ No newline at end of file diff --git a/src/js/devtools/MouseEvent.js b/src/js/devtools/MouseEvent.js index 7fe44904..fcd70a8f 100644 --- a/src/js/devtools/MouseEvent.js +++ b/src/js/devtools/MouseEvent.js @@ -17,6 +17,7 @@ if (otherEvent && otherEvent instanceof ns.MouseEvent) { var sameEvent = JSON.stringify(otherEvent.event) == JSON.stringify(this.event); var sameCoords = JSON.stringify(otherEvent.coords) == JSON.stringify(this.coords); + return sameEvent && sameCoords; } else { return false; } diff --git a/src/js/devtools/TestRecordPlayer.js b/src/js/devtools/TestRecordPlayer.js index eef846c6..27071bd7 100644 --- a/src/js/devtools/TestRecordPlayer.js +++ b/src/js/devtools/TestRecordPlayer.js @@ -4,11 +4,11 @@ ns.TestRecordPlayer = function (testRecord) { this.initialState = testRecord.initialState; this.events = testRecord.events; - this.png = testRecord.png; + this.referencePng = testRecord.png; this.shim = null; }; - ns.TestRecordPlayer.STEP = 30; + ns.TestRecordPlayer.STEP = 40; ns.TestRecordPlayer.prototype.start = function () { this.setupInitialState_(); @@ -74,12 +74,19 @@ var renderer = new pskl.rendering.PiskelRenderer(pskl.app.piskelController); var png = renderer.renderAsCanvas().toDataURL(); - var success = png === this.png; + var image = new Image(); + image.onload = function () { + var canvas = pskl.CanvasUtils.createFromImage(image); + var referencePng = canvas.toDataURL(); + var success = png === referencePng; - this.shim.parentNode.removeChild(this.shim); - this.shim = null; + this.shim.parentNode.removeChild(this.shim); + this.shim = null; + + $.publish(Events.TEST_RECORD_END, [success, png + ' vs ' + referencePng]); + }.bind(this); + image.src = this.referencePng; - $.publish(Events.TEST_RECORD_END, [success]); }; ns.TestRecordPlayer.prototype.playMouseEvent_ = function (recordEvent) { diff --git a/src/js/utils/CanvasUtils.js b/src/js/utils/CanvasUtils.js index 8ef9d161..3edbe7c7 100644 --- a/src/js/utils/CanvasUtils.js +++ b/src/js/utils/CanvasUtils.js @@ -26,6 +26,13 @@ return canvas; }, + createFromImage : function (image) { + var canvas = pskl.CanvasUtils.createCanvas(image.width, image.height); + var context = canvas.getContext('2d'); + context.drawImage(image, 0, 0); + return canvas; + }, + /** * By default, all scaling operations on a Canvas 2D Context are performed using antialiasing. * Resizing a 32x32 image to 320x320 will lead to a blurry output. diff --git a/src/js/utils/core.js b/src/js/utils/core.js index 37cbbaea..cd4226d5 100644 --- a/src/js/utils/core.js +++ b/src/js/utils/core.js @@ -14,13 +14,26 @@ jQuery.namespace = function() { /** * Need a polyfill for PhantomJS */ -if (typeof Function.prototype.bind !== "function") { - Function.prototype.bind = function(scope) { - "use strict"; - var _function = this; - return function() { - return _function.apply(scope, arguments); - }; +if (!Function.prototype.bind) { + Function.prototype.bind = function (oThis) { + if (typeof this !== "function") { + // closest thing possible to the ECMAScript 5 + // internal IsCallable function + throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable"); + } + + var bindArgs = Array.prototype.slice.call(arguments, 1), + fToBind = this, + fNOP = function () {}, + fBound = function () { + var args = bindArgs.concat(Array.prototype.slice.call(arguments)); + return fToBind.apply(this instanceof fNOP && oThis ? this : oThis, args); + }; + + fNOP.prototype = this.prototype; + fBound.prototype = new fNOP(); + + return fBound; }; } diff --git a/src/piskel-script-list.js b/src/piskel-script-list.js index 2fc6e651..e66c6638 100644 --- a/src/piskel-script-list.js +++ b/src/piskel-script-list.js @@ -143,6 +143,7 @@ "js/devtools/TestRecorder.js", "js/devtools/TestRecordPlayer.js", "js/devtools/TestRecordController.js", + "js/devtools/DrawingTestRunner.js", // Application controller and initialization "js/app.js", diff --git a/test/integration/casperjs/DrawingTest.js b/test/integration/casperjs/DrawingTest.js new file mode 100644 index 00000000..11472ec2 --- /dev/null +++ b/test/integration/casperjs/DrawingTest.js @@ -0,0 +1,42 @@ +(function () { + var tests = [ + 'SimplePenDrawing1.json', + 'ComplexDrawing1.json', + 'ComplexDrawing2.json' + ]; + + var baseUrl = casper.cli.get('baseUrl')+"?debug"; + var resultSelector = '#drawing-test-result'; + + casper.start(); + + var runTest = function (index) { + var test = 'integration/casperjs/drawing-records/' + tests[index]; + + casper.open(baseUrl + "&test-run=" + test); + + casper.then(function () { + this.echo('Running test : ' + test); + this.wait(casper.cli.get('delay')); + }); + + casper.then(function () { + this.echo('Waiting for test result : ' + resultSelector); + this.waitForSelector(resultSelector, function() { + var result = this.getHTML(resultSelector); + this.echo('Test finished : ' + result); + this.test.assertEquals(result, 'OK'); + }, 60*1000); + }) + .run(function () { + if (tests[index+1]) { + runTest(index+1); + } else { + this.test.done(); + } + }); + }; + + runTest(0); + +})(); \ No newline at end of file diff --git a/test/integration/casperjs/smoke_test.js b/test/integration/casperjs/SmokeTest.js similarity index 100% rename from test/integration/casperjs/smoke_test.js rename to test/integration/casperjs/SmokeTest.js diff --git a/test/integration/casperjs/TestSuite.js b/test/integration/casperjs/TestSuite.js new file mode 100644 index 00000000..bb4c077c --- /dev/null +++ b/test/integration/casperjs/TestSuite.js @@ -0,0 +1,4 @@ +(typeof exports != "undefined" ? exports : pskl_exports).tests = [ + 'SmokeTest.js', + 'DrawingTest.js' +]; \ No newline at end of file diff --git a/test/integration/casperjs/drawing-records/ComplexDrawing1.json b/test/integration/casperjs/drawing-records/ComplexDrawing1.json new file mode 100644 index 00000000..61723cf4 --- /dev/null +++ b/test/integration/casperjs/drawing-records/ComplexDrawing1.json @@ -0,0 +1 @@ +{"events":[{"type":"tool-event","toolId":"tool-rectangle"},{"event":{"type":"mousedown","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":0},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":0},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":0},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":0},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":0},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":0},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":0},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":4},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":4},"type":"mouse-event"},{"type":"instrumented-event","methodName":"duplicateFrameAt","args":[0]},{"event":{"type":"mousedown","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":3},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":3},"type":"mouse-event"},{"type":"instrumented-event","methodName":"duplicateFrameAt","args":[0]},{"type":"instrumented-event","methodName":"moveFrame","args":[1,2]},{"type":"instrumented-event","methodName":"setCurrentFrameIndex","args":[2]},{"event":{"type":"mousedown","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":2},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":2},"type":"mouse-event"},{"type":"color-event","color":"#ab1414","isPrimary":true},{"type":"tool-event","toolId":"tool-colorswap"},{"event":{"type":"mousedown","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":1},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":1},"type":"mouse-event"}],"initialState":{"size":{"width":5,"height":5},"primaryColor":"#000000","secondaryColor":"rgba(0, 0, 0, 0)","selectedTool":"tool-pen"},"png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAFCAYAAACaTbYsAAAAMklEQVQYV2NcLSLyn4FMwAjSHPrmDSNMP8wwkBhMDlkMWR1JmtEdSJJmdBeCNZPpZQYArBs1IL//jKYAAAAASUVORK5CYII="} \ No newline at end of file diff --git a/test/integration/casperjs/drawing-records/ComplexDrawing2.json b/test/integration/casperjs/drawing-records/ComplexDrawing2.json new file mode 100644 index 00000000..f293b584 --- /dev/null +++ b/test/integration/casperjs/drawing-records/ComplexDrawing2.json @@ -0,0 +1 @@ +{"events":[{"type":"tool-event","toolId":"tool-stroke"},{"event":{"type":"mousedown","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":0},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":0},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":4},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":4},"type":"mouse-event"},{"type":"color-event","color":"#b01616","isPrimary":true},{"event":{"type":"mousedown","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":0},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":0},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":0},"type":"mouse-event"},{"type":"instrumented-event","methodName":"duplicateFrameAt","args":[0]},{"type":"color-event","color":"#16b095","isPrimary":true},{"type":"color-event","color":"#277e6e","isPrimary":true},{"type":"tool-event","toolId":"tool-colorswap"},{"event":{"type":"mousedown","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":2},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":2},"type":"mouse-event"},{"type":"color-event","color":"rgb(39, 129, 178)","isPrimary":false},{"type":"instrumented-event","methodName":"setCurrentFrameIndex","args":[0]},{"event":{"type":"mousedown","button":2,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":2,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":2},"type":"mouse-event"},{"event":{"type":"mouseup","button":2,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":2},"type":"mouse-event"}],"initialState":{"size":{"width":5,"height":5},"primaryColor":"#000000","secondaryColor":"rgba(0, 0, 0, 0)","selectedTool":"tool-pen"},"png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAYAAAB8ZH1oAAAAcklEQVQIW2NkYGD4r964CUhBQOfUFIaAV68Y1OvyEGIzVjAwAhX9v1nvxwBSDFJUnj2HgeHvHoabTZPAijuBisozIiAKYSaBFYEAUCFYDKoIxAYrhJkEMxmkEKYIZjLjBjGx/3CTgDpBioFiYOtgAKQYAGHLPBYu9IxUAAAAAElFTkSuQmCC"} \ No newline at end of file diff --git a/test/integration/casperjs/drawing-records/SimplePenDrawing1.json b/test/integration/casperjs/drawing-records/SimplePenDrawing1.json new file mode 100644 index 00000000..cbe87836 --- /dev/null +++ b/test/integration/casperjs/drawing-records/SimplePenDrawing1.json @@ -0,0 +1 @@ +{"events":[{"type":"color-event","color":"#9c2525","isPrimary":true},{"event":{"type":"mousedown","button":0,"clientX":576,"clientY":129,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":0},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"clientX":576,"clientY":129,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":0},"type":"mouse-event"},{"event":{"type":"mousedown","button":0,"clientX":515,"clientY":890,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":4},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"clientX":515,"clientY":890,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":4},"type":"mouse-event"},{"event":{"type":"mousedown","button":0,"clientX":1345,"clientY":596,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":2},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"clientX":1345,"clientY":596,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":2},"type":"mouse-event"},{"type":"instrumented-event","methodName":"addFrameAt","args":[1]},{"type":"color-event","color":"#bf8888","isPrimary":true},{"event":{"type":"mousedown","button":0,"clientX":528,"clientY":513,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"clientX":528,"clientY":513,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":2},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"clientX":528,"clientY":513,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":2},"type":"mouse-event"},{"event":{"type":"mousedown","button":0,"clientX":1331,"clientY":94,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":0},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"clientX":1331,"clientY":94,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":0},"type":"mouse-event"},{"event":{"type":"mousedown","button":0,"clientX":1338,"clientY":890,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"clientX":1339,"clientY":890,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":4},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"clientX":1339,"clientY":890,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":4},"type":"mouse-event"},{"type":"instrumented-event","methodName":"duplicateFrameAt","args":[0]},{"type":"instrumented-event","methodName":"moveFrame","args":[1,2]},{"type":"instrumented-event","methodName":"setCurrentFrameIndex","args":[2]}],"initialState":{"size":{"width":5,"height":5},"primaryColor":"#000000","secondaryColor":"rgba(0, 0, 0, 0)","selectedTool":"tool-pen"},"png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAFCAYAAACaTbYsAAAAOklEQVQYV2Oco6r6P+X2bUYGPGB/R8f/u3PnMqCrw6sJn4EgOQzNIJcoJyczOFZU4DUYpI4ymynxMwDAihvrrOeNLQAAAABJRU5ErkJggg=="} \ No newline at end of file From a8788c83f1126a9f2a962b5037e6dacf46469397 Mon Sep 17 00:00:00 2001 From: jdescottes Date: Fri, 22 Aug 2014 00:51:35 +0200 Subject: [PATCH 12/20] add drawing tests to casper --- test/integration/casperjs/DrawingTest.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/test/integration/casperjs/DrawingTest.js b/test/integration/casperjs/DrawingTest.js index 11472ec2..7955808d 100644 --- a/test/integration/casperjs/DrawingTest.js +++ b/test/integration/casperjs/DrawingTest.js @@ -22,10 +22,14 @@ casper.then(function () { this.echo('Waiting for test result : ' + resultSelector); - this.waitForSelector(resultSelector, function() { + this.waitForSelector(resultSelector, function () { + // then var result = this.getHTML(resultSelector); this.echo('Test finished : ' + result); this.test.assertEquals(result, 'OK'); + }, function () { + // onTimeout + this.test.fail('Test timed out'); }, 60*1000); }) .run(function () { From 978319af206d2101b36476fce64f60bcef503bec Mon Sep 17 00:00:00 2001 From: Eduardo San Martin Morote Date: Fri, 22 Aug 2014 11:27:45 +0200 Subject: [PATCH 13/20] Allow to rename basename for PNG in ZIP export option. This may helps #192 --- src/js/controller/settings/PngExportController.js | 5 +++-- src/templates/settings/export.html | 13 +++++++++---- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/js/controller/settings/PngExportController.js b/src/js/controller/settings/PngExportController.js index c2ab141c..c28ddaf1 100644 --- a/src/js/controller/settings/PngExportController.js +++ b/src/js/controller/settings/PngExportController.js @@ -30,7 +30,8 @@ for (var i = 0; i < this.piskelController.getFrameCount(); i++) { var frame = this.piskelController.getFrameAt(i); var canvas = this.getFrameAsCanvas_(frame); - var filename = "sprite_" + (i+1) + ".png"; + var basename = document.getElementById("zip-file-name").value || "sprite_"; + var filename = basename + (i+1) + ".png"; zip.file(filename, pskl.CanvasUtils.getBase64FromCanvas(canvas) + '\n', {base64: true}); } @@ -85,4 +86,4 @@ } return url; }; -})(); \ No newline at end of file +})(); diff --git a/src/templates/settings/export.html b/src/templates/settings/export.html index e674e70e..ca344873 100644 --- a/src/templates/settings/export.html +++ b/src/templates/settings/export.html @@ -7,11 +7,16 @@ PNG with all frames side by side. +
+ Export as ZIP +
- ZIP with one PNG file per frame. -
- + ZIP with one PNG file per frame. Name will use the prefix above and append the frame index, ex: sprite_1.png +
+ +
+
Export to Animated GIF @@ -37,4 +42,4 @@
-
\ No newline at end of file + From caebce5ec880d2146b71ba3c3158fde4873b7d79 Mon Sep 17 00:00:00 2001 From: jdescottes Date: Sat, 23 Aug 2014 22:45:52 +0200 Subject: [PATCH 14/20] added test suite runner, removed tests from travis build --- Gruntfile.js | 37 ++++-- src/js/Constants.js | 5 +- src/js/Events.js | 5 +- src/js/app.js | 23 +--- ...stRecordPlayer.js => DrawingTestPlayer.js} | 108 +++++++++++------- ...TestRecorder.js => DrawingTestRecorder.js} | 22 ++-- src/js/devtools/DrawingTestRunner.js | 22 +--- src/js/devtools/DrawingTestSuiteController.js | 77 +++++++++++++ src/js/devtools/DrawingTestSuiteRunner.js | 63 ++++++++++ src/js/devtools/TestRecordController.js | 4 +- src/js/devtools/init.js | 34 ++++++ src/js/service/AppEngineStorageService.js | 57 ++++----- src/js/service/ImageUploadService.js | 25 ++-- src/js/utils/Xhr.js | 46 ++++++++ src/piskel-script-list.js | 12 +- test/integration/casperjs/TravisTestSuite.js | 4 + .../casperjs/drawing-records/TestSuite.json | 5 + 17 files changed, 391 insertions(+), 158 deletions(-) rename src/js/devtools/{TestRecordPlayer.js => DrawingTestPlayer.js} (62%) rename src/js/devtools/{TestRecorder.js => DrawingTestRecorder.js} (78%) create mode 100644 src/js/devtools/DrawingTestSuiteController.js create mode 100644 src/js/devtools/DrawingTestSuiteRunner.js create mode 100644 src/js/devtools/init.js create mode 100644 src/js/utils/Xhr.js create mode 100644 test/integration/casperjs/TravisTestSuite.js create mode 100644 test/integration/casperjs/drawing-records/TestSuite.json diff --git a/Gruntfile.js b/Gruntfile.js index 624806cb..b9834ea3 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -20,22 +20,36 @@ module.exports = function(grunt) { return "src/" + path; }; - var piskelScripts = require('./src/piskel-script-list.js').scripts.map(mapToSrcFolder); + var piskelScripts = require('./src/piskel-script-list.js').scripts.map(mapToSrcFolder).filter(function (path) { + return path.indexOf('devtools') === -1; + }); var piskelStyles = require('./src/piskel-style-list.js').styles.map(mapToSrcFolder); var mapToCasperFolder = function (path) { return "test/integration/casperjs/" + path; }; - var casperTests = require('./test/integration/casperjs/TestSuite.js').tests.map(mapToCasperFolder); - var getCasperConfig = function (delay) { + var casperEnvironments = { + 'local' : { + suite : './test/integration/casperjs/TestSuite.js', + delay : 50 + }, + 'travis' : { + suite : './test/integration/casperjs/TravisTestSuite.js', + delay : 5000 + } + }; + + var getCasperConfig = function (env) { + var conf = casperEnvironments[env]; + var tests = require(conf.suite).tests.map(mapToCasperFolder); return { - filesSrc : casperTests, + filesSrc : tests, options : { args : { baseUrl : 'http://localhost:' + '<%= express.test.options.port %>/', mode : '?debug', - delay : delay + delay : conf.delay }, async : false, direct : false, @@ -110,8 +124,8 @@ module.exports = function(grunt) { } }, ghost : { - 'default' : getCasperConfig(5000), - 'local' : getCasperConfig(50) + 'travis' : getCasperConfig('travis'), + 'local' : getCasperConfig('local') }, concat : { js : { @@ -292,10 +306,13 @@ module.exports = function(grunt) { grunt.registerTask('unit-test', ['karma']); // Validate & Test - grunt.registerTask('test', ['lint', 'compile', 'unit-test','express:test', 'ghost:default']); - + grunt.registerTask('test-travis', ['lint', 'compile', 'unit-test', 'express:test', 'ghost:travis']); // Validate & Test (faster version) will NOT work on travis !! - grunt.registerTask('precommit', ['lint', 'compile', 'express:test', 'ghost:default']); + grunt.registerTask('test-local', ['lint', 'compile', 'unit-test', 'express:test', 'ghost:local']); + + grunt.registerTask('test', ['test-travis']); + grunt.registerTask('precommit', ['test-local']); + // Compile JS code (eg verify JSDoc annotation and types, no actual minified code generated). grunt.registerTask('compile', ['closureCompiler:compile', 'clean:after']); diff --git a/src/js/Constants.js b/src/js/Constants.js index 713724d0..ae7823c6 100644 --- a/src/js/Constants.js +++ b/src/js/Constants.js @@ -69,5 +69,8 @@ var Constants = { MOUSEMOVE_THROTTLING : 10, ABSTRACT_FUNCTION : function () {throw 'abstract method should be implemented';}, - EMPTY_FUNCTION : function () {} + EMPTY_FUNCTION : function () {}, + + // TESTS + BASE_TEST_FOLDER : 'integration/casperjs/drawing-records' }; \ No newline at end of file diff --git a/src/js/Events.js b/src/js/Events.js index 31d1d0e3..5b9d1106 100644 --- a/src/js/Events.js +++ b/src/js/Events.js @@ -54,6 +54,7 @@ var Events = { MOUSE_EVENT : "MOUSE_EVENT", // Tests - - TEST_RECORD_END : "TEST_RECORD_END" + TEST_RECORD_END : "TEST_RECORD_END", + TEST_CASE_END : "TEST_CASE_END", + TEST_SUITE_END : "TEST_SUITE_END" }; \ No newline at end of file diff --git a/src/js/app.js b/src/js/app.js index 4d39ee5a..90477e90 100644 --- a/src/js/app.js +++ b/src/js/app.js @@ -115,25 +115,6 @@ } this.storageService.init(); - - var href = document.location.href.toLowerCase(); - // test tools - var testModeOn = href.indexOf('test=true') !== -1; - if (testModeOn) { - this.testRecorder = new pskl.devtools.TestRecorder(this.piskelController); - this.testRecorder.init(); - - this.testRecordController = new pskl.devtools.TestRecordController(this.testRecorder); - this.testRecordController.init(); - } - - // test tools - var runTestModeOn = href.indexOf('test-run=') !== -1; - if (runTestModeOn) { - var testName = href.split('test-run=')[1]; - this.testRunner = new pskl.devtools.DrawingTestRunner(testName); - } - var drawingLoop = new pskl.rendering.DrawingLoop(); drawingLoop.addCallback(this.render, this); drawingLoop.start(); @@ -145,8 +126,8 @@ this.loadPiskel_(piskelData.piskel, piskelData.descriptor, piskelData.fps); } - if (this.testRunner) { - this.testRunner.start(); + if (pskl.devtools) { + pskl.devtools.init(); } }, diff --git a/src/js/devtools/TestRecordPlayer.js b/src/js/devtools/DrawingTestPlayer.js similarity index 62% rename from src/js/devtools/TestRecordPlayer.js rename to src/js/devtools/DrawingTestPlayer.js index 27071bd7..82dfbf3c 100644 --- a/src/js/devtools/TestRecordPlayer.js +++ b/src/js/devtools/DrawingTestPlayer.js @@ -1,42 +1,36 @@ (function () { var ns = $.namespace('pskl.devtools'); - ns.TestRecordPlayer = function (testRecord) { + ns.DrawingTestPlayer = function (testRecord, step) { this.initialState = testRecord.initialState; this.events = testRecord.events; this.referencePng = testRecord.png; + this.step = step || ns.DrawingTestPlayer.DEFAULT_STEP; + this.callbacks = []; this.shim = null; }; - ns.TestRecordPlayer.STEP = 40; + ns.DrawingTestPlayer.DEFAULT_STEP = 50; - ns.TestRecordPlayer.prototype.start = function () { + ns.DrawingTestPlayer.prototype.start = function () { this.setupInitialState_(); this.createMouseShim_(); - this.playEvent_(0); + this.regenerateReferencePng().then(function () { + this.playEvent_(0); + }.bind(this)); }; - ns.TestRecordPlayer.prototype.setupInitialState_ = function () { + ns.DrawingTestPlayer.prototype.setupInitialState_ = function () { var size = this.initialState.size; var piskel = this.createPiskel_(size.width, size.height); - pskl.app.piskelController.setPiskel(piskel, true); + pskl.app.piskelController.setPiskel(piskel); $.publish(Events.SELECT_PRIMARY_COLOR, [this.initialState.primaryColor]); $.publish(Events.SELECT_SECONDARY_COLOR, [this.initialState.secondaryColor]); $.publish(Events.SELECT_TOOL, [this.initialState.selectedTool]); }; - ns.TestRecordPlayer.prototype.createMouseShim_ = function () { - this.shim = document.createElement('DIV'); - this.shim.style.cssText = 'position:fixed;top:0;left:0;right:0;left:0;bottom:0;z-index:15000'; - this.shim.addEventListener('mousemove', function (e) { - e.stopPropagation(); - e.preventDefault(); - }); - document.body.appendChild(this.shim); - }; - - ns.TestRecordPlayer.prototype.createPiskel_ = function (width, height) { + ns.DrawingTestPlayer.prototype.createPiskel_ = function (width, height) { var descriptor = new pskl.model.piskel.Descriptor('TestPiskel', ''); var piskel = new pskl.model.Piskel(width, height, descriptor); var layer = new pskl.model.Layer("Layer 1"); @@ -48,7 +42,39 @@ return piskel; }; - ns.TestRecordPlayer.prototype.playEvent_ = function (index) { + ns.DrawingTestPlayer.prototype.regenerateReferencePng = function () { + var image = new Image(); + var then = function () {}; + + image.onload = function () { + this.referencePng = pskl.CanvasUtils.createFromImage(image).toDataURL(); + then(); + }.bind(this); + image.src = this.referencePng; + + return { + then : function (cb) { + then = cb; + } + }; + }; + + ns.DrawingTestPlayer.prototype.createMouseShim_ = function () { + this.shim = document.createElement('DIV'); + this.shim.style.cssText = 'position:fixed;top:0;left:0;right:0;left:0;bottom:0;z-index:15000'; + this.shim.addEventListener('mousemove', function (e) { + e.stopPropagation(); + e.preventDefault(); + }, true); + document.body.appendChild(this.shim); + }; + + ns.DrawingTestPlayer.prototype.removeMouseShim_ = function () { + this.shim.parentNode.removeChild(this.shim); + this.shim = null; + }; + + ns.DrawingTestPlayer.prototype.playEvent_ = function (index) { this.timer = window.setTimeout(function () { var recordEvent = this.events[index]; @@ -67,29 +93,10 @@ } else { this.onTestEnd_(); } - }.bind(this), ns.TestRecordPlayer.STEP); + }.bind(this), this.step); }; - ns.TestRecordPlayer.prototype.onTestEnd_ = function () { - var renderer = new pskl.rendering.PiskelRenderer(pskl.app.piskelController); - var png = renderer.renderAsCanvas().toDataURL(); - - var image = new Image(); - image.onload = function () { - var canvas = pskl.CanvasUtils.createFromImage(image); - var referencePng = canvas.toDataURL(); - var success = png === referencePng; - - this.shim.parentNode.removeChild(this.shim); - this.shim = null; - - $.publish(Events.TEST_RECORD_END, [success, png + ' vs ' + referencePng]); - }.bind(this); - image.src = this.referencePng; - - }; - - ns.TestRecordPlayer.prototype.playMouseEvent_ = function (recordEvent) { + ns.DrawingTestPlayer.prototype.playMouseEvent_ = function (recordEvent) { var event = recordEvent.event; var screenCoordinates = pskl.app.drawingController.getScreenCoordinates(recordEvent.coords.x, recordEvent.coords.y); event.clientX = screenCoordinates.x; @@ -103,7 +110,7 @@ } }; - ns.TestRecordPlayer.prototype.playColorEvent_ = function (recordEvent) { + ns.DrawingTestPlayer.prototype.playColorEvent_ = function (recordEvent) { if (recordEvent.isPrimary) { $.publish(Events.SELECT_PRIMARY_COLOR, [recordEvent.color]); } else { @@ -111,13 +118,30 @@ } }; - ns.TestRecordPlayer.prototype.playToolEvent_ = function (recordEvent) { + ns.DrawingTestPlayer.prototype.playToolEvent_ = function (recordEvent) { $.publish(Events.SELECT_TOOL, [recordEvent.toolId]); }; - ns.TestRecordPlayer.prototype.playInstrumentedEvent_ = function (recordEvent) { + ns.DrawingTestPlayer.prototype.playInstrumentedEvent_ = function (recordEvent) { pskl.app.piskelController[recordEvent.methodName].apply(pskl.app.piskelController, recordEvent.args); }; + ns.DrawingTestPlayer.prototype.onTestEnd_ = function () { + this.removeMouseShim_(); + + var renderer = new pskl.rendering.PiskelRenderer(pskl.app.piskelController); + var png = renderer.renderAsCanvas().toDataURL(); + + var success = png === this.referencePng; + + $.publish(Events.TEST_RECORD_END, [success, png, this.referencePng]); + this.callbacks.forEach(function (callback) { + callback(success, png, this.referencePng); + }); + }; + + ns.DrawingTestPlayer.prototype.addEndTestCallback = function (callback) { + this.callbacks.push(callback); + }; })(); \ No newline at end of file diff --git a/src/js/devtools/TestRecorder.js b/src/js/devtools/DrawingTestRecorder.js similarity index 78% rename from src/js/devtools/TestRecorder.js rename to src/js/devtools/DrawingTestRecorder.js index b04b7b97..6597d037 100644 --- a/src/js/devtools/TestRecorder.js +++ b/src/js/devtools/DrawingTestRecorder.js @@ -1,13 +1,13 @@ (function () { var ns = $.namespace('pskl.devtools'); - ns.TestRecorder = function (piskelController) { + ns.DrawingTestRecorder = function (piskelController) { this.piskelController = piskelController; this.isRecording = false; this.reset(); }; - ns.TestRecorder.prototype.init = function () { + ns.DrawingTestRecorder.prototype.init = function () { $.subscribe(Events.MOUSE_EVENT, this.onMouseEvent_.bind(this)); $.subscribe(Events.TOOL_SELECTED, this.onToolEvent_.bind(this)); $.subscribe(Events.PRIMARY_COLOR_SELECTED, this.onColorEvent_.bind(this, true)); @@ -23,7 +23,7 @@ } }; - ns.TestRecorder.prototype.instrumentMethod_ = function (object, methodName) { + ns.DrawingTestRecorder.prototype.instrumentMethod_ = function (object, methodName) { var method = object[methodName]; var testRecorder = this; return function () { @@ -32,12 +32,12 @@ }; }; - ns.TestRecorder.prototype.reset = function () { + ns.DrawingTestRecorder.prototype.reset = function () { this.initialState = {}; this.events = []; }; - ns.TestRecorder.prototype.startRecord = function () { + ns.DrawingTestRecorder.prototype.startRecord = function () { this.isRecording = true; this.initialState = { size : { @@ -50,7 +50,7 @@ }; }; - ns.TestRecorder.prototype.stopRecord = function () { + ns.DrawingTestRecorder.prototype.stopRecord = function () { this.isRecording = false; var renderer = new pskl.rendering.PiskelRenderer(this.piskelController); @@ -67,13 +67,13 @@ return testRecord; }; - ns.TestRecorder.prototype.onMouseEvent_ = function (evt, mouseEvent, originator) { + ns.DrawingTestRecorder.prototype.onMouseEvent_ = function (evt, mouseEvent, originator) { if (this.isRecording) { this.recordMouseEvent_(mouseEvent); } }; - ns.TestRecorder.prototype.onColorEvent_ = function (isPrimary, evt, color) { + ns.DrawingTestRecorder.prototype.onColorEvent_ = function (isPrimary, evt, color) { if (this.isRecording) { var recordEvent = {}; recordEvent.type = 'color-event'; @@ -83,7 +83,7 @@ } }; - ns.TestRecorder.prototype.onToolEvent_ = function (evt, tool) { + ns.DrawingTestRecorder.prototype.onToolEvent_ = function (evt, tool) { if (this.isRecording) { var recordEvent = {}; recordEvent.type = 'tool-event'; @@ -92,7 +92,7 @@ } }; - ns.TestRecorder.prototype.onInstrumentedMethod_ = function (callee, methodName, args) { + ns.DrawingTestRecorder.prototype.onInstrumentedMethod_ = function (callee, methodName, args) { if (this.isRecording) { var recordEvent = {}; recordEvent.type = 'instrumented-event'; @@ -102,7 +102,7 @@ } }; - ns.TestRecorder.prototype.recordMouseEvent_ = function (mouseEvent) { + ns.DrawingTestRecorder.prototype.recordMouseEvent_ = function (mouseEvent) { var coords = pskl.app.drawingController.getSpriteCoordinates(mouseEvent.clientX, mouseEvent.clientY); var recordEvent = new ns.MouseEvent(mouseEvent, coords); var lastEvent = this.events[this.events.length-1]; diff --git a/src/js/devtools/DrawingTestRunner.js b/src/js/devtools/DrawingTestRunner.js index 1d09adab..6f7fc7fb 100644 --- a/src/js/devtools/DrawingTestRunner.js +++ b/src/js/devtools/DrawingTestRunner.js @@ -7,29 +7,17 @@ }; ns.DrawingTestRunner.prototype.start = function () { - var testName = this.testName; - var xhr = new XMLHttpRequest(); - xhr.open('GET', testName, true); - - xhr.onload = function(e) { - if (this.status == 200) { - var recordPlayer = new ns.TestRecordPlayer(JSON.parse(this.responseText)); - recordPlayer.start(); - } else { - this.onerror(e); - } - }; - xhr.onerror = function(e) { - console.error('Could not load file : ' + testName); - }; - xhr.send(); + pskl.utils.Xhr.get(this.testName, function (response) { + var res = response.responseText; + var recordPlayer = new ns.DrawingTestPlayer(JSON.parse(res)); + recordPlayer.start(); + }.bind(this)); }; ns.DrawingTestRunner.prototype.onTestRecordEnd_ = function (evt, success, png) { var testResult = document.createElement('div'); testResult.id = 'drawing-test-result'; testResult.setAttribute('data-test-name', this.testName); - // pskl.app.paletteController.setPrimaryColor('rgba(0,255,0,0)'); testResult.innerHTML = success ? 'OK' : ('KO:'+png); document.body.appendChild(testResult); }; diff --git a/src/js/devtools/DrawingTestSuiteController.js b/src/js/devtools/DrawingTestSuiteController.js new file mode 100644 index 00000000..4ab94555 --- /dev/null +++ b/src/js/devtools/DrawingTestSuiteController.js @@ -0,0 +1,77 @@ +(function () { + var ns = $.namespace('pskl.devtools'); + + ns.DrawingTestSuiteController = function (suitePath) { + if (suitePath.indexOf('/') === -1) { + suitePath = [Constants.BASE_TEST_FOLDER, suitePath].join('/'); + } + this.suitePath = suitePath; + this.testSuiteRunner = null; + }; + + ns.DrawingTestSuiteController.prototype.init = function () { + $.subscribe(Events.TEST_CASE_END, this.onTestCaseEnd_.bind(this)); + $.subscribe(Events.TEST_SUITE_END, this.onTestSuiteEnd_.bind(this)); + }; + + ns.DrawingTestSuiteController.prototype.start = function () { + this.reset(); + this.startTime_ = Date.now(); + pskl.utils.Xhr.get(this.suitePath, this.onTestSuiteLoaded_.bind(this)); + + var testSuiteStatus = document.createElement('li'); + testSuiteStatus.innerHTML = pskl.utils.Template.replace( + 'Test Suite [{{path}}]', + {path : this.shortenPath_(this.suitePath)} + ); + this.testListElt.appendChild(testSuiteStatus); + }; + + ns.DrawingTestSuiteController.prototype.reset = function () { + this.domElt = document.createElement('div'); + this.domElt.style.cssText = 'position:absolute;z-index:10000;margin:5px;padding:10px;background:lightgrey'; + + this.testListElt = document.createElement('ul'); + + this.domElt.appendChild(this.testListElt); + + document.body.appendChild(this.domElt); + }; + + ns.DrawingTestSuiteController.prototype.onTestSuiteLoaded_ = function (response) { + var testPaths = JSON.parse(response.responseText).tests; + testPaths = testPaths.map(function (path) { + return this.suitePath.replace(/\/([^\/]+\.json)/i, '/' + path); + }.bind(this)); + this.testSuiteRunner = new ns.DrawingTestSuiteRunner(testPaths); + this.testSuiteRunner.start(); + }; + + ns.DrawingTestSuiteController.prototype.onTestCaseEnd_ = function (evt, testPath, status) { + var testCaseStatus = document.createElement('li'); + + testCaseStatus.innerHTML = pskl.utils.Template.replace( + '[{{path}}] finished : {{status}}', + {path : this.shortenPath_(testPath), status : status ? 'OK' : 'KO', color : status ? 'green' : 'red'} + ); + this.testListElt.appendChild(testCaseStatus); + }; + + ns.DrawingTestSuiteController.prototype.onTestSuiteEnd_ = function (evt, status) { + console.log('on test suite end'); + var elapsed = Date.now() - this.startTime_; + elapsed = (elapsed/1000).toFixed(4); + + var testSuiteStatus = document.createElement('li'); + testSuiteStatus.innerHTML = pskl.utils.Template.replace( + 'Test finished : {{status}} ({{elapsed}} seconds)', + {status : status, elapsed : elapsed} + ); + this.testListElt.appendChild(testSuiteStatus); + }; + + ns.DrawingTestSuiteController.prototype.shortenPath_ = function (path) { + // keep only the part after the last '/' + return path.replace(/^.*\/([^\/]+.json$)/, '$1'); + }; +})(); \ No newline at end of file diff --git a/src/js/devtools/DrawingTestSuiteRunner.js b/src/js/devtools/DrawingTestSuiteRunner.js new file mode 100644 index 00000000..11947c63 --- /dev/null +++ b/src/js/devtools/DrawingTestSuiteRunner.js @@ -0,0 +1,63 @@ +(function () { + var ns = $.namespace('pskl.devtools'); + + ns.DrawingTestSuiteRunner = function (testPaths) { + if (Array.isArray(testPaths)) { + this.testStatus = {}; + this.testPaths = testPaths; + this.status = ns.DrawingTestSuiteRunner.STATUS.NOT_STARTED; + this.currentIndex = -1; + } else { + throw new Error('testPaths should be an array of string (test paths)'); + } + }; + + ns.DrawingTestSuiteRunner.STATUS = { + ERROR : 'ERROR', + FAILED : 'FAILED', + SUCCESS : 'SUCCESS', + ONGOING : 'ONGOING', + NOT_STARTED : 'NOT_STARTED' + }; + + ns.DrawingTestSuiteRunner.prototype.start = function () { + this.status = ns.DrawingTestSuiteRunner.STATUS.ONGOING; + this.runTest(0); + }; + + ns.DrawingTestSuiteRunner.prototype.runTest = function (testIndex) { + this.currentIndex = testIndex; + var path = this.testPaths[testIndex]; + if (path) { + pskl.utils.Xhr.get(path, this.onTestLoaded_.bind(this)); + } else { + this.onTestSuiteEnd_(); + } + }; + + ns.DrawingTestSuiteRunner.prototype.onTestLoaded_ = function (response) { + var testRecord = JSON.parse(response.responseText); + + var testPlayer = new ns.DrawingTestPlayer(testRecord, 10); + + testPlayer.addEndTestCallback(this.onTestEnd_.bind(this)); + testPlayer.start(); + }; + + ns.DrawingTestSuiteRunner.prototype.onTestEnd_ = function (success, png, referencePng) { + var path = this.testPaths[this.currentIndex]; + this.testStatus[path] = success; + $.publish(Events.TEST_CASE_END, [path, success]); + + this.runTest(this.currentIndex + 1); + }; + + ns.DrawingTestSuiteRunner.prototype.onTestSuiteEnd_ = function () { + var success = this.testPaths.every(function (path) { + return this.testStatus[path]; + }.bind(this)); + + this.status = success ? ns.DrawingTestSuiteRunner.STATUS.SUCCESS : ns.DrawingTestSuiteRunner.STATUS.ERROR; + $.publish(Events.TEST_SUITE_END, [this.status]); + }; +})(); \ No newline at end of file diff --git a/src/js/devtools/TestRecordController.js b/src/js/devtools/TestRecordController.js index 22016a1f..04581b3f 100644 --- a/src/js/devtools/TestRecordController.js +++ b/src/js/devtools/TestRecordController.js @@ -46,8 +46,8 @@ var file =files[0]; pskl.utils.FileUtils.readFile(file, function (content) { var testRecord = JSON.parse(window.atob(content.replace(/data\:.*?\;base64\,/,''))); - var testRecordPlayer = new ns.TestRecordPlayer(testRecord); - testRecordPlayer.start(); + var testPlayer = new ns.DrawingTestPlayer(testRecord); + testPlayer.start(); }.bind(this)); } }; diff --git a/src/js/devtools/init.js b/src/js/devtools/init.js new file mode 100644 index 00000000..64e2737f --- /dev/null +++ b/src/js/devtools/init.js @@ -0,0 +1,34 @@ +(function () { + var ns = $.namespace('pskl.devtools'); + + ns.init = function () { + var href = document.location.href.toLowerCase(); + // test tools + var testModeOn = href.indexOf('test=true') !== -1; + if (testModeOn) { + this.testRecorder = new pskl.devtools.DrawingTestRecorder(this.piskelController); + this.testRecorder.init(); + + this.testRecordController = new pskl.devtools.TestRecordController(this.testRecorder); + this.testRecordController.init(); + } + + // test tools + var runTestModeOn = href.indexOf('test-run=') !== -1; + if (runTestModeOn) { + var testPath = href.split('test-run=')[1]; + this.testRunner = new pskl.devtools.DrawingTestRunner(testPath); + this.testRunner.start(); + } + + // test tools + var runSuiteModeOn = href.indexOf('test-suite=') !== -1; + if (runSuiteModeOn) { + var suitePath = href.split('test-suite=')[1]; + this.testSuiteController = new pskl.devtools.DrawingTestSuiteController(suitePath); + this.testSuiteController.init(); + this.testSuiteController.start(); + } + }; + +})(); \ No newline at end of file diff --git a/src/js/service/AppEngineStorageService.js b/src/js/service/AppEngineStorageService.js index 8c93f23a..4d377139 100644 --- a/src/js/service/AppEngineStorageService.js +++ b/src/js/service/AppEngineStorageService.js @@ -8,42 +8,33 @@ ns.AppEngineStorageService.prototype.init = function () {}; ns.AppEngineStorageService.prototype.store = function (callbacks) { - var formData = this.prepareFormData_(); - - var xhr = new XMLHttpRequest(); - xhr.open('POST', Constants.APPENGINE.URL.SAVE, true); - - xhr.onload = function(e) { - if (this.status == 200) { - callbacks.success(); - callbacks.after(); - } else { - this.onerror(e); - } - }; - xhr.onerror = function(e) { - callbacks.error(this.status); - callbacks.after(); - }; - xhr.send(formData); - }; - - ns.AppEngineStorageService.prototype.prepareFormData_ = function () { var piskel = this.piskelController.getPiskel(); var descriptor = piskel.getDescriptor(); - var formData = new FormData(); - formData.append('framesheet', this.piskelController.serialize()); - formData.append('fps', this.piskelController.getFPS()); - formData.append('name', descriptor.name); - formData.append('description', descriptor.description); - if (descriptor.isPublic) { - formData.append('public', true); - } - formData.append('frames', this.piskelController.getFrameCount()); - formData.append('first_frame_as_png', pskl.app.getFirstFrameAsPng()); - formData.append('framesheet_as_png', pskl.app.getFramesheetAsPng()); + var data = { + framesheet : this.piskelController.serialize(), + fps : this.piskelController.getFPS(), + name : descriptor.name, + description : descriptor.description, + frames : this.piskelController.getFrameCount(), + first_frame_as_png : pskl.app.getFirstFrameAsPng(), + framesheet_as_png : pskl.app.getFramesheetAsPng() + }; - return formData; + if (descriptor.isPublic) { + data['public'] = true; + } + + var success = function () { + callbacks.success(); + callbacks.after(); + }; + + var error = function (response) { + callbacks.error(response.status); + callbacks.after(); + }; + + pskl.utils.Xhr.post(Constants.APPENGINE.URL.SAVE, data, success, error); }; })(); \ No newline at end of file diff --git a/src/js/service/ImageUploadService.js b/src/js/service/ImageUploadService.js index e0249559..93561f59 100644 --- a/src/js/service/ImageUploadService.js +++ b/src/js/service/ImageUploadService.js @@ -6,23 +6,18 @@ /** * Upload a base64 image data to distant service. If successful, will call provided callback with the image URL as first argument; * @param {String} imageData base64 image data (such as the return value of canvas.toDataUrl()) - * @param {Function} cbSuccess success callback. 1st argument will be the uploaded image URL - * @param {Function} cbError error callback + * @param {Function} success success callback. 1st argument will be the uploaded image URL + * @param {Function} error error callback */ - ns.ImageUploadService.prototype.upload = function (imageData, cbSuccess, cbError) { - var xhr = new XMLHttpRequest(); - var formData = new FormData(); - formData.append('data', imageData); - xhr.open('POST', Constants.IMAGE_SERVICE_UPLOAD_URL, true); - xhr.onload = function (e) { - if (this.status == 200) { - var imageUrl = Constants.IMAGE_SERVICE_GET_URL + this.responseText; - cbSuccess(imageUrl); - } else { - cbError(); - } + ns.ImageUploadService.prototype.upload = function (imageData, success, error) { + var data = { + data : imageData }; - xhr.send(formData); + var wrappedSuccess = function (response) { + success(Constants.IMAGE_SERVICE_GET_URL + response.responseText); + }; + + pskl.utils.Xhr.post(Constants.IMAGE_SERVICE_UPLOAD_URL, data, wrappedSuccess, error); }; })(); diff --git a/src/js/utils/Xhr.js b/src/js/utils/Xhr.js new file mode 100644 index 00000000..6b111896 --- /dev/null +++ b/src/js/utils/Xhr.js @@ -0,0 +1,46 @@ +(function () { + var ns = $.namespace('pskl.utils'); + ns.Xhr = { + get : function (url, success, error) { + var xhr = ns.Xhr.xhr_(url, 'GET', success, error); + xhr.send(); + }, + + post : function (url, data, success, error) { + var xhr = ns.Xhr.xhr_(url, 'POST', success, error); + var formData = new FormData(); + + if (typeof data == 'object') { + for (var key in data) { + if (data.hasOwnProperty(key)) { + formData.append(key, data[key]); + } + } + } + + xhr.send(formData); + }, + + xhr_ : function (url, method, success, error) { + success = success || function (){}; + error = error || function (){}; + + var xhr = new XMLHttpRequest(); + xhr.open(method, url, true); + + xhr.onload = function(e) { + if (this.status == 200) { + success(this); + } else { + this.onerror(this, e); + } + }; + + xhr.onerror = function(e) { + error(e); + }; + + return xhr; + } + }; +})(); \ No newline at end of file diff --git a/src/piskel-script-list.js b/src/piskel-script-list.js index e66c6638..bd66a181 100644 --- a/src/piskel-script-list.js +++ b/src/piskel-script-list.js @@ -25,6 +25,7 @@ "js/utils/PiskelFileUtils.js", "js/utils/Template.js", "js/utils/UserSettings.js", + "js/utils/Xhr.js", "js/utils/serialization/Serializer.js", "js/utils/serialization/Deserializer.js", "js/utils/serialization/backward/Deserializer_v0.js", @@ -139,11 +140,14 @@ "js/drawingtools/ColorSwap.js", // Devtools - "js/devtools/MouseEvent.js", - "js/devtools/TestRecorder.js", - "js/devtools/TestRecordPlayer.js", - "js/devtools/TestRecordController.js", + "js/devtools/DrawingTestPlayer.js", + "js/devtools/DrawingTestRecorder.js", "js/devtools/DrawingTestRunner.js", + "js/devtools/DrawingTestSuiteController.js", + "js/devtools/DrawingTestSuiteRunner.js", + "js/devtools/MouseEvent.js", + "js/devtools/TestRecordController.js", + "js/devtools/init.js", // Application controller and initialization "js/app.js", diff --git a/test/integration/casperjs/TravisTestSuite.js b/test/integration/casperjs/TravisTestSuite.js new file mode 100644 index 00000000..eec0f7f2 --- /dev/null +++ b/test/integration/casperjs/TravisTestSuite.js @@ -0,0 +1,4 @@ +(typeof exports != "undefined" ? exports : pskl_exports).tests = [ + // did not manage to successfully run drawing tests on travis yet ... + 'SmokeTest.js' +]; \ No newline at end of file diff --git a/test/integration/casperjs/drawing-records/TestSuite.json b/test/integration/casperjs/drawing-records/TestSuite.json new file mode 100644 index 00000000..0735c212 --- /dev/null +++ b/test/integration/casperjs/drawing-records/TestSuite.json @@ -0,0 +1,5 @@ +{ "tests" : [ + "SimplePenDrawing1.json", + "ComplexDrawing1.json", + "ComplexDrawing2.json" +]} \ No newline at end of file From 13001bd7bd854faf135197c48cdb33e782c5eb16 Mon Sep 17 00:00:00 2001 From: jdescottes Date: Sun, 24 Aug 2014 17:57:30 +0200 Subject: [PATCH 15/20] added drawing tests for all tools currently available --- src/js/devtools/DrawingTestSuiteRunner.js | 2 +- src/js/devtools/init.js | 2 +- test/integration/casperjs/DrawingTest.js | 12 +++-- .../drawing-records/ComplexDrawing1.json | 1 - .../drawing-records/ComplexDrawing2.json | 1 - .../drawing-records/SimplePenDrawing1.json | 1 - .../casperjs/drawing-records/TestSuite.json | 13 +++-- .../drawing-records/bucket.drawing.json | 1 + .../drawing-records/color.picker.json | 48 +++++++++++++++++++ .../drawing-records/eraser.bucket.json | 1 + .../casperjs/drawing-records/frames.fun.json | 1 + .../casperjs/drawing-records/layers.fun.json | 1 + .../casperjs/drawing-records/move.json | 1 + .../casperjs/drawing-records/pen.drawing.json | 1 + .../drawing-records/pen.secondary.color.json | 1 + .../drawing-records/squares.circles.json | 1 + .../casperjs/drawing-records/stroke.json | 1 + .../drawing-records/verticalpen.drawing.json | 1 + 18 files changed, 79 insertions(+), 11 deletions(-) delete mode 100644 test/integration/casperjs/drawing-records/ComplexDrawing1.json delete mode 100644 test/integration/casperjs/drawing-records/ComplexDrawing2.json delete mode 100644 test/integration/casperjs/drawing-records/SimplePenDrawing1.json create mode 100644 test/integration/casperjs/drawing-records/bucket.drawing.json create mode 100644 test/integration/casperjs/drawing-records/color.picker.json create mode 100644 test/integration/casperjs/drawing-records/eraser.bucket.json create mode 100644 test/integration/casperjs/drawing-records/frames.fun.json create mode 100644 test/integration/casperjs/drawing-records/layers.fun.json create mode 100644 test/integration/casperjs/drawing-records/move.json create mode 100644 test/integration/casperjs/drawing-records/pen.drawing.json create mode 100644 test/integration/casperjs/drawing-records/pen.secondary.color.json create mode 100644 test/integration/casperjs/drawing-records/squares.circles.json create mode 100644 test/integration/casperjs/drawing-records/stroke.json create mode 100644 test/integration/casperjs/drawing-records/verticalpen.drawing.json diff --git a/src/js/devtools/DrawingTestSuiteRunner.js b/src/js/devtools/DrawingTestSuiteRunner.js index 11947c63..e75cd7f1 100644 --- a/src/js/devtools/DrawingTestSuiteRunner.js +++ b/src/js/devtools/DrawingTestSuiteRunner.js @@ -38,7 +38,7 @@ ns.DrawingTestSuiteRunner.prototype.onTestLoaded_ = function (response) { var testRecord = JSON.parse(response.responseText); - var testPlayer = new ns.DrawingTestPlayer(testRecord, 10); + var testPlayer = new ns.DrawingTestPlayer(testRecord, 50); testPlayer.addEndTestCallback(this.onTestEnd_.bind(this)); testPlayer.start(); diff --git a/src/js/devtools/init.js b/src/js/devtools/init.js index 64e2737f..cfd72541 100644 --- a/src/js/devtools/init.js +++ b/src/js/devtools/init.js @@ -6,7 +6,7 @@ // test tools var testModeOn = href.indexOf('test=true') !== -1; if (testModeOn) { - this.testRecorder = new pskl.devtools.DrawingTestRecorder(this.piskelController); + this.testRecorder = new pskl.devtools.DrawingTestRecorder(pskl.app.piskelController); this.testRecorder.init(); this.testRecordController = new pskl.devtools.TestRecordController(this.testRecorder); diff --git a/test/integration/casperjs/DrawingTest.js b/test/integration/casperjs/DrawingTest.js index 7955808d..cb4cdf67 100644 --- a/test/integration/casperjs/DrawingTest.js +++ b/test/integration/casperjs/DrawingTest.js @@ -1,8 +1,14 @@ (function () { var tests = [ - 'SimplePenDrawing1.json', - 'ComplexDrawing1.json', - 'ComplexDrawing2.json' + "pen.drawing.json", + "color.picker.json", + "frames.fun.json", + "layers.fun.json", + "move.json", + "pen.secondary.color.json", + "squares.circles.json", + "stroke.json", + "verticalpen.drawing.json" ]; var baseUrl = casper.cli.get('baseUrl')+"?debug"; diff --git a/test/integration/casperjs/drawing-records/ComplexDrawing1.json b/test/integration/casperjs/drawing-records/ComplexDrawing1.json deleted file mode 100644 index 61723cf4..00000000 --- a/test/integration/casperjs/drawing-records/ComplexDrawing1.json +++ /dev/null @@ -1 +0,0 @@ -{"events":[{"type":"tool-event","toolId":"tool-rectangle"},{"event":{"type":"mousedown","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":0},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":0},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":0},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":0},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":0},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":0},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":0},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":4},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":4},"type":"mouse-event"},{"type":"instrumented-event","methodName":"duplicateFrameAt","args":[0]},{"event":{"type":"mousedown","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":3},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":3},"type":"mouse-event"},{"type":"instrumented-event","methodName":"duplicateFrameAt","args":[0]},{"type":"instrumented-event","methodName":"moveFrame","args":[1,2]},{"type":"instrumented-event","methodName":"setCurrentFrameIndex","args":[2]},{"event":{"type":"mousedown","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":2},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":2},"type":"mouse-event"},{"type":"color-event","color":"#ab1414","isPrimary":true},{"type":"tool-event","toolId":"tool-colorswap"},{"event":{"type":"mousedown","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":1},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":1},"type":"mouse-event"}],"initialState":{"size":{"width":5,"height":5},"primaryColor":"#000000","secondaryColor":"rgba(0, 0, 0, 0)","selectedTool":"tool-pen"},"png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAFCAYAAACaTbYsAAAAMklEQVQYV2NcLSLyn4FMwAjSHPrmDSNMP8wwkBhMDlkMWR1JmtEdSJJmdBeCNZPpZQYArBs1IL//jKYAAAAASUVORK5CYII="} \ No newline at end of file diff --git a/test/integration/casperjs/drawing-records/ComplexDrawing2.json b/test/integration/casperjs/drawing-records/ComplexDrawing2.json deleted file mode 100644 index f293b584..00000000 --- a/test/integration/casperjs/drawing-records/ComplexDrawing2.json +++ /dev/null @@ -1 +0,0 @@ -{"events":[{"type":"tool-event","toolId":"tool-stroke"},{"event":{"type":"mousedown","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":0},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":0},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":4},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":4},"type":"mouse-event"},{"type":"color-event","color":"#b01616","isPrimary":true},{"event":{"type":"mousedown","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":0},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":0},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":0},"type":"mouse-event"},{"type":"instrumented-event","methodName":"duplicateFrameAt","args":[0]},{"type":"color-event","color":"#16b095","isPrimary":true},{"type":"color-event","color":"#277e6e","isPrimary":true},{"type":"tool-event","toolId":"tool-colorswap"},{"event":{"type":"mousedown","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":2},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":2},"type":"mouse-event"},{"type":"color-event","color":"rgb(39, 129, 178)","isPrimary":false},{"type":"instrumented-event","methodName":"setCurrentFrameIndex","args":[0]},{"event":{"type":"mousedown","button":2,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":2,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":2},"type":"mouse-event"},{"event":{"type":"mouseup","button":2,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":2},"type":"mouse-event"}],"initialState":{"size":{"width":5,"height":5},"primaryColor":"#000000","secondaryColor":"rgba(0, 0, 0, 0)","selectedTool":"tool-pen"},"png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAYAAAB8ZH1oAAAAcklEQVQIW2NkYGD4r964CUhBQOfUFIaAV68Y1OvyEGIzVjAwAhX9v1nvxwBSDFJUnj2HgeHvHoabTZPAijuBisozIiAKYSaBFYEAUCFYDKoIxAYrhJkEMxmkEKYIZjLjBjGx/3CTgDpBioFiYOtgAKQYAGHLPBYu9IxUAAAAAElFTkSuQmCC"} \ No newline at end of file diff --git a/test/integration/casperjs/drawing-records/SimplePenDrawing1.json b/test/integration/casperjs/drawing-records/SimplePenDrawing1.json deleted file mode 100644 index cbe87836..00000000 --- a/test/integration/casperjs/drawing-records/SimplePenDrawing1.json +++ /dev/null @@ -1 +0,0 @@ -{"events":[{"type":"color-event","color":"#9c2525","isPrimary":true},{"event":{"type":"mousedown","button":0,"clientX":576,"clientY":129,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":0},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"clientX":576,"clientY":129,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":0},"type":"mouse-event"},{"event":{"type":"mousedown","button":0,"clientX":515,"clientY":890,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":4},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"clientX":515,"clientY":890,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":4},"type":"mouse-event"},{"event":{"type":"mousedown","button":0,"clientX":1345,"clientY":596,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":2},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"clientX":1345,"clientY":596,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":2},"type":"mouse-event"},{"type":"instrumented-event","methodName":"addFrameAt","args":[1]},{"type":"color-event","color":"#bf8888","isPrimary":true},{"event":{"type":"mousedown","button":0,"clientX":528,"clientY":513,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"clientX":528,"clientY":513,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":2},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"clientX":528,"clientY":513,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":2},"type":"mouse-event"},{"event":{"type":"mousedown","button":0,"clientX":1331,"clientY":94,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":0},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"clientX":1331,"clientY":94,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":0},"type":"mouse-event"},{"event":{"type":"mousedown","button":0,"clientX":1338,"clientY":890,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"clientX":1339,"clientY":890,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":4},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"clientX":1339,"clientY":890,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":4},"type":"mouse-event"},{"type":"instrumented-event","methodName":"duplicateFrameAt","args":[0]},{"type":"instrumented-event","methodName":"moveFrame","args":[1,2]},{"type":"instrumented-event","methodName":"setCurrentFrameIndex","args":[2]}],"initialState":{"size":{"width":5,"height":5},"primaryColor":"#000000","secondaryColor":"rgba(0, 0, 0, 0)","selectedTool":"tool-pen"},"png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAFCAYAAACaTbYsAAAAOklEQVQYV2Oco6r6P+X2bUYGPGB/R8f/u3PnMqCrw6sJn4EgOQzNIJcoJyczOFZU4DUYpI4ymynxMwDAihvrrOeNLQAAAABJRU5ErkJggg=="} \ No newline at end of file diff --git a/test/integration/casperjs/drawing-records/TestSuite.json b/test/integration/casperjs/drawing-records/TestSuite.json index 0735c212..5d6929c8 100644 --- a/test/integration/casperjs/drawing-records/TestSuite.json +++ b/test/integration/casperjs/drawing-records/TestSuite.json @@ -1,5 +1,12 @@ { "tests" : [ - "SimplePenDrawing1.json", - "ComplexDrawing1.json", - "ComplexDrawing2.json" + "pen.drawing.json", + "bucket.drawing.json", + "color.picker.json", + "frames.fun.json", + "layers.fun.json", + "move.json", + "pen.secondary.color.json", + "squares.circles.json", + "stroke.json", + "verticalpen.drawing.json" ]} \ No newline at end of file diff --git a/test/integration/casperjs/drawing-records/bucket.drawing.json b/test/integration/casperjs/drawing-records/bucket.drawing.json new file mode 100644 index 00000000..5a3bae7d --- /dev/null +++ b/test/integration/casperjs/drawing-records/bucket.drawing.json @@ -0,0 +1 @@ +{"events":[{"type":"color-event","color":"#00989f","isPrimary":true},{"type":"tool-event","toolId":"tool-pen"},{"event":{"type":"mousedown","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":2},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":2},"type":"mouse-event"},{"event":{"type":"mousedown","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":0},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":0},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":4},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":4},"type":"mouse-event"},{"event":{"type":"mousedown","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":3},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":3},"type":"mouse-event"},{"event":{"type":"mousedown","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":4},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":4},"type":"mouse-event"},{"event":{"type":"mousedown","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":3},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":3},"type":"mouse-event"},{"event":{"type":"mousedown","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":4},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":4},"type":"mouse-event"},{"event":{"type":"mousedown","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":1},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":1},"type":"mouse-event"},{"event":{"type":"mousedown","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":1},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":1},"type":"mouse-event"},{"event":{"type":"mousedown","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":0},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":0},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":0},"type":"mouse-event"},{"event":{"type":"mousedown","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":0},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":0},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":0},"type":"mouse-event"},{"type":"color-event","color":"#000c9f","isPrimary":true},{"type":"tool-event","toolId":"tool-paint-bucket"},{"event":{"type":"mousedown","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"},{"type":"tool-event","toolId":"tool-colorswap"},{"type":"color-event","color":"#009f0c","isPrimary":true},{"event":{"type":"mousedown","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":1},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":1},"type":"mouse-event"},{"type":"instrumented-event","methodName":"duplicateFrameAt","args":[0]},{"type":"color-event","color":"#9f0000","isPrimary":true},{"event":{"type":"mousedown","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":0},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":0},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":0},"type":"mouse-event"}],"initialState":{"size":{"width":5,"height":5},"primaryColor":"#000000","secondaryColor":"rgba(0, 0, 0, 0)","selectedTool":"tool-move"},"png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAYAAAB8ZH1oAAAAPklEQVQIW2Ocz8DwP3E+DwND7mQGhsm5DPMTvzCAALoYI8N8nv9gRTAAVAwGaGKMDDzz/yNU4WYRbyKxbgQAzEEkQG3hX+sAAAAASUVORK5CYII="} \ No newline at end of file diff --git a/test/integration/casperjs/drawing-records/color.picker.json b/test/integration/casperjs/drawing-records/color.picker.json new file mode 100644 index 00000000..32540175 --- /dev/null +++ b/test/integration/casperjs/drawing-records/color.picker.json @@ -0,0 +1,48 @@ +{"events":[{"type":"tool-event","toolId":"tool-pen"}, +{"event":{"type":"mousedown","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":0},"type":"mouse-event"}, +{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":0},"type":"mouse-event"}, +{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":0},"type":"mouse-event"}, +{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":0},"type":"mouse-event"}, +{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":0},"type":"mouse-event"}, +{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":0},"type":"mouse-event"}, +{"event":{"type":"mouseup","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":0},"type":"mouse-event"}, +{"type":"color-event","color":"rgb(11, 182, 0)","isPrimary":true}, +{"event":{"type":"mousedown","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":1},"type":"mouse-event"}, +{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":1},"type":"mouse-event"}, +{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":1},"type":"mouse-event"}, +{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":1},"type":"mouse-event"}, +{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":1},"type":"mouse-event"}, +{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":1},"type":"mouse-event"}, +{"event":{"type":"mouseup","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":1},"type":"mouse-event"}, +{"type":"color-event","color":"rgb(49, 84, 47)","isPrimary":true}, +{"event":{"type":"mousedown","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":2},"type":"mouse-event"}, +{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":2},"type":"mouse-event"}, +{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":2},"type":"mouse-event"}, +{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"}, +{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":2},"type":"mouse-event"}, +{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":2},"type":"mouse-event"}, +{"event":{"type":"mouseup","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":2},"type":"mouse-event"}, +{"type":"tool-event","toolId":"tool-colorpicker"}, +{"event":{"type":"mousedown","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":0},"type":"mouse-event"}, +{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":0},"type":"mouse-event"}, +{"event":{"type":"mouseup","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":0},"type":"mouse-event"}, +{"type":"tool-event","toolId":"tool-pen"}, +{"event":{"type":"mousedown","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":3},"type":"mouse-event"}, +{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":3},"type":"mouse-event"}, +{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":3},"type":"mouse-event"}, +{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":3},"type":"mouse-event"}, +{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":3},"type":"mouse-event"}, +{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":3},"type":"mouse-event"}, +{"event":{"type":"mouseup","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":3},"type":"mouse-event"}, +{"type":"tool-event","toolId":"tool-colorpicker"}, +{"event":{"type":"mousedown","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":1},"type":"mouse-event"}, +{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":1},"type":"mouse-event"}, +{"event":{"type":"mouseup","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":1},"type":"mouse-event"}, +{"type":"tool-event","toolId":"tool-pen"}, +{"event":{"type":"mousedown","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":4},"type":"mouse-event"}, +{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":4},"type":"mouse-event"}, +{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":4},"type":"mouse-event"}, +{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":4},"type":"mouse-event"}, +{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":4},"type":"mouse-event"}, +{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":4},"type":"mouse-event"}, +{"event":{"type":"mouseup","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":4},"type":"mouse-event"}],"initialState":{"size":{"width":5,"height":5},"primaryColor":"rgb(182, 177, 0)","secondaryColor":"#80ff00","selectedTool":"tool-move"},"png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQIW2PctpHhPwMaYOTehkXQMEQfUyXR2gFosQoFS9oVSgAAAABJRU5ErkJggg=="} \ No newline at end of file diff --git a/test/integration/casperjs/drawing-records/eraser.bucket.json b/test/integration/casperjs/drawing-records/eraser.bucket.json new file mode 100644 index 00000000..83036b6e --- /dev/null +++ b/test/integration/casperjs/drawing-records/eraser.bucket.json @@ -0,0 +1 @@ +{"events":[{"event":{"type":"mousedown","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":1},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":1},"type":"mouse-event"},{"type":"instrumented-event","methodName":"createLayer","args":[]},{"type":"color-event","color":"#80ff00","isPrimary":true},{"event":{"type":"mousedown","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":2},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":2},"type":"mouse-event"},{"type":"tool-event","toolId":"tool-eraser"},{"event":{"type":"mousedown","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":1},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":1},"type":"mouse-event"},{"event":{"type":"mousedown","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":1},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":1},"type":"mouse-event"},{"event":{"type":"mousedown","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":3},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":3},"type":"mouse-event"},{"event":{"type":"mousedown","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":4},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":4},"type":"mouse-event"},{"event":{"type":"mousedown","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":3},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":3},"type":"mouse-event"},{"type":"instrumented-event","methodName":"duplicateFrameAt","args":[0]},{"event":{"type":"mousedown","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":3},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":3},"type":"mouse-event"},{"type":"instrumented-event","methodName":"duplicateFrameAt","args":[1]},{"event":{"type":"mousedown","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":2},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":2},"type":"mouse-event"}],"initialState":{"size":{"width":5,"height":5},"primaryColor":"#0029ff","secondaryColor":"rgba(0, 0, 0, 0)","selectedTool":"tool-paint-bucket"},"png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAFCAYAAACaTbYsAAAAQklEQVQYV2Ns+M/wn4FMwAjS3KD1n6HhGiMDjAaZRYwYWDOxFoMMhAGQZYwMmv//gxhwQSQFhAyFOxvZRJizCYkBAG2mLSUId5bWAAAAAElFTkSuQmCC"} \ No newline at end of file diff --git a/test/integration/casperjs/drawing-records/frames.fun.json b/test/integration/casperjs/drawing-records/frames.fun.json new file mode 100644 index 00000000..1e6245b6 --- /dev/null +++ b/test/integration/casperjs/drawing-records/frames.fun.json @@ -0,0 +1 @@ +{"events":[{"type":"tool-event","toolId":"tool-pen"},{"event":{"type":"mousedown","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":0},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":0},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":0},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":0},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":0},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":0},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":0},"type":"mouse-event"},{"type":"color-event","color":"#158d00","isPrimary":true},{"event":{"type":"mousedown","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":1},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":1},"type":"mouse-event"},{"type":"color-event","color":"#6bb25e","isPrimary":true},{"type":"tool-event","toolId":"tool-paint-bucket"},{"event":{"type":"mousedown","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"},{"type":"instrumented-event","methodName":"addFrameAt","args":[1]},{"event":{"type":"mousedown","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"},{"type":"instrumented-event","methodName":"duplicateFrameAt","args":[0]},{"type":"instrumented-event","methodName":"moveFrame","args":[1,2]},{"type":"instrumented-event","methodName":"setCurrentFrameIndex","args":[2]}],"initialState":{"size":{"width":5,"height":5},"primaryColor":"#8d007c","secondaryColor":"rgba(0, 0, 0, 0)","selectedTool":"tool-move"},"png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAFCAYAAACaTbYsAAAAPklEQVQYV2PsZaj5z4AG7m16hC7EoOQnhyHGKNrLgKE5TDUOQ+Gq24uwa0ZWDFKESzO6OrDNFGlGdw+xzgYAdtkjkmnNRVEAAAAASUVORK5CYII="} \ No newline at end of file diff --git a/test/integration/casperjs/drawing-records/layers.fun.json b/test/integration/casperjs/drawing-records/layers.fun.json new file mode 100644 index 00000000..79598203 --- /dev/null +++ b/test/integration/casperjs/drawing-records/layers.fun.json @@ -0,0 +1 @@ +{"events":[{"event":{"type":"mousedown","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"},{"type":"instrumented-event","methodName":"createLayer","args":[]},{"type":"color-event","color":"#0ea92e","isPrimary":true},{"type":"tool-event","toolId":"tool-rectangle"},{"event":{"type":"mousedown","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":3},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":3},"type":"mouse-event"},{"type":"instrumented-event","methodName":"createLayer","args":[]},{"type":"color-event","color":"#170ea9","isPrimary":true},{"event":{"type":"mousedown","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":3},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":3},"type":"mouse-event"},{"type":"instrumented-event","methodName":"moveLayerDown","args":[]},{"type":"tool-event","toolId":"tool-move"},{"event":{"type":"mousedown","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":0},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":0},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":1},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":1},"type":"mouse-event"}],"initialState":{"size":{"width":5,"height":5},"primaryColor":"#a9220e","secondaryColor":"rgba(0, 0, 0, 0)","selectedTool":"tool-paint-bucket"},"png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAM0lEQVQIW2NcqcT3nwENMIIEU9sV4MKzKx8wwAU5U6sZvs9uZQDRGCrhgiC9eW9mw40AAEumFR2KMzAWAAAAAElFTkSuQmCC"} \ No newline at end of file diff --git a/test/integration/casperjs/drawing-records/move.json b/test/integration/casperjs/drawing-records/move.json new file mode 100644 index 00000000..3162cab4 --- /dev/null +++ b/test/integration/casperjs/drawing-records/move.json @@ -0,0 +1 @@ +{"events":[{"type":"tool-event","toolId":"tool-pen"},{"event":{"type":"mousedown","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":0},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":0},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":0},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":0},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":1},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":1},"type":"mouse-event"},{"type":"tool-event","toolId":"tool-move"},{"event":{"type":"mousedown","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":1},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":1},"type":"mouse-event"},{"event":{"type":"mousedown","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":4},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":4},"type":"mouse-event"},{"event":{"type":"mousedown","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":3},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":3},"type":"mouse-event"},{"event":{"type":"mousedown","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":2},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":2},"type":"mouse-event"},{"event":{"type":"mousedown","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":3},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":3},"type":"mouse-event"}],"initialState":{"size":{"width":5,"height":5},"primaryColor":"#a0a90e","secondaryColor":"rgba(0, 0, 0, 0)","selectedTool":"tool-move"},"png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAG0lEQVQIW2NkwAIY8QouWMn3H6YArhKrILIxAMVaBLL0PFIXAAAAAElFTkSuQmCC"} \ No newline at end of file diff --git a/test/integration/casperjs/drawing-records/pen.drawing.json b/test/integration/casperjs/drawing-records/pen.drawing.json new file mode 100644 index 00000000..1b6f9e90 --- /dev/null +++ b/test/integration/casperjs/drawing-records/pen.drawing.json @@ -0,0 +1 @@ +{"events":[{"event":{"type":"mousedown","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":0},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":0},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":0},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":0},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":0},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":0},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":0},"type":"mouse-event"},{"type":"color-event","color":"#b00000","isPrimary":true},{"event":{"type":"mousedown","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":1},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":1},"type":"mouse-event"},{"event":{"type":"mousedown","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":2},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":2},"type":"mouse-event"},{"event":{"type":"mousedown","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"},{"event":{"type":"mousedown","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":3},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":3},"type":"mouse-event"},{"type":"color-event","color":"#03b000","isPrimary":true},{"event":{"type":"mousedown","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":4},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":4},"type":"mouse-event"}],"initialState":{"size":{"width":5,"height":5},"primaryColor":"#000000","secondaryColor":"rgba(0, 0, 0, 0)","selectedTool":"tool-pen"},"png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAALUlEQVQIW2NkYGD4D8QogBFdYANQEVwQxAEpCGBgYAQLggRAHJguRuYNmGYCAJ6NCGbAWR+yAAAAAElFTkSuQmCC"} \ No newline at end of file diff --git a/test/integration/casperjs/drawing-records/pen.secondary.color.json b/test/integration/casperjs/drawing-records/pen.secondary.color.json new file mode 100644 index 00000000..df6c360b --- /dev/null +++ b/test/integration/casperjs/drawing-records/pen.secondary.color.json @@ -0,0 +1 @@ +{"events":[{"event":{"type":"mousedown","button":2,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":0},"type":"mouse-event"},{"event":{"type":"mousemove","button":2,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":0},"type":"mouse-event"},{"event":{"type":"mousemove","button":2,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":2,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":2,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":2,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":2,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":2,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":2,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":2,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":2,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":2,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":0},"type":"mouse-event"},{"event":{"type":"mousemove","button":2,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":0},"type":"mouse-event"},{"event":{"type":"mousemove","button":2,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":0},"type":"mouse-event"},{"event":{"type":"mousemove","button":2,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":2,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":2,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":2,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":4},"type":"mouse-event"},{"event":{"type":"mouseup","button":2,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":4},"type":"mouse-event"},{"event":{"type":"mousedown","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":1},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":1},"type":"mouse-event"},{"event":{"type":"mousedown","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":0},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":0},"type":"mouse-event"},{"type":"instrumented-event","methodName":"duplicateFrameAt","args":[0]},{"type":"color-event","color":"rgb(11, 182, 0)","isPrimary":true},{"type":"color-event","color":"#80ff00","isPrimary":false},{"event":{"type":"mousedown","button":2,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":0},"type":"mouse-event"},{"event":{"type":"mousemove","button":2,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":0},"type":"mouse-event"},{"event":{"type":"mousemove","button":2,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":1},"type":"mouse-event"},{"event":{"type":"mouseup","button":2,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":1},"type":"mouse-event"},{"event":{"type":"mousedown","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":0},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":0},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":3},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":3},"type":"mouse-event"},{"event":{"type":"mousedown","button":2,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":0},"type":"mouse-event"},{"event":{"type":"mousemove","button":2,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":0},"type":"mouse-event"},{"event":{"type":"mousemove","button":2,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":2,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":2,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":2,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":2,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":2,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":2,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":2,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":2,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":2,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":0},"type":"mouse-event"},{"event":{"type":"mousemove","button":2,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":0},"type":"mouse-event"},{"event":{"type":"mousemove","button":2,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":0},"type":"mouse-event"},{"event":{"type":"mousemove","button":2,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":2,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":2,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":2,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":4},"type":"mouse-event"},{"event":{"type":"mouseup","button":2,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":4},"type":"mouse-event"},{"event":{"type":"mousedown","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":4},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":4},"type":"mouse-event"}],"initialState":{"size":{"width":5,"height":5},"primaryColor":"#80ff00","secondaryColor":"rgb(11, 182, 0)","selectedTool":"tool-pen"},"png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAYAAAB8ZH1oAAAALUlEQVQIW2Pk3sbwv9STgaF7OwMcwPggGgYYkRUiKwBpRObTSCHMHdjcBnMCAEZaLHxV4wucAAAAAElFTkSuQmCC"} \ No newline at end of file diff --git a/test/integration/casperjs/drawing-records/squares.circles.json b/test/integration/casperjs/drawing-records/squares.circles.json new file mode 100644 index 00000000..5228827b --- /dev/null +++ b/test/integration/casperjs/drawing-records/squares.circles.json @@ -0,0 +1 @@ +{"events":[{"type":"tool-event","toolId":"tool-rectangle"},{"event":{"type":"mousedown","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":0},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":0},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":4},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":4},"type":"mouse-event"},{"type":"instrumented-event","methodName":"addFrameAt","args":[1]},{"type":"tool-event","toolId":"tool-circle"},{"event":{"type":"mousedown","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":0},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":0},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":5},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":4},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":4},"type":"mouse-event"},{"type":"instrumented-event","methodName":"addFrameAt","args":[2]},{"type":"tool-event","toolId":"tool-rectangle"},{"event":{"type":"mousedown","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":0},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":0},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":0},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":2},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":2},"type":"mouse-event"}],"initialState":{"size":{"width":5,"height":5},"primaryColor":"#000000","secondaryColor":"rgba(0, 0, 0, 0)","selectedTool":"tool-move"},"png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAFCAYAAACaTbYsAAAAOklEQVQYV2NkYGD4D8TogBFNHBufASYIomEAZhguMZA8WI5UzTALSNaM7BKwIeh+QTYZOSwwNIIUAgAUyg8GfcJ3uAAAAABJRU5ErkJggg=="} \ No newline at end of file diff --git a/test/integration/casperjs/drawing-records/stroke.json b/test/integration/casperjs/drawing-records/stroke.json new file mode 100644 index 00000000..d5b1fddc --- /dev/null +++ b/test/integration/casperjs/drawing-records/stroke.json @@ -0,0 +1 @@ +{"events":[{"type":"color-event","color":"#0ea942","isPrimary":true},{"type":"tool-event","toolId":"tool-stroke"},{"event":{"type":"mousedown","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":0},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":0},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":4},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":4},"type":"mouse-event"},{"type":"color-event","color":"#0e20a9","isPrimary":true},{"event":{"type":"mousedown","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":0},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":0},"type":"mouse-event"},{"type":"color-event","color":"#a90e0e","isPrimary":true},{"event":{"type":"mousedown","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":0},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":0},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":0},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":0},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":0},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":0},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":0},"type":"mouse-event"},{"type":"color-event","color":"#850ea9","isPrimary":true},{"event":{"type":"mousedown","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":2},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":2},"type":"mouse-event"},{"type":"color-event","color":"#0ea949","isPrimary":true},{"type":"color-event","color":"#99a90e","isPrimary":true},{"event":{"type":"mousedown","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":4},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":4},"type":"mouse-event"}],"initialState":{"size":{"width":5,"height":5},"primaryColor":"#a0a90e","secondaryColor":"rgba(0, 0, 0, 0)","selectedTool":"tool-move"},"png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAM0lEQVQIW2Ncycf3nwENMIL4fCud/n8K38fIp7Dy/6cH4YyMrXwrcaiEqoDpYJy5EtNMAI0gFlQ3cBIKAAAAAElFTkSuQmCC"} \ No newline at end of file diff --git a/test/integration/casperjs/drawing-records/verticalpen.drawing.json b/test/integration/casperjs/drawing-records/verticalpen.drawing.json new file mode 100644 index 00000000..37932860 --- /dev/null +++ b/test/integration/casperjs/drawing-records/verticalpen.drawing.json @@ -0,0 +1 @@ +{"events":[{"type":"tool-event","toolId":"tool-move"},{"event":{"type":"mousedown","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":3},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":3},"type":"mouse-event"},{"event":{"type":"mousedown","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":3},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":3},"type":"mouse-event"},{"event":{"type":"mousedown","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":3},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":3},"type":"mouse-event"},{"type":"tool-event","toolId":"tool-paint-bucket"},{"type":"tool-event","toolId":"tool-stroke"},{"type":"tool-event","toolId":"tool-vertical-mirror-pen"},{"event":{"type":"mousedown","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":0},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":0},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":0},"type":"mouse-event"},{"type":"color-event","color":"#0e8d00","isPrimary":true},{"event":{"type":"mousedown","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":1},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":1},"type":"mouse-event"},{"type":"color-event","color":"#8d007c","isPrimary":true},{"event":{"type":"mousedown","button":0,"shiftKey":false,"altKey":false,"ctrlKey":true},"coords":{"x":0,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":true},"coords":{"x":0,"y":4},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":false,"altKey":false,"ctrlKey":true},"coords":{"x":0,"y":4},"type":"mouse-event"},{"event":{"type":"mousedown","button":0,"shiftKey":false,"altKey":false,"ctrlKey":true},"coords":{"x":1,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":true},"coords":{"x":1,"y":4},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":false,"altKey":false,"ctrlKey":true},"coords":{"x":1,"y":4},"type":"mouse-event"},{"event":{"type":"mousedown","button":0,"shiftKey":false,"altKey":false,"ctrlKey":true},"coords":{"x":2,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":true},"coords":{"x":2,"y":4},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":false,"altKey":false,"ctrlKey":true},"coords":{"x":2,"y":4},"type":"mouse-event"},{"event":{"type":"mousedown","button":0,"shiftKey":false,"altKey":false,"ctrlKey":true},"coords":{"x":1,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":true},"coords":{"x":1,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":true},"coords":{"x":2,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":false,"altKey":false,"ctrlKey":true},"coords":{"x":3,"y":2},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":false,"altKey":false,"ctrlKey":true},"coords":{"x":3,"y":2},"type":"mouse-event"}],"initialState":{"size":{"width":5,"height":5},"primaryColor":"#007a8d","secondaryColor":"rgba(0, 0, 0, 0)","selectedTool":"tool-vertical-mirror-pen"},"png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAL0lEQVQIW2PsZaj5zwAFxQwtjAxVvf8Z+XoZ/n8qZmCESYD4YA66auwqMcwE6gQAjJMUQOx1PuwAAAAASUVORK5CYII="} \ No newline at end of file From 006d72a1950db726bfadb67301fee68c78d62c74 Mon Sep 17 00:00:00 2001 From: jdescottes Date: Sun, 24 Aug 2014 18:03:42 +0200 Subject: [PATCH 16/20] removed temporary file --- out.txt | 176 -------------------------------------------------------- 1 file changed, 176 deletions(-) delete mode 100644 out.txt diff --git a/out.txt b/out.txt deleted file mode 100644 index 497c0dc9..00000000 --- a/out.txt +++ /dev/null @@ -1,176 +0,0 @@ -Running "leadingIndent:jsFiles" (leadingIndent) task -Checking files indentation. Desired indentation: spaces (104 files) -OK - -Running "leadingIndent:cssFiles" (leadingIndent) task -Checking files indentation. Desired indentation: spaces (24 files) -OK - -Running "jshint:files" (jshint) task ->> 106 files lint free. - -Running "closureCompiler:compile" (closureCompiler) task -Executing: java -jar "build/closure/closure_compiler_20130823.jar" --js src/js/Constants.js --js src/js/Events.js --js src/js/app.js --js src/js/controller/AnimatedPreviewController.js --js src/js/controller/CanvasBackgroundController.js --js src/js/controller/CursorCoordinatesController.js --js src/js/controller/DrawingController.js --js src/js/controller/LayersListController.js --js src/js/controller/MinimapController.js --js src/js/controller/NotificationController.js --js src/js/controller/PaletteController.js --js src/js/controller/PalettesListController.js --js src/js/controller/PreviewFilmController.js --js src/js/controller/ToolController.js --js src/js/controller/dialogs/AbstractDialogController.js --js src/js/controller/dialogs/BrowseLocalController.js --js src/js/controller/dialogs/DialogsController.js --js src/js/controller/dialogs/ImportImageController.js --js src/js/controller/dialogs/PaletteManagerController.js --js src/js/controller/piskel/PiskelController.js --js src/js/controller/piskel/PublicPiskelController.js --js src/js/controller/settings/ApplicationSettingsController.js --js src/js/controller/settings/GifExportController.js --js src/js/controller/settings/ImageExportController.js --js src/js/controller/settings/ImportController.js --js src/js/controller/settings/PngExportController.js --js src/js/controller/settings/ResizeController.js --js src/js/controller/settings/SaveController.js --js src/js/controller/settings/SettingsController.js --js src/js/devtools/DrawingTestRunner.js --js src/js/devtools/MouseEvent.js --js src/js/devtools/TestRecordController.js --js src/js/devtools/TestRecordPlayer.js --js src/js/devtools/TestRecorder.js --js src/js/drawingtools/BaseTool.js --js src/js/drawingtools/Circle.js --js src/js/drawingtools/ColorPicker.js --js src/js/drawingtools/ColorSwap.js --js src/js/drawingtools/Eraser.js --js src/js/drawingtools/Lighten.js --js src/js/drawingtools/Move.js --js src/js/drawingtools/PaintBucket.js --js src/js/drawingtools/Rectangle.js --js src/js/drawingtools/ShapeTool.js --js src/js/drawingtools/SimplePen.js --js src/js/drawingtools/Stroke.js --js src/js/drawingtools/VerticalMirrorPen.js --js src/js/drawingtools/selectiontools/BaseSelect.js --js src/js/drawingtools/selectiontools/RectangleSelect.js --js src/js/drawingtools/selectiontools/ShapeSelect.js --js src/js/model/Frame.js --js src/js/model/Layer.js --js src/js/model/Piskel.js --js src/js/model/frame/CachedFrameProcessor.js --js src/js/model/piskel/Descriptor.js --js src/js/rendering/AbstractRenderer.js --js src/js/rendering/CanvasRenderer.js --js src/js/rendering/CompositeRenderer.js --js src/js/rendering/DrawingLoop.js --js src/js/rendering/FramesheetRenderer.js --js src/js/rendering/OnionSkinRenderer.js --js src/js/rendering/PiskelRenderer.js --js src/js/rendering/frame/CachedFrameRenderer.js --js src/js/rendering/frame/FrameRenderer.js --js src/js/rendering/frame/TiledFrameRenderer.js --js src/js/rendering/layer/LayersRenderer.js --js src/js/selection/BaseSelection.js --js src/js/selection/RectangularSelection.js --js src/js/selection/SelectionManager.js --js src/js/selection/ShapeSelection.js --js src/js/service/AppEngineStorageService.js --js src/js/service/BackupService.js --js src/js/service/BeforeUnloadService.js --js src/js/service/CurrentColorsService.js --js src/js/service/FileDropperService.js --js src/js/service/GithubStorageService.js --js src/js/service/HistoryService.js --js src/js/service/ImageUploadService.js --js src/js/service/LocalStorageService.js --js src/js/service/SavedStatusService.js --js src/js/service/keyboard/CheatsheetService.js --js src/js/service/keyboard/KeycodeTranslator.js --js src/js/service/keyboard/ShortcutService.js --js src/js/snippets.js --js src/js/utils/Base64.js --js src/js/utils/BlobUtils.js --js src/js/utils/CanvasUtils.js --js src/js/utils/DateUtils.js --js src/js/utils/Dom.js --js src/js/utils/FileUtils.js --js src/js/utils/FrameUtils.js --js src/js/utils/ImageResizer.js --js src/js/utils/LayerUtils.js --js src/js/utils/Math.js --js src/js/utils/PiskelFileUtils.js --js src/js/utils/PixelUtils.js --js src/js/utils/Template.js --js src/js/utils/UserAgent.js --js src/js/utils/UserSettings.js --js src/js/utils/core.js --js src/js/utils/serialization/Deserializer.js --js src/js/utils/serialization/Serializer.js --js src/js/utils/serialization/backward/Deserializer_v0.js --js src/js/utils/serialization/backward/Deserializer_v1.js --js src/piskel-boot-0.1.0.js --js src/piskel-script-list.js --js_output_file=build/closure/closure_compiled_binary.js --compilation_level SIMPLE_OPTIMIZATIONS --externs build/closure/piskel-closure-externs.js --warning_level verbose --jscomp_off checkTypes --jscomp_off fileoverviewTags --summary_detail_level 1 --language_in ECMASCRIPT3 -src\js\app.js:2: WARNING - Parse error. illegal use of unknown JSDoc tag "require"; ignoring it - * @require Constants - ^ - -src\js\app.js:3: WARNING - Parse error. illegal use of unknown JSDoc tag "require"; ignoring it - * @require Events - ^ - -src\js\drawingtools\BaseTool.js:2: WARNING - Parse error. illegal use of unknown JSDoc tag "provide"; ignoring it - * @provide pskl.drawingtools.BaseTool - ^ - -src\js\drawingtools\BaseTool.js:4: WARNING - Parse error. illegal use of unknown JSDoc tag "require"; ignoring it - * @require pskl.utils - ^ - -src\js\drawingtools\Circle.js:2: WARNING - Parse error. illegal use of unknown JSDoc tag "provide"; ignoring it - * @provide pskl.drawingtools.Circle - ^ - -src\js\drawingtools\Circle.js:4: WARNING - Parse error. illegal use of unknown JSDoc tag "require"; ignoring it - * @require pskl.utils - ^ - -src\js\drawingtools\ColorPicker.js:2: WARNING - Parse error. illegal use of unknown JSDoc tag "provide"; ignoring it - * @provide pskl.drawingtools.ColorPicker - ^ - -src\js\drawingtools\ColorPicker.js:4: WARNING - Parse error. illegal use of unknown JSDoc tag "require"; ignoring it - * @require pskl.utils - ^ - -src\js\drawingtools\ColorSwap.js:2: WARNING - Parse error. illegal use of unknown JSDoc tag "provide"; ignoring it - * @provide pskl.drawingtools.ColorSwap - ^ - -src\js\drawingtools\Eraser.js:2: WARNING - Parse error. illegal use of unknown JSDoc tag "provide"; ignoring it - * @provide pskl.drawingtools.Eraser - ^ - -src\js\drawingtools\Eraser.js:4: WARNING - Parse error. illegal use of unknown JSDoc tag "require"; ignoring it - * @require Constants - ^ - -src\js\drawingtools\Eraser.js:5: WARNING - Parse error. illegal use of unknown JSDoc tag "require"; ignoring it - * @require pskl.utils - ^ - -src\js\drawingtools\Lighten.js:2: WARNING - Parse error. illegal use of unknown JSDoc tag "provide"; ignoring it - * @provide pskl.drawingtools.Eraser - ^ - -src\js\drawingtools\Lighten.js:4: WARNING - Parse error. illegal use of unknown JSDoc tag "require"; ignoring it - * @require Constants - ^ - -src\js\drawingtools\Lighten.js:5: WARNING - Parse error. illegal use of unknown JSDoc tag "require"; ignoring it - * @require pskl.utils - ^ - -src\js\drawingtools\Lighten.js:31: WARNING - Parse error. illegal use of unknown JSDoc tag "Override"; ignoring it - * @Override - ^ - -src\js\drawingtools\Lighten.js:42: WARNING - Parse error. illegal use of unknown JSDoc tag "Override"; ignoring it - * @Override - ^ - -src\js\drawingtools\Move.js:2: WARNING - Parse error. illegal use of unknown JSDoc tag "provide"; ignoring it - * @provide pskl.drawingtools.Move - ^ - -src\js\drawingtools\Move.js:4: WARNING - Parse error. illegal use of unknown JSDoc tag "require"; ignoring it - * @require pskl.utils - ^ - -src\js\drawingtools\PaintBucket.js:2: WARNING - Parse error. illegal use of unknown JSDoc tag "provide"; ignoring it - * @provide pskl.drawingtools.PaintBucket - ^ - -src\js\drawingtools\PaintBucket.js:4: WARNING - Parse error. illegal use of unknown JSDoc tag "require"; ignoring it - * @require pskl.utils - ^ - -src\js\drawingtools\Rectangle.js:2: WARNING - Parse error. illegal use of unknown JSDoc tag "provide"; ignoring it - * @provide pskl.drawingtools.Rectangle - ^ - -src\js\drawingtools\Rectangle.js:4: WARNING - Parse error. illegal use of unknown JSDoc tag "require"; ignoring it - * @require pskl.utils - ^ - -src\js\drawingtools\SimplePen.js:2: WARNING - Parse error. illegal use of unknown JSDoc tag "provide"; ignoring it - * @provide pskl.drawingtools.SimplePen - ^ - -src\js\drawingtools\SimplePen.js:4: WARNING - Parse error. illegal use of unknown JSDoc tag "require"; ignoring it - * @require pskl.utils - ^ - -src\js\drawingtools\Stroke.js:2: WARNING - Parse error. illegal use of unknown JSDoc tag "provide"; ignoring it - * @provide pskl.drawingtools.Stroke - ^ - -src\js\drawingtools\Stroke.js:4: WARNING - Parse error. illegal use of unknown JSDoc tag "require"; ignoring it - * @require pskl.utils - ^ - -src\js\drawingtools\selectiontools\BaseSelect.js:2: WARNING - Parse error. illegal use of unknown JSDoc tag "provide"; ignoring it - * @provide pskl.drawingtools.BaseSelect - ^ - -src\js\drawingtools\selectiontools\BaseSelect.js:4: WARNING - Parse error. illegal use of unknown JSDoc tag "require"; ignoring it - * @require pskl.utils - ^ - -src\js\drawingtools\selectiontools\RectangleSelect.js:2: WARNING - Parse error. illegal use of unknown JSDoc tag "provide"; ignoring it - * @provide pskl.drawingtools.RectangleSelect - ^ - -src\js\drawingtools\selectiontools\RectangleSelect.js:4: WARNING - Parse error. illegal use of unknown JSDoc tag "require"; ignoring it - * @require pskl.utils - ^ - -src\js\drawingtools\selectiontools\ShapeSelect.js:2: WARNING - Parse error. illegal use of unknown JSDoc tag "provide"; ignoring it - * @provide pskl.drawingtools.ShapeSelect - ^ - -src\js\drawingtools\selectiontools\ShapeSelect.js:4: WARNING - Parse error. illegal use of unknown JSDoc tag "require"; ignoring it - * @require pskl.utils - ^ - -src\js\service\keyboard\CheatsheetService.js:20: WARNING - Events.TOGGLE_HELP is never defined - $.subscribe(Events.TOGGLE_HELP, this.toggleCheatsheet_.bind(this)); - ^ - -src\js\service\keyboard\CheatsheetService.js:21: WARNING - Events.ESCAPE is never defined - $.subscribe(Events.ESCAPE, this.onEscape_.bind(this)); - ^ - -src\js\utils\FrameUtils.js:102: WARNING - Parse error. Non-JSDoc comment has annotations. Did you mean to start it with '/**'? - /* -^ - -src\js\utils\core.js:28: WARNING - Parse error. illegal use of unknown JSDoc tag "provide"; ignoring it - * @provide pskl.utils - ^ - -src\js\utils\core.js:30: WARNING - Parse error. illegal use of unknown JSDoc tag "require"; ignoring it - * @require Constants - ^ - -0 error(s), 38 warning(s) - -Command complete for target: compile - -Running "clean:after" (clean) task -Cleaning build/closure/closure_compiled_binary.js...OK - -Running "karma:unit" (karma) task -INFO [karma]: Karma v0.12.17 server started at http://localhost:9876/ -INFO [launcher]: Starting browser PhantomJS -WARN [watcher]: All files matched by "c:/Development/git/piskel/src/js/app.js" were excluded. From 895a15524d849b60829ab8e60707fa760f4ca4c4 Mon Sep 17 00:00:00 2001 From: jdescottes Date: Sun, 24 Aug 2014 18:10:09 +0200 Subject: [PATCH 17/20] Cleanup of HistoryService, removed this.$serviceName for consistency --- src/js/service/HistoryService.js | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/src/js/service/HistoryService.js b/src/js/service/HistoryService.js index 62b84e31..052056ff 100644 --- a/src/js/service/HistoryService.js +++ b/src/js/service/HistoryService.js @@ -2,9 +2,9 @@ var ns = $.namespace('pskl.service'); ns.HistoryService = function (piskelController, shortcutService, deserializer) { - this.$piskelController = piskelController || pskl.app.piskelController; - this.$shortcutService = shortcutService || pskl.app.shortcutService; - this.$deserializer = deserializer || pskl.utils.serialization.Deserializer; + this.piskelController = piskelController || pskl.app.piskelController; + this.shortcutService = shortcutService || pskl.app.shortcutService; + this.deserializer = deserializer || pskl.utils.serialization.Deserializer; this.stateQueue = []; this.currentIndex = -1; @@ -27,8 +27,8 @@ ns.HistoryService.prototype.init = function () { $.subscribe(Events.PISKEL_SAVE_STATE, this.onSaveStateEvent.bind(this)); - this.$shortcutService.addShortcut('ctrl+Z', this.undo.bind(this)); - this.$shortcutService.addShortcut('ctrl+Y', this.redo.bind(this)); + this.shortcutService.addShortcut('ctrl+Z', this.undo.bind(this)); + this.shortcutService.addShortcut('ctrl+Y', this.redo.bind(this)); this.saveState({ type : ns.HistoryService.SNAPSHOT @@ -45,8 +45,8 @@ var state = { action : stateInfo, - frameIndex : this.$piskelController.currentFrameIndex, - layerIndex : this.$piskelController.currentLayerIndex + frameIndex : this.piskelController.currentFrameIndex, + layerIndex : this.piskelController.currentLayerIndex }; var isSnapshot = stateInfo.type === ns.HistoryService.SNAPSHOT; @@ -55,7 +55,7 @@ if (isNoSnapshot && isAtAutoSnapshotInterval) { this.saveNextAsSnapshot = true; } else if (isSnapshot || isAtAutoSnapshotInterval) { - state.piskel = this.$piskelController.serialize(true); + state.piskel = this.piskelController.serialize(true); this.saveNextAsSnapshot = false; } @@ -94,7 +94,7 @@ } var serializedPiskel = this.getSnapshotFromState_(snapshotIndex); var onPiskelLoadedCb = this.onPiskelLoaded_.bind(this, index, snapshotIndex); - this.$deserializer.deserialize(serializedPiskel, onPiskelLoadedCb); + this.deserializer.deserialize(serializedPiskel, onPiskelLoadedCb); } } catch (e) { window.console.error("[CRITICAL ERROR] : Unable to load a history state."); @@ -126,8 +126,8 @@ ns.HistoryService.prototype.onPiskelLoaded_ = function (index, snapshotIndex, piskel) { var originalSize = this.getPiskelSize_(); - piskel.setDescriptor(this.$piskelController.piskel.getDescriptor()); - this.$piskelController.setPiskel(piskel); + piskel.setDescriptor(this.piskelController.piskel.getDescriptor()); + this.piskelController.setPiskel(piskel); for (var i = snapshotIndex + 1 ; i <= index ; i++) { var state = this.stateQueue[i]; @@ -149,18 +149,18 @@ }; ns.HistoryService.prototype.getPiskelSize_ = function () { - return this.$piskelController.getWidth() + 'x' + this.$piskelController.getHeight(); + return this.piskelController.getWidth() + 'x' + this.piskelController.getHeight(); }; ns.HistoryService.prototype.setupState = function (state) { - this.$piskelController.setCurrentFrameIndex(state.frameIndex); - this.$piskelController.setCurrentLayerIndex(state.layerIndex); + this.piskelController.setCurrentFrameIndex(state.frameIndex); + this.piskelController.setCurrentLayerIndex(state.layerIndex); }; ns.HistoryService.prototype.replayState = function (state) { var action = state.action; var type = action.type; - var layer = this.$piskelController.getLayerAt(state.layerIndex); + var layer = this.piskelController.getLayerAt(state.layerIndex); var frame = layer.getFrameAt(state.frameIndex); action.scope.replay(frame, action.replay); }; From efccfdc0c6681f7b6e5b8feb66dbc382dcc3ca47 Mon Sep 17 00:00:00 2001 From: jdescottes Date: Sun, 24 Aug 2014 23:44:22 +0200 Subject: [PATCH 18/20] Added test for lighten / darken --- test/integration/casperjs/drawing-records/TestSuite.json | 1 + test/integration/casperjs/drawing-records/lighten.darken.json | 1 + 2 files changed, 2 insertions(+) create mode 100644 test/integration/casperjs/drawing-records/lighten.darken.json diff --git a/test/integration/casperjs/drawing-records/TestSuite.json b/test/integration/casperjs/drawing-records/TestSuite.json index 5d6929c8..be8ba087 100644 --- a/test/integration/casperjs/drawing-records/TestSuite.json +++ b/test/integration/casperjs/drawing-records/TestSuite.json @@ -4,6 +4,7 @@ "color.picker.json", "frames.fun.json", "layers.fun.json", + "lighten.darken.json", "move.json", "pen.secondary.color.json", "squares.circles.json", diff --git a/test/integration/casperjs/drawing-records/lighten.darken.json b/test/integration/casperjs/drawing-records/lighten.darken.json new file mode 100644 index 00000000..17f222c8 --- /dev/null +++ b/test/integration/casperjs/drawing-records/lighten.darken.json @@ -0,0 +1 @@ +{"events":[{"type":"tool-event","toolId":"tool-paint-bucket"},{"event":{"type":"mousedown","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":1},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":false,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":1},"type":"mouse-event"},{"type":"tool-event","toolId":"tool-lighten"},{"event":{"type":"mousedown","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":0},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":0},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":0},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":0},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":0},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":0},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":0},"type":"mouse-event"},{"event":{"type":"mousedown","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":1},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":1},"type":"mouse-event"},{"event":{"type":"mousedown","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":0},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":0},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":0},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":0},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":0},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":0},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":0},"type":"mouse-event"},{"event":{"type":"mousedown","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":2},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":2},"type":"mouse-event"},{"event":{"type":"mousedown","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":2},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":2},"type":"mouse-event"},{"event":{"type":"mousedown","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":2},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":2},"type":"mouse-event"},{"event":{"type":"mousedown","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":2},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":2},"type":"mouse-event"},{"event":{"type":"mousedown","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":0},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":0},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":0},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":0},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":0},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":1},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":2},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":0,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":4},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":4,"y":4},"type":"mouse-event"},{"event":{"type":"mousedown","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":3},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":3},"type":"mouse-event"},{"event":{"type":"mousedown","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":1,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":3},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":3},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":3},"type":"mouse-event"},{"event":{"type":"mousedown","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":3},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":3,"y":3},"type":"mouse-event"},{"event":{"type":"mousedown","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":4},"type":"mouse-event"},{"event":{"type":"mousemove","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":4},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":4},"type":"mouse-event"},{"event":{"type":"mousedown","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":3},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":3},"type":"mouse-event"},{"event":{"type":"mousedown","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":3},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":3},"type":"mouse-event"},{"event":{"type":"mousedown","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":3},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":3},"type":"mouse-event"},{"event":{"type":"mousedown","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":3},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":3},"type":"mouse-event"},{"event":{"type":"mousedown","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":3},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":true,"altKey":false,"ctrlKey":false},"coords":{"x":2,"y":3},"type":"mouse-event"},{"event":{"type":"mousedown","button":0,"shiftKey":true,"altKey":false,"ctrlKey":true},"coords":{"x":0,"y":3},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":true,"altKey":false,"ctrlKey":true},"coords":{"x":0,"y":3},"type":"mouse-event"},{"event":{"type":"mousedown","button":0,"shiftKey":true,"altKey":false,"ctrlKey":true},"coords":{"x":4,"y":3},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":true,"altKey":false,"ctrlKey":true},"coords":{"x":4,"y":3},"type":"mouse-event"},{"event":{"type":"mousedown","button":0,"shiftKey":true,"altKey":false,"ctrlKey":true},"coords":{"x":3,"y":2},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":true,"altKey":false,"ctrlKey":true},"coords":{"x":3,"y":2},"type":"mouse-event"},{"event":{"type":"mousedown","button":0,"shiftKey":true,"altKey":false,"ctrlKey":true},"coords":{"x":1,"y":2},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":true,"altKey":false,"ctrlKey":true},"coords":{"x":1,"y":2},"type":"mouse-event"},{"event":{"type":"mousedown","button":0,"shiftKey":true,"altKey":false,"ctrlKey":true},"coords":{"x":1,"y":0},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":true,"altKey":false,"ctrlKey":true},"coords":{"x":1,"y":0},"type":"mouse-event"},{"event":{"type":"mousedown","button":0,"shiftKey":true,"altKey":false,"ctrlKey":true},"coords":{"x":3,"y":0},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":true,"altKey":false,"ctrlKey":true},"coords":{"x":3,"y":0},"type":"mouse-event"},{"event":{"type":"mousedown","button":0,"shiftKey":true,"altKey":false,"ctrlKey":true},"coords":{"x":0,"y":2},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":true,"altKey":false,"ctrlKey":true},"coords":{"x":0,"y":2},"type":"mouse-event"},{"event":{"type":"mousedown","button":0,"shiftKey":true,"altKey":false,"ctrlKey":true},"coords":{"x":4,"y":2},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":true,"altKey":false,"ctrlKey":true},"coords":{"x":4,"y":2},"type":"mouse-event"},{"event":{"type":"mousedown","button":0,"shiftKey":true,"altKey":false,"ctrlKey":true},"coords":{"x":0,"y":1},"type":"mouse-event"},{"event":{"type":"mouseup","button":0,"shiftKey":true,"altKey":false,"ctrlKey":true},"coords":{"x":0,"y":1},"type":"mouse-event"}],"initialState":{"size":{"width":5,"height":5},"primaryColor":"#000000","secondaryColor":"rgba(0, 0, 0, 0)","selectedTool":"tool-move"},"png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAARklEQVQIW2PU1dX9//HjRwZ+fn4GGM0I5PxnQAIgSUYbGxtMlUBF/4FGMHh7ezNs3bqV4fLlywxg7SAtcnJyDI8ePQKbCwDi5B7DVPJoXAAAAABJRU5ErkJggg=="} \ No newline at end of file From 35d4be5d3ea29296d91ba496721112c1fb0445e6 Mon Sep 17 00:00:00 2001 From: jdescottes Date: Tue, 26 Aug 2014 01:11:14 +0200 Subject: [PATCH 19/20] Configuration clenup --- Gruntfile.js | 2 +- karma.conf.js | 9 +++------ package.json | 2 +- .../casperjs/{TestSuite.js => LocalTestSuite.js} | 0 4 files changed, 5 insertions(+), 8 deletions(-) rename test/integration/casperjs/{TestSuite.js => LocalTestSuite.js} (100%) diff --git a/Gruntfile.js b/Gruntfile.js index b9834ea3..9455cb77 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -31,7 +31,7 @@ module.exports = function(grunt) { var casperEnvironments = { 'local' : { - suite : './test/integration/casperjs/TestSuite.js', + suite : './test/integration/casperjs/LocalTestSuite.js', delay : 50 }, 'travis' : { diff --git a/karma.conf.js b/karma.conf.js index 1580b4b3..8fb83788 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -6,7 +6,7 @@ module.exports = function(config) { var mapToSrcFolder = function (path) {return ['src', path].join('/');}; var piskelScripts = require('./src/piskel-script-list.js').scripts.map(mapToSrcFolder); - piskelScripts.push('test/**/*.js'); + piskelScripts.push('test/js/**/*.js'); config.set({ // base path that will be used to resolve all patterns (eg. files, exclude) @@ -23,10 +23,7 @@ module.exports = function(config) { // list of files to exclude - exclude: [ - 'src/js/app.js', - 'test/integration/**/*.js' - ], + exclude: [], // preprocess matching files before serving them to the browser @@ -55,7 +52,7 @@ module.exports = function(config) { // enable / disable watching file and executing tests whenever any file changes - autoWatch: false, + autoWatch: true, // start these browsers diff --git a/package.json b/package.json index 05405c69..1da0caa1 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "name": "piskel", "main": "./dest/index.html", "description": "Web based 2d animations editor", - "version": "0.1.1", + "version": "0.2.0", "homepage": "http://github.com/juliandescottes/piskel", "repository": { "type": "git", diff --git a/test/integration/casperjs/TestSuite.js b/test/integration/casperjs/LocalTestSuite.js similarity index 100% rename from test/integration/casperjs/TestSuite.js rename to test/integration/casperjs/LocalTestSuite.js From b2ab504422fda3c06bcf3eb4785d36059227bfb6 Mon Sep 17 00:00:00 2001 From: jdescottes Date: Tue, 26 Aug 2014 08:21:58 +0200 Subject: [PATCH 20/20] Drawing tests structure cleanup --- Gruntfile.js | 6 +++--- src/js/Constants.js | 2 +- src/js/devtools/DrawingTestSuiteController.js | 4 ++-- src/js/devtools/TestRecordController.js | 2 +- test/{integration => }/casperjs/DrawingTest.js | 14 ++------------ test/{integration => }/casperjs/LocalTestSuite.js | 0 test/{integration => }/casperjs/SmokeTest.js | 0 test/{integration => }/casperjs/TravisTestSuite.js | 0 .../DrawingTests.browser.js} | 2 +- test/drawing/DrawingTests.casper.js | 11 +++++++++++ .../tests}/bucket.drawing.json | 0 .../tests}/color.picker.json | 0 .../tests}/eraser.bucket.json | 0 .../tests}/frames.fun.json | 0 .../tests}/layers.fun.json | 0 .../tests}/lighten.darken.json | 0 .../drawing-records => drawing/tests}/move.json | 0 .../tests}/pen.drawing.json | 0 .../tests}/pen.secondary.color.json | 0 .../tests}/squares.circles.json | 0 .../drawing-records => drawing/tests}/stroke.json | 0 .../tests}/verticalpen.drawing.json | 0 22 files changed, 21 insertions(+), 20 deletions(-) rename test/{integration => }/casperjs/DrawingTest.js (74%) rename test/{integration => }/casperjs/LocalTestSuite.js (100%) rename test/{integration => }/casperjs/SmokeTest.js (100%) rename test/{integration => }/casperjs/TravisTestSuite.js (100%) rename test/{integration/casperjs/drawing-records/TestSuite.json => drawing/DrawingTests.browser.js} (94%) create mode 100644 test/drawing/DrawingTests.casper.js rename test/{integration/casperjs/drawing-records => drawing/tests}/bucket.drawing.json (100%) rename test/{integration/casperjs/drawing-records => drawing/tests}/color.picker.json (100%) rename test/{integration/casperjs/drawing-records => drawing/tests}/eraser.bucket.json (100%) rename test/{integration/casperjs/drawing-records => drawing/tests}/frames.fun.json (100%) rename test/{integration/casperjs/drawing-records => drawing/tests}/layers.fun.json (100%) rename test/{integration/casperjs/drawing-records => drawing/tests}/lighten.darken.json (100%) rename test/{integration/casperjs/drawing-records => drawing/tests}/move.json (100%) rename test/{integration/casperjs/drawing-records => drawing/tests}/pen.drawing.json (100%) rename test/{integration/casperjs/drawing-records => drawing/tests}/pen.secondary.color.json (100%) rename test/{integration/casperjs/drawing-records => drawing/tests}/squares.circles.json (100%) rename test/{integration/casperjs/drawing-records => drawing/tests}/stroke.json (100%) rename test/{integration/casperjs/drawing-records => drawing/tests}/verticalpen.drawing.json (100%) diff --git a/Gruntfile.js b/Gruntfile.js index 9455cb77..6872f830 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -26,16 +26,16 @@ module.exports = function(grunt) { var piskelStyles = require('./src/piskel-style-list.js').styles.map(mapToSrcFolder); var mapToCasperFolder = function (path) { - return "test/integration/casperjs/" + path; + return "test/casperjs/" + path; }; var casperEnvironments = { 'local' : { - suite : './test/integration/casperjs/LocalTestSuite.js', + suite : './test/casperjs/LocalTestSuite.js', delay : 50 }, 'travis' : { - suite : './test/integration/casperjs/TravisTestSuite.js', + suite : './test/casperjs/TravisTestSuite.js', delay : 5000 } }; diff --git a/src/js/Constants.js b/src/js/Constants.js index ae7823c6..f017ca5e 100644 --- a/src/js/Constants.js +++ b/src/js/Constants.js @@ -72,5 +72,5 @@ var Constants = { EMPTY_FUNCTION : function () {}, // TESTS - BASE_TEST_FOLDER : 'integration/casperjs/drawing-records' + DRAWING_TEST_FOLDER : 'drawing' }; \ No newline at end of file diff --git a/src/js/devtools/DrawingTestSuiteController.js b/src/js/devtools/DrawingTestSuiteController.js index 4ab94555..afa54f38 100644 --- a/src/js/devtools/DrawingTestSuiteController.js +++ b/src/js/devtools/DrawingTestSuiteController.js @@ -3,7 +3,7 @@ ns.DrawingTestSuiteController = function (suitePath) { if (suitePath.indexOf('/') === -1) { - suitePath = [Constants.BASE_TEST_FOLDER, suitePath].join('/'); + suitePath = [Constants.DRAWING_TEST_FOLDER, suitePath].join('/'); } this.suitePath = suitePath; this.testSuiteRunner = null; @@ -41,7 +41,7 @@ ns.DrawingTestSuiteController.prototype.onTestSuiteLoaded_ = function (response) { var testPaths = JSON.parse(response.responseText).tests; testPaths = testPaths.map(function (path) { - return this.suitePath.replace(/\/([^\/]+\.json)/i, '/' + path); + return [Constants.DRAWING_TEST_FOLDER, 'tests', path].join('/'); }.bind(this)); this.testSuiteRunner = new ns.DrawingTestSuiteRunner(testPaths); this.testSuiteRunner.start(); diff --git a/src/js/devtools/TestRecordController.js b/src/js/devtools/TestRecordController.js index 04581b3f..83baf200 100644 --- a/src/js/devtools/TestRecordController.js +++ b/src/js/devtools/TestRecordController.js @@ -70,7 +70,7 @@ }; ns.TestRecordController.prototype.onTestRecordEnd_ = function (evt, success) { - console.log('test finished : ', success); + window.alert('Test finished : ', success); }; })(); \ No newline at end of file diff --git a/test/integration/casperjs/DrawingTest.js b/test/casperjs/DrawingTest.js similarity index 74% rename from test/integration/casperjs/DrawingTest.js rename to test/casperjs/DrawingTest.js index cb4cdf67..2bb599e8 100644 --- a/test/integration/casperjs/DrawingTest.js +++ b/test/casperjs/DrawingTest.js @@ -1,15 +1,5 @@ (function () { - var tests = [ - "pen.drawing.json", - "color.picker.json", - "frames.fun.json", - "layers.fun.json", - "move.json", - "pen.secondary.color.json", - "squares.circles.json", - "stroke.json", - "verticalpen.drawing.json" - ]; + var tests = require('./test/drawing/DrawingTests.casper.js').tests; var baseUrl = casper.cli.get('baseUrl')+"?debug"; var resultSelector = '#drawing-test-result'; @@ -17,7 +7,7 @@ casper.start(); var runTest = function (index) { - var test = 'integration/casperjs/drawing-records/' + tests[index]; + var test = 'drawing/tests/' + tests[index]; casper.open(baseUrl + "&test-run=" + test); diff --git a/test/integration/casperjs/LocalTestSuite.js b/test/casperjs/LocalTestSuite.js similarity index 100% rename from test/integration/casperjs/LocalTestSuite.js rename to test/casperjs/LocalTestSuite.js diff --git a/test/integration/casperjs/SmokeTest.js b/test/casperjs/SmokeTest.js similarity index 100% rename from test/integration/casperjs/SmokeTest.js rename to test/casperjs/SmokeTest.js diff --git a/test/integration/casperjs/TravisTestSuite.js b/test/casperjs/TravisTestSuite.js similarity index 100% rename from test/integration/casperjs/TravisTestSuite.js rename to test/casperjs/TravisTestSuite.js diff --git a/test/integration/casperjs/drawing-records/TestSuite.json b/test/drawing/DrawingTests.browser.js similarity index 94% rename from test/integration/casperjs/drawing-records/TestSuite.json rename to test/drawing/DrawingTests.browser.js index be8ba087..fa7a32d7 100644 --- a/test/integration/casperjs/drawing-records/TestSuite.json +++ b/test/drawing/DrawingTests.browser.js @@ -1,4 +1,4 @@ -{ "tests" : [ +{"tests" : [ "pen.drawing.json", "bucket.drawing.json", "color.picker.json", diff --git a/test/drawing/DrawingTests.casper.js b/test/drawing/DrawingTests.casper.js new file mode 100644 index 00000000..68e8b83f --- /dev/null +++ b/test/drawing/DrawingTests.casper.js @@ -0,0 +1,11 @@ +(typeof exports != "undefined" ? exports : pskl_exports).tests = [ + "pen.drawing.json", + "color.picker.json", + "frames.fun.json", + "layers.fun.json", + "move.json", + "pen.secondary.color.json", + "squares.circles.json", + "stroke.json", + "verticalpen.drawing.json" +]; \ No newline at end of file diff --git a/test/integration/casperjs/drawing-records/bucket.drawing.json b/test/drawing/tests/bucket.drawing.json similarity index 100% rename from test/integration/casperjs/drawing-records/bucket.drawing.json rename to test/drawing/tests/bucket.drawing.json diff --git a/test/integration/casperjs/drawing-records/color.picker.json b/test/drawing/tests/color.picker.json similarity index 100% rename from test/integration/casperjs/drawing-records/color.picker.json rename to test/drawing/tests/color.picker.json diff --git a/test/integration/casperjs/drawing-records/eraser.bucket.json b/test/drawing/tests/eraser.bucket.json similarity index 100% rename from test/integration/casperjs/drawing-records/eraser.bucket.json rename to test/drawing/tests/eraser.bucket.json diff --git a/test/integration/casperjs/drawing-records/frames.fun.json b/test/drawing/tests/frames.fun.json similarity index 100% rename from test/integration/casperjs/drawing-records/frames.fun.json rename to test/drawing/tests/frames.fun.json diff --git a/test/integration/casperjs/drawing-records/layers.fun.json b/test/drawing/tests/layers.fun.json similarity index 100% rename from test/integration/casperjs/drawing-records/layers.fun.json rename to test/drawing/tests/layers.fun.json diff --git a/test/integration/casperjs/drawing-records/lighten.darken.json b/test/drawing/tests/lighten.darken.json similarity index 100% rename from test/integration/casperjs/drawing-records/lighten.darken.json rename to test/drawing/tests/lighten.darken.json diff --git a/test/integration/casperjs/drawing-records/move.json b/test/drawing/tests/move.json similarity index 100% rename from test/integration/casperjs/drawing-records/move.json rename to test/drawing/tests/move.json diff --git a/test/integration/casperjs/drawing-records/pen.drawing.json b/test/drawing/tests/pen.drawing.json similarity index 100% rename from test/integration/casperjs/drawing-records/pen.drawing.json rename to test/drawing/tests/pen.drawing.json diff --git a/test/integration/casperjs/drawing-records/pen.secondary.color.json b/test/drawing/tests/pen.secondary.color.json similarity index 100% rename from test/integration/casperjs/drawing-records/pen.secondary.color.json rename to test/drawing/tests/pen.secondary.color.json diff --git a/test/integration/casperjs/drawing-records/squares.circles.json b/test/drawing/tests/squares.circles.json similarity index 100% rename from test/integration/casperjs/drawing-records/squares.circles.json rename to test/drawing/tests/squares.circles.json diff --git a/test/integration/casperjs/drawing-records/stroke.json b/test/drawing/tests/stroke.json similarity index 100% rename from test/integration/casperjs/drawing-records/stroke.json rename to test/drawing/tests/stroke.json diff --git a/test/integration/casperjs/drawing-records/verticalpen.drawing.json b/test/drawing/tests/verticalpen.drawing.json similarity index 100% rename from test/integration/casperjs/drawing-records/verticalpen.drawing.json rename to test/drawing/tests/verticalpen.drawing.json