diff options
author | diosmosis <benakamoorthi@fastmail.fm> | 2014-01-29 05:01:37 +0400 |
---|---|---|
committer | diosmosis <benakamoorthi@fastmail.fm> | 2014-01-29 05:02:11 +0400 |
commit | be9b410ac5d0947447097f175b93114f15662e3a (patch) | |
tree | 69dff85abdf0044f8d1e4bf7dc6fb7066f8db6ac /tests/resources | |
parent | 35487a0b6b4ee8a593afd450779b4189611c5340 (diff) |
Refs #4189, added UI unit test base class and tests for ViewDataTable. Refactored capture.js to make new type of testing possible.
Diffstat (limited to 'tests/resources')
-rw-r--r-- | tests/resources/screenshot-capture/capture.js | 225 |
1 files changed, 154 insertions, 71 deletions
diff --git a/tests/resources/screenshot-capture/capture.js b/tests/resources/screenshot-capture/capture.js index ca67e8ffb9..20118d8523 100644 --- a/tests/resources/screenshot-capture/capture.js +++ b/tests/resources/screenshot-capture/capture.js @@ -4,59 +4,13 @@ var readFileSync = fs.readFileSync || fs.read; var VERBOSE = false; -var PageRenderer = function() { +var PageRenderer = function(data) { this.start = new Date(); - - this.urlIndex = 0; - this.urls = JSON.parse(readFileSync('../../tmp/urls.txt')); - - this.outputPath = ''; - this.url = ''; - - this.webpage = require('webpage').create(); - this._setupWebpageEvents(); - - this._setScriptTimeout(); }; PageRenderer.prototype = { renderAll: function () { - this._saveCurrentUrl(); - }, - - _saveCurrentUrl: function () { - if (this.urlIndex >= this.urls.length) { - app.exit(); - return; - } - - this.outputPath = this.urls[this.urlIndex][0]; - this.url = this.urls[this.urlIndex][1]; - this.jsToTest = this.urls[this.urlIndex][2]; - - console.log("SAVING " + this.url + " at " + this._getElapsedExecutionTime()); - - if (this.webpage) { - this.webpage.close(); - } - - this.webpage = require('webpage').create(); - this._setupWebpageEvents(); - - this.webpage.viewportSize = {width:1350, height:768}; - - var self = this; - this.webpage.open(this.url, function () { - if (self.jsToTest) { - self.webpage.evaluate(function (js) { - var $ = window.jQuery; - eval(js); - }, self.jsToTest); - } - - self._setNoAjaxCheckTimeout(); - }); - this._setPageTimeouts(); + this._saveCurrentScreen(); }, _setNoAjaxCheckTimeout: function () { @@ -104,22 +58,6 @@ PageRenderer.prototype = { console.log(msgStack.join('\n')); }; - this.webpage.onConsoleMessage = function (message) { - if (message == "__AJAX_DONE__") { - try { - self._setCorrectViewportSize(); - self.webpage.render(self.outputPath); - - self._renderNextUrl(); - } catch (e) { - console.log("ERROR: " + e.message); - app.exit(1); - } - } else { - console.log("LOGGED: " + message); - } - }; - if (VERBOSE) { this.webpage.onResourceReceived = function (response) { console.log('Response (#' + response.id + ', stage "' + response.stage + '", size "' + response.bodySize + @@ -133,11 +71,6 @@ PageRenderer.prototype = { }; }, - _renderNextUrl: function () { - ++this.urlIndex; - this._saveCurrentUrl(); - }, - _setCorrectViewportSize: function () { this.webpage.viewportSize = {width:1350, height:768}; var height = Math.max(768, this.webpage.evaluate(function() { @@ -157,12 +90,162 @@ PageRenderer.prototype = { setTimeout(function() { console.log("ERROR: Timed out!"); app.exit(1); - }, Math.max(1000 * 15 * this.urls.length, 1000 * 60 * 10)); + }, Math.max(1000 * 15 * this.screenshotCount, 1000 * 60 * 10)); }, }; + +var IntegrationTestRenderer = function(data) { + PageRenderer.call(this, data); + + this.outputPath = ''; + this.url = ''; + + this.urlIndex = 0; + this.urls = data; + + this.screenshotCount = this.urls.length; + + this._setScriptTimeout(); +}; + +IntegrationTestRenderer.prototype = Object.create(PageRenderer.prototype); + +IntegrationTestRenderer.prototype._saveCurrentScreen = function () { + if (this.urlIndex >= this.urls.length) { + app.exit(); + return; + } + + this.outputPath = this.urls[this.urlIndex][0]; + this.url = this.urls[this.urlIndex][1]; + this.jsToTest = this.urls[this.urlIndex][2]; + + console.log("SAVING " + this.url + " at " + this._getElapsedExecutionTime()); + + if (this.webpage) { + this.webpage.close(); + } + + this.webpage = require('webpage').create(); + this._setupWebpageEvents(); + + this.webpage.viewportSize = {width:1350, height:768}; + + var self = this; + this.webpage.open(this.url, function () { + if (self.jsToTest) { + self.webpage.evaluate(function (js) { + var $ = window.jQuery; + eval(js); + }, self.jsToTest); + } + + self._setNoAjaxCheckTimeout(); + }); + this._setPageTimeouts(); +}; + +IntegrationTestRenderer.prototype._setupWebpageEvents = function () { + PageRenderer.prototype._setupWebpageEvents.call(this); + + var self = this; + this.webpage.onConsoleMessage = function (message) { + if (message == "__AJAX_DONE__") { + try { + self._setCorrectViewportSize(); + self.webpage.render(self.outputPath); + + self._renderNextUrl(); + } catch (e) { + console.log("ERROR: " + e.message); + app.exit(1); + } + } else { + console.log("LOGGED: " + message); + } + }; +}; + +IntegrationTestRenderer.prototype._renderNextUrl = function () { + ++this.urlIndex; + this._saveCurrentScreen(); +}; + +var UnitTestRenderer = function(data) { + PageRenderer.call(this, data); + + this.screenIndex = 0; + this.url = data.url; + this.screens = data.screens; + + this.screenshotCount = this.screens.length; + + this._setScriptTimeout(); +}; + +UnitTestRenderer.prototype = Object.create(PageRenderer.prototype); + +UnitTestRenderer.prototype.renderAll = function () { + this.webpage = require('webpage').create(); + this._setupWebpageEvents(); + + this.webpage.viewportSize = {width:1350, height:768}; + + console.log("OPENING INITIAL URL: " + this.url); + + var self = this; + this.webpage.open(this.url, function () { + setTimeout(function () { + self._saveCurrentScreen(); + }, 15 * 1000); + }); +}; + +UnitTestRenderer.prototype._saveCurrentScreen = function () { + if (this.screenIndex >= this.screens.length) { + app.exit(); + return; + } + + var outputPath = this.screens[this.screenIndex][0], + screenJs = this.screens[this.screenIndex][1]; + + console.log("SAVING " + outputPath + " at " + this._getElapsedExecutionTime()); + + this.webpage.evaluate(function (js) { + var $ = window.jQuery; + eval(js); + }, screenJs); + + var self = this; + setTimeout(function () { + try { + self._setCorrectViewportSize(); + self.webpage.render(outputPath); + + self._renderNextUrl(); + } catch (e) { + console.log("ERROR: " + e.message); + app.exit(1); + } + }, 5 * 1000); +}; + +UnitTestRenderer.prototype._renderNextUrl = function () { + ++this.screenIndex; + this._saveCurrentScreen(); +}; + try { - var renderer = new PageRenderer(); + var data = JSON.parse(readFileSync('../../tmp/urls.txt')); + + if (data instanceof Array) { + var renderer = new IntegrationTestRenderer(data); + } else { + var renderer = new UnitTestRenderer(data); + } + renderer.renderAll(); } catch (e) { console.log("ERROR: " + e.message); |