/**
|
|
* Set up mock 2D context, for usage in unit tests.
|
|
*
|
|
* Adapted from: https://github.com/Cristy94/canvas-mock
|
|
*/
|
|
|
|
var canvasMock; // Use one canvas instance for all calls to createElement('canvas');
|
|
|
|
|
|
function replaceCanvasContext (el) {
|
|
el.getContext = function() {
|
|
return {
|
|
fillRect: function() {},
|
|
clearRect: function(){},
|
|
getImageData: function(x, y, w, h) {
|
|
return {
|
|
data: new Array(w*h*4)
|
|
};
|
|
},
|
|
putImageData: function() {},
|
|
createImageData: function(){ return []},
|
|
setTransform: function(){},
|
|
drawImage: function(){},
|
|
save: function(){},
|
|
text: function(){},
|
|
fillText: function(){},
|
|
restore: function(){},
|
|
beginPath: function(){},
|
|
moveTo: function(){},
|
|
lineTo: function(){},
|
|
closePath: function(){},
|
|
stroke: function(){},
|
|
translate: function(){},
|
|
scale: function(){},
|
|
rotate: function(){},
|
|
circle: function(){},
|
|
arc: function(){},
|
|
fill: function(){},
|
|
|
|
//
|
|
// Following added for vis.js unit tests
|
|
//
|
|
|
|
measureText: function(text) {
|
|
return {
|
|
width: 12*text.length,
|
|
height: 14
|
|
};
|
|
}
|
|
};
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* Overrides document.createElement(), in order to supply a custom canvas element.
|
|
*
|
|
* In the canvas element, getContext() is overridden in order to supply a simple
|
|
* mock object for the 2D context. For all other elements, the call functions unchanged.
|
|
*
|
|
* The override is only done if there is no 2D context already present.
|
|
* This allows for normal running in a browser, and for node.js the usage of 'canvas'.
|
|
*
|
|
* @param {object} window - current global window object. This can possible come from module 'jsdom',
|
|
* when running under node.js.
|
|
*/
|
|
function mockify(window) {
|
|
var d = window.document;
|
|
var f = window.document.createElement;
|
|
|
|
// Check if 2D context already present. That happens either when running in a browser,
|
|
// or this is node.js with 'canvas' installed.
|
|
var ctx = d.createElement('canvas').getContext('2d');
|
|
if (ctx !== null && ctx !== undefined) {
|
|
//console.log('2D context is present, no need to override');
|
|
return;
|
|
}
|
|
|
|
window.document.createElement = function(param) {
|
|
if (param === 'canvas') {
|
|
if (canvasMock === undefined) {
|
|
canvasMock = f.call(d, 'canvas');
|
|
replaceCanvasContext(canvasMock);
|
|
}
|
|
return canvasMock;
|
|
} else {
|
|
return f.call(d, param);
|
|
}
|
|
};
|
|
}
|
|
|
|
module.exports = mockify;
|