Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/matomo-org/matomo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordiosmosis <benakamoorthi@fastmail.fm>2014-01-29 05:01:37 +0400
committerdiosmosis <benakamoorthi@fastmail.fm>2014-01-29 05:02:11 +0400
commitbe9b410ac5d0947447097f175b93114f15662e3a (patch)
tree69dff85abdf0044f8d1e4bf7dc6fb7066f8db6ac /tests/resources
parent35487a0b6b4ee8a593afd450779b4189611c5340 (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.js225
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);