mirror of
https://github.com/piskelapp/piskel.git
synced 2023-08-10 21:12:52 +03:00
162 lines
4.8 KiB
JavaScript
162 lines
4.8 KiB
JavaScript
/* globals casper */
|
|
|
|
/**
|
|
* Collection of shared methods for casperjs integration tests.
|
|
*/
|
|
|
|
function evalLine(line) {
|
|
return casper.evaluate(
|
|
'function () {return ' + line + '}'
|
|
);
|
|
}
|
|
|
|
function getValue(selector) {
|
|
return casper.evaluate(
|
|
'function () { \
|
|
return document.querySelector(\'' + selector + '\').value;\
|
|
}');
|
|
}
|
|
|
|
function getClassName(selector) {
|
|
return casper.evaluate(
|
|
'function () { \
|
|
return document.querySelector(\'' + selector + '\').className;\
|
|
}');
|
|
}
|
|
|
|
function isChecked(selector) {
|
|
return casper.evaluate(
|
|
'function () { \
|
|
return document.querySelector(\'' + selector + '\').checked;\
|
|
}');
|
|
}
|
|
|
|
function setPiskelFromGrid(grid) {
|
|
casper.evaluate(
|
|
'function () {\
|
|
var B = "#0000FF", T = Constants.TRANSPARENT_COLOR;\
|
|
var R = "#FF0000", G = "#00FF00";\
|
|
var grid = pskl.utils.FrameUtils.toFrameGrid(' + grid + ');\
|
|
var frame = pskl.model.Frame.fromPixelGrid(grid);\
|
|
var layer = pskl.model.Layer.fromFrames("l1", [frame]);\
|
|
var piskel = pskl.model.Piskel.fromLayers([layer], 12, {name : "test", description : ""});\
|
|
pskl.app.piskelController.setPiskel(piskel);\
|
|
}');
|
|
}
|
|
|
|
function piskelFrameEqualsGrid(grid, layer, frame) {
|
|
return casper.evaluate(
|
|
'function () {\
|
|
var B = "#0000FF", T = Constants.TRANSPARENT_COLOR;\
|
|
var R = "#FF0000", G = "#00FF00";\
|
|
var piskel = pskl.app.piskelController.getPiskel();\
|
|
var frame = piskel.getLayerAt(' + layer +').getFrameAt(' + frame + ');\
|
|
var grid = ' + grid +';\
|
|
var isValid = true;\
|
|
var log = [];\
|
|
frame.forEachPixel(function (color, col, row) {\
|
|
if (pskl.utils.colorToInt(color) !== pskl.utils.colorToInt(grid[row][col])) {\
|
|
log.push(color, grid[row][col]);\
|
|
}\
|
|
isValid = isValid && pskl.utils.colorToInt(color) === pskl.utils.colorToInt(grid[row][col]);\
|
|
});\
|
|
return isValid;\
|
|
}');
|
|
}
|
|
|
|
function isDrawerExpanded() {
|
|
return casper.evaluate(function () {
|
|
var settingsElement = document.querySelector('[data-pskl-controller="settings"]');
|
|
return settingsElement.classList.contains('expanded');
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Wait for the provided piskel specific event.
|
|
*
|
|
* @param {String} eventName
|
|
* name of the event to listen to
|
|
* @param {Function} onSuccess
|
|
* callback to call when the event is successfully catched
|
|
* @param {Function} onError
|
|
* callback to call when failing to get the event (most likely, timeout)
|
|
*/
|
|
function waitForEvent(eventName, onSuccess, onError) {
|
|
var cleanup = function () {
|
|
casper.evaluate(
|
|
'function () {\
|
|
document.body.removeChild(document.getElementById("casper-' + eventName +'"));\
|
|
}');
|
|
};
|
|
|
|
casper.echo("Waiting for casper element");
|
|
casper.waitForSelector('#casper-' + eventName, function () {
|
|
// success
|
|
casper.echo("Successfully received event", eventName);
|
|
cleanup();
|
|
onSuccess();
|
|
}, function () {
|
|
// error
|
|
casper.echo("Failed to receive event", eventName);
|
|
cleanup();
|
|
onError();
|
|
}, 10000);
|
|
|
|
casper.echo("Subscribe to event:", eventName);
|
|
casper.evaluate(
|
|
'function () {\
|
|
$.subscribe("' + eventName + '", function onCasperEvent() {\
|
|
$.unsubscribe("' + eventName + '", onCasperEvent);\
|
|
var el = document.createElement("div");\
|
|
el.id = "casper-' + eventName +'";\
|
|
document.body.appendChild(el);\
|
|
});\
|
|
}');
|
|
}
|
|
|
|
function replaceFunction(test, path, method) {
|
|
// Check the path provided corresponds to an existing method, otherwise the
|
|
// test probably needs to be updated.
|
|
test.assertEquals(evalLine('typeof ' + path), 'function',
|
|
path + ' is still a function');
|
|
|
|
// Replace the method in content.
|
|
casper.evaluate('function () {' + path + ' = ' + method + '}');
|
|
}
|
|
|
|
function setPiskelFromImageSrc(src) {
|
|
casper.evaluate(
|
|
'function () {\
|
|
pskl.utils.FrameUtils.createFromImageSrc("' + src + '", false, function (frame) {\
|
|
var layer = pskl.model.Layer.fromFrames("l1", [frame]);\
|
|
var piskel = pskl.model.Piskel.fromLayers([layer], 12, {\
|
|
name: "piskel",\
|
|
description: "description"\
|
|
});\
|
|
pskl.app.piskelController.setPiskel(piskel);\
|
|
});\
|
|
}');
|
|
}
|
|
|
|
/**
|
|
* Load the piskel website in debug mode and call the provided callback when ready.
|
|
*/
|
|
function startTest(test, callback) {
|
|
return casper
|
|
// Pass "integration-test" to avoid the "unsupported browser" dialog
|
|
.start(casper.cli.get('baseUrl')+"/?debug&integration-test")
|
|
.then(function () {
|
|
casper.echo("URL loaded");
|
|
|
|
casper.evaluate(function() {
|
|
localStorage.clear();
|
|
}, {});
|
|
casper.echo("Local storage cleaned");
|
|
|
|
casper.waitForSelector('#drawing-canvas-container canvas', callback, test.timeout, 20000);
|
|
})
|
|
.run(function () {
|
|
test.done();
|
|
});
|
|
}
|