This repository has been archived by the owner on Jul 29, 2019. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1.5k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Use mock canvas object replacing
canvas
(#3518)
* Use mock canvas object replacing `canvas` Fixes #3515. A mock canvas object is added to the unit tests, which makes usage of module `canvas` voluntary. The issue with `canvas` is that it requires an external dependency to `cairo`. This complicates setting up a develop environment for `vis.js` - Removed `canvas` from `package.json` - Added section to README.md with instructions on how to install `canvas` instead. * Removed debugger statements * Updates for review * Fixes for review
- Loading branch information
1 parent
f6445cd
commit 06b2623
Showing
6 changed files
with
118 additions
and
8 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,90 @@ | ||
/** | ||
* 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(){}, | ||
fillText: function(){}, | ||
restore: function(){}, | ||
beginPath: function(){}, | ||
moveTo: function(){}, | ||
lineTo: function(){}, | ||
closePath: function(){}, | ||
stroke: function(){}, | ||
translate: function(){}, | ||
scale: function(){}, | ||
rotate: 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} the 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; |