svgcanvas/test/example.spec.js

85 lines
2.9 KiB
JavaScript

describe('canvas2svg exports', function() {
var examples = Object.keys(C2S_EXAMPLES);
var C2S_WIDTH = 600;
var C2S_HEIGHT = 600;
var imgdata, svgimgdata, diffdata;
function drawExample (example) {
var canvas = document.createElement('canvas');
canvas.setAttribute('width', C2S_WIDTH);
canvas.setAttribute('height', C2S_HEIGHT);
document.body.appendChild(canvas);
var ctx = canvas.getContext("2d");
ctx.clearRect(0, 0, C2S_WIDTH, C2S_HEIGHT);
var c2s = new C2S(C2S_WIDTH, C2S_HEIGHT);
example(ctx);
example(c2s);
imgdata = canvas.toDataURL();
svgimgdata = "data:image/svg+xml;charset=utf-8,"+c2s.getSerializedSvg(true);
}
function cleanUp () {
var canvases = document.querySelectorAll('canvas');
var i;
//Node Array doesn't implement array methods :/
for(i=0; i<canvases.length; i++) {
canvases[i].parentElement.removeChild(canvases[i]);
}
}
examples.forEach(function(example) {
describe(example, function() {
var drawFunction;
beforeEach(function() {
drawFunction = C2S_EXAMPLES[example];
});
it('to svg (left is canvas right is svg)', function () {
drawExample(drawFunction);
});
//test is async, pass in done
it('resembles each other', function() {
// see: https://github.com/Huddle/Resemble.js
var diff = resemble(imgdata).compareTo(svgimgdata).ignoreAntialiasing().onComplete(function(data){
diffdata = data;
expect(data.misMatchPercentage).to.be.below(0.30);
});
});
after(function() {
cleanUp();
var lis = document.querySelectorAll('li');
//on server side, don't inject images
if(lis.length > 0) {
//append svg + canvas images
var li = lis[lis.length - 2];
var image = document.createElement('img');
image.setAttribute('src', imgdata);
image.setAttribute('style', 'display:inline-block;');
var svgimage = document.createElement('img');
svgimage.setAttribute('src', svgimgdata);
svgimage.setAttribute('style', 'display:inline-block;');
li.appendChild(image);
li.appendChild(svgimage);
// append diff data
li = lis[lis.length-1];
var diffimage = document.createElement('img');
diffimage.setAttribute('src', diffdata.getImageDataUrl());
diffimage.setAttribute('style', 'display:inline-block;');
li.appendChild(diffimage);
}
});
});
});
});