2012-08-10 15:14:56 +00:00
( function ( ) {
2015-04-23 09:47:23 +00:00
// var emptyImageCanvasData = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAfQAAAH0CAYAAADL1t+KAAAH7ElEQVR4nO3VMQ0AMAzAsPInvYHoMS2yEeTLHADge/M6AADYM3QACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIuMjH4b7osLFBAAAAAElFTkSuQmCC";
2012-08-10 15:14:56 +00:00
2016-09-10 13:14:23 +00:00
var CANVAS _SVG = '<?xml version="1.0" encoding="UTF-8" standalone="no" ?>\n<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">\n' +
2017-01-01 15:11:54 +00:00
'<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="600" height="600" viewBox="0 0 600 600" xml:space="preserve">\n<desc>Created with Fabric.js ' + fabric . version + '</desc>\n<defs>\n</defs>\n</svg>' ;
2013-08-27 18:32:15 +00:00
2016-09-10 13:14:23 +00:00
var CANVAS _SVG _VIEWBOX = '<?xml version="1.0" encoding="UTF-8" standalone="no" ?>\n<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">\n' +
2017-01-01 15:11:54 +00:00
'<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="600" height="600" viewBox="100 100 300 300" xml:space="preserve">\n<desc>Created with Fabric.js ' + fabric . version + '</desc>\n<defs>\n</defs>\n</svg>' ;
2013-08-27 18:32:15 +00:00
2017-08-29 20:23:42 +00:00
var PATH _JSON = '{"version":"' + fabric . version + '","objects": [{"type": "path", "version":"' + fabric . version + '", "originX": "left", "originY": "top", "left": 268, "top": 266, "width": 51, "height": 49,' +
2016-09-10 13:14:23 +00:00
' "fill": "rgb(0,0,0)", "stroke": null, "strokeWidth": 1, "scaleX": 1, "scaleY": 1, ' +
'"angle": 0, "flipX": false, "flipY": false, "opacity": 1, "path": [["M", 18.511, 13.99],' +
' ["c", 0, 0, -2.269, -4.487, -12.643, 4.411], ["c", 0, 0, 4.824, -14.161, 19.222, -9.059],' +
' ["l", 0.379, -2.1], ["c", -0.759, -0.405, -1.375, -1.139, -1.645, -2.117], ["c", -0.531, ' +
'-1.864, 0.371, -3.854, 1.999, -4.453], ["c", 0.312, -0.118, 0.633, -0.169, 0.953, -0.169], ' +
'["c", 1.299, 0, 2.514, 0.953, 2.936, 2.455], ["c", 0.522, 1.864, -0.372, 3.854, -1.999, ' +
'4.453], ["c", -0.229, 0.084, -0.464, 0.127, -0.692, 0.152], ["l", -0.379, 2.37], ["c", ' +
'1.146, 0.625, 2.024, 1.569, 2.674, 2.758], ["c", 3.213, 2.514, 8.561, 4.184, 11.774, -8.232],' +
' ["c", 0, 0, 0.86, 16.059, -12.424, 14.533], ["c", 0.008, 2.859, 0.615, 5.364, -0.076, 8.224],' +
' ["c", 8.679, 3.146, 15.376, 14.389, 17.897, 18.168], ["l", 2.497, -2.151], ["l", 1.206, 1.839],' +
' ["l", -3.889, 3.458], ["C", 46.286, 48.503, 31.036, 32.225, 22.72, 35.81], ["c", -1.307, 2.851,' +
' -3.56, 6.891, -7.481, 8.848], ["c", -4.689, 2.336, -9.084, -0.802, -11.277, -2.868], ["l",' +
' -1.948, 3.104], ["l", -1.628, -1.333], ["l", 3.138, -4.689], ["c", 0.025, 0, 9, 1.932, 9, 1.932], ' +
'["c", 0.877, -9.979, 2.893, -12.905, 4.942, -15.621], ["C", 17.878, 21.775, 18.713, 17.397, 18.511, ' +
2013-11-03 12:09:49 +00:00
'13.99], ["z", null]]}], "background": "#ff5555", "overlay":"rgba(0,0,0,0.2)"}' ;
2012-08-10 15:14:56 +00:00
2017-08-29 20:23:42 +00:00
var PATH _WITHOUT _DEFAULTS _JSON = '{"version":"' + fabric . version + '","objects": [{"type": "path", "version":"' + fabric . version + '", "left": 268, "top": 266, "width": 51, "height": 49, "path": [["M", 18.511, 13.99],' +
2017-02-23 01:10:54 +00:00
' ["c", 0, 0, -2.269, -4.487, -12.643, 4.411], ["c", 0, 0, 4.824, -14.161, 19.222, -9.059],' +
' ["l", 0.379, -2.1], ["c", -0.759, -0.405, -1.375, -1.139, -1.645, -2.117], ["c", -0.531, ' +
'-1.864, 0.371, -3.854, 1.999, -4.453], ["c", 0.312, -0.118, 0.633, -0.169, 0.953, -0.169], ' +
'["c", 1.299, 0, 2.514, 0.953, 2.936, 2.455], ["c", 0.522, 1.864, -0.372, 3.854, -1.999, ' +
'4.453], ["c", -0.229, 0.084, -0.464, 0.127, -0.692, 0.152], ["l", -0.379, 2.37], ["c", ' +
'1.146, 0.625, 2.024, 1.569, 2.674, 2.758], ["c", 3.213, 2.514, 8.561, 4.184, 11.774, -8.232],' +
' ["c", 0, 0, 0.86, 16.059, -12.424, 14.533], ["c", 0.008, 2.859, 0.615, 5.364, -0.076, 8.224],' +
' ["c", 8.679, 3.146, 15.376, 14.389, 17.897, 18.168], ["l", 2.497, -2.151], ["l", 1.206, 1.839],' +
' ["l", -3.889, 3.458], ["C", 46.286, 48.503, 31.036, 32.225, 22.72, 35.81], ["c", -1.307, 2.851,' +
' -3.56, 6.891, -7.481, 8.848], ["c", -4.689, 2.336, -9.084, -0.802, -11.277, -2.868], ["l",' +
' -1.948, 3.104], ["l", -1.628, -1.333], ["l", 3.138, -4.689], ["c", 0.025, 0, 9, 1.932, 9, 1.932], ' +
'["c", 0.877, -9.979, 2.893, -12.905, 4.942, -15.621], ["C", 17.878, 21.775, 18.713, 17.397, 18.511, ' +
'13.99], ["z", null]]}], "background": "#ff5555","overlay": "rgba(0,0,0,0.2)"}' ;
2017-08-29 20:23:42 +00:00
var PATH _DATALESS _JSON = '{"version":"' + fabric . version + '","objects":[{"type":"path","version":"' + fabric . version + '","originX":"left","originY":"top","left":100,"top":100,"width":200,"height":200,"fill":"rgb(0,0,0)",' +
2018-05-29 08:28:02 +00:00
'"stroke":null,"strokeWidth":1,"strokeDashArray":null,"strokeLineCap":"butt","strokeLineJoin":"miter","strokeMiterLimit":4,' +
2016-09-10 13:14:23 +00:00
'"scaleX":1,"scaleY":1,"angle":0,"flipX":false,"flipY":false,"opacity":1,' +
2017-09-17 20:47:35 +00:00
'"shadow":null,"visible":true,"clipTo":null,"backgroundColor":"","fillRule":"nonzero","paintFirst":"fill","globalCompositeOperation":"source-over","transformMatrix":null,"skewX":0,"skewY":0,"sourcePath":"http://example.com/"}]}' ;
2012-08-10 15:14:56 +00:00
2017-08-29 20:23:42 +00:00
var RECT _JSON = '{"version":"' + fabric . version + '","objects":[{"type":"rect","version":"' + fabric . version + '","originX":"left","originY":"top","left":0,"top":0,"width":10,"height":10,"fill":"rgb(0,0,0)",' +
2018-05-29 08:28:02 +00:00
'"stroke":null,"strokeWidth":1,"strokeDashArray":null,"strokeLineCap":"butt","strokeLineJoin":"miter","strokeMiterLimit":4,' +
2016-09-10 13:14:23 +00:00
'"scaleX":1,"scaleY":1,"angle":0,"flipX":false,"flipY":false,"opacity":1,' +
2017-09-17 20:47:35 +00:00
'"shadow":null,"visible":true,"clipTo":null,"backgroundColor":"","fillRule":"nonzero","paintFirst":"fill","globalCompositeOperation":"source-over","transformMatrix":null,"skewX":0,"skewY":0,"rx":0,"ry":0}],"background":"#ff5555","overlay":"rgba(0,0,0,0.2)"}' ;
2012-08-10 15:14:56 +00:00
2017-08-29 20:23:42 +00:00
var RECT _JSON _WITH _PADDING = '{"version":"' + fabric . version + '","objects":[{"type":"rect","version":"' + fabric . version + '","originX":"left","originY":"top","left":0,"top":0,"width":10,"height":20,"fill":"rgb(0,0,0)",' +
2018-05-29 08:28:02 +00:00
'"stroke":null,"strokeWidth":1,"strokeDashArray":null,"strokeLineCap":"butt","strokeLineJoin":"miter","strokeMiterLimit":4,' +
2016-09-10 13:14:23 +00:00
'"scaleX":1,"scaleY":1,"angle":0,"flipX":false,"flipY":false,"opacity":1,' +
2017-09-17 20:47:35 +00:00
'"shadow":null,"visible":true,"clipTo":null,"backgroundColor":"","fillRule":"nonzero","paintFirst":"fill","globalCompositeOperation":"source-over","transformMatrix":null,"skewX":0,"skewY":0,"rx":0,"ry":0,"padding":123,"foo":"bar"}]}' ;
2012-11-30 22:46:09 +00:00
2013-11-03 12:09:49 +00:00
function getAbsolutePath ( path ) {
var isAbsolute = /^https?:/ . test ( path ) ;
2016-12-28 12:22:23 +00:00
if ( isAbsolute ) { return path ; } ;
2013-11-03 12:09:49 +00:00
var imgEl = _createImageElement ( ) ;
imgEl . src = path ;
var src = imgEl . src ;
imgEl = null ;
return src ;
}
2017-01-01 17:07:56 +00:00
var IMG _SRC = fabric . isLikelyNode ? ( _ _dirname + '/../fixtures/test_image.gif' ) : getAbsolutePath ( '../fixtures/test_image.gif' ) ,
2013-11-03 12:09:49 +00:00
IMG _WIDTH = 276 ,
IMG _HEIGHT = 110 ;
var REFERENCE _IMG _OBJECT = {
2017-08-29 20:23:42 +00:00
'version' : fabric . version ,
2014-09-21 18:55:00 +00:00
'type' : 'image' ,
'originX' : 'left' ,
'originY' : 'top' ,
'left' : 0 ,
'top' : 0 ,
'width' : IMG _WIDTH , // node-canvas doesn't seem to allow setting width/height on image objects
'height' : IMG _HEIGHT , // or does it now?
'fill' : 'rgb(0,0,0)' ,
'stroke' : null ,
2015-11-12 23:45:48 +00:00
'strokeWidth' : 0 ,
2014-09-21 18:55:00 +00:00
'strokeDashArray' : null ,
'strokeLineCap' : 'butt' ,
'strokeLineJoin' : 'miter' ,
2018-05-29 08:28:02 +00:00
'strokeMiterLimit' : 4 ,
2014-09-21 18:55:00 +00:00
'scaleX' : 1 ,
'scaleY' : 1 ,
'angle' : 0 ,
'flipX' : false ,
'flipY' : false ,
'opacity' : 1 ,
2016-08-22 08:43:17 +00:00
'src' : IMG _SRC ,
2014-09-21 18:55:00 +00:00
'shadow' : null ,
'visible' : true ,
'backgroundColor' : '' ,
'clipTo' : null ,
'filters' : [ ] ,
'fillRule' : 'nonzero' ,
2017-09-17 20:47:35 +00:00
'paintFirst' : 'fill' ,
2015-07-19 23:28:38 +00:00
'globalCompositeOperation' : 'source-over' ,
2015-07-20 17:53:38 +00:00
'transformMatrix' : null ,
'crossOrigin' : '' ,
2015-09-02 19:28:57 +00:00
'skewX' : 0 ,
'skewY' : 0 ,
2017-07-03 10:20:10 +00:00
'cropX' : 0 ,
'cropY' : 0
2013-11-03 12:09:49 +00:00
} ;
function _createImageElement ( ) {
2017-11-19 19:00:01 +00:00
return fabric . document . createElement ( 'img' ) ;
2013-11-03 12:09:49 +00:00
}
function _createImageObject ( width , height , callback ) {
var elImage = _createImageElement ( ) ;
elImage . width = width ;
elImage . height = height ;
setSrc ( elImage , IMG _SRC , function ( ) {
callback ( new fabric . Image ( elImage ) ) ;
} ) ;
}
function createImageObject ( callback ) {
2013-11-20 19:41:13 +00:00
return _createImageObject ( IMG _WIDTH , IMG _HEIGHT , callback ) ;
2013-11-03 12:09:49 +00:00
}
function setSrc ( img , src , callback ) {
2017-11-19 19:00:01 +00:00
img . onload = callback ;
img . src = src ;
2013-11-03 12:09:49 +00:00
}
function fixImageDimension ( imgObj ) {
// workaround for node-canvas sometimes producing images with width/height and sometimes not
if ( imgObj . width === 0 ) {
imgObj . width = IMG _WIDTH ;
}
if ( imgObj . height === 0 ) {
imgObj . height = IMG _HEIGHT ;
}
}
2012-08-10 15:14:56 +00:00
// force creation of static canvas
// TODO: fix this
2017-11-19 19:00:01 +00:00
var canvas = this . canvas = new fabric . StaticCanvas ( null , { enableRetinaScaling : false , width : 600 , height : 600 } ) ;
var canvas2 = this . canvas2 = new fabric . StaticCanvas ( null , { enableRetinaScaling : false , width : 600 , height : 600 } ) ;
2012-08-10 15:14:56 +00:00
var lowerCanvasEl = canvas . lowerCanvasEl ;
function makeRect ( options ) {
var defaultOptions = { width : 10 , height : 10 } ;
return new fabric . Rect ( fabric . util . object . extend ( defaultOptions , options || { } ) ) ;
}
QUnit . module ( 'fabric.StaticCanvas' , {
2017-09-17 09:44:57 +00:00
beforeEach : function ( ) {
2012-08-10 15:14:56 +00:00
canvas . clear ( ) ;
canvas . backgroundColor = fabric . StaticCanvas . prototype . backgroundColor ;
2016-06-05 15:08:19 +00:00
canvas . backgroundImage = fabric . StaticCanvas . prototype . backgroundImage ;
2013-11-03 12:09:49 +00:00
canvas . overlayColor = fabric . StaticCanvas . prototype . overlayColor ;
2016-08-07 15:00:58 +00:00
canvas . viewportTransform = [ 1 , 0 , 0 , 1 , 0 , 0 ] ;
2012-08-10 15:14:56 +00:00
canvas . calcOffset ( ) ;
}
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'initialProperties' , function ( assert ) {
assert . ok ( 'backgroundColor' in canvas ) ;
assert . ok ( 'overlayColor' in canvas ) ;
assert . ok ( 'backgroundImage' in canvas ) ;
assert . ok ( 'overlayImage' in canvas ) ;
assert . ok ( 'clipTo' in canvas ) ;
assert . ok ( 'includeDefaultValues' in canvas ) ;
assert . ok ( 'stateful' in canvas ) ;
assert . ok ( 'renderOnAddRemove' in canvas ) ;
assert . ok ( 'controlsAboveOverlay' in canvas ) ;
assert . ok ( 'allowTouchScrolling' in canvas ) ;
assert . ok ( 'imageSmoothingEnabled' in canvas ) ;
assert . ok ( 'backgroundVpt' in canvas ) ;
assert . ok ( 'overlayVpt' in canvas ) ;
2014-07-17 11:28:55 +00:00
2017-09-17 09:44:57 +00:00
assert . equal ( canvas . includeDefaultValues , true ) ;
assert . equal ( canvas . stateful , false ) ;
assert . equal ( canvas . renderOnAddRemove , true ) ;
assert . equal ( canvas . controlsAboveOverlay , false ) ;
assert . equal ( canvas . allowTouchScrolling , false ) ;
assert . equal ( canvas . imageSmoothingEnabled , true ) ;
assert . equal ( canvas . backgroundVpt , true ) ;
assert . equal ( canvas . overlayVpt , true ) ;
2014-07-17 11:28:55 +00:00
2017-09-17 09:44:57 +00:00
assert . notStrictEqual ( canvas . viewportTransform , canvas2 . viewportTransform ) ;
2012-08-10 15:14:56 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'getObjects' , function ( assert ) {
assert . ok ( typeof canvas . getObjects === 'function' , 'should respond to `getObjects` method' ) ;
assert . deepEqual ( [ ] , canvas . getObjects ( ) , 'should return empty array for `getObjects` when empty' ) ;
assert . equal ( canvas . getObjects ( ) . length , 0 , 'should have a 0 length when empty' ) ;
2012-08-10 15:14:56 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'getObjects with type' , function ( assert ) {
2013-11-09 13:50:30 +00:00
var rect = new fabric . Rect ( { width : 10 , height : 20 } ) ;
var circle = new fabric . Circle ( { radius : 30 } ) ;
canvas . add ( rect , circle ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( canvas . getObjects ( ) . length , 2 , 'should have length=2 initially' ) ;
2013-11-09 13:50:30 +00:00
2017-09-17 09:44:57 +00:00
assert . deepEqual ( canvas . getObjects ( 'rect' ) , [ rect ] , 'should return rect only' ) ;
assert . deepEqual ( canvas . getObjects ( 'circle' ) , [ circle ] , 'should return circle only' ) ;
2013-11-09 13:50:30 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'getElement' , function ( assert ) {
assert . ok ( typeof canvas . getElement === 'function' , 'should respond to `getElement` method' ) ;
assert . equal ( canvas . getElement ( ) , lowerCanvasEl , 'should return a proper element' ) ;
2012-08-10 15:14:56 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'item' , function ( assert ) {
2012-08-10 15:14:56 +00:00
var rect = makeRect ( ) ;
2017-09-17 09:44:57 +00:00
assert . ok ( typeof canvas . item === 'function' , 'should respond to item' ) ;
2012-08-10 15:14:56 +00:00
canvas . add ( rect ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( canvas . item ( 0 ) , rect , 'should return proper item' ) ;
2012-08-10 15:14:56 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'calcOffset' , function ( assert ) {
assert . ok ( typeof canvas . calcOffset === 'function' , 'should respond to `calcOffset`' ) ;
assert . equal ( canvas . calcOffset ( ) , canvas , 'should be chainable' ) ;
2012-08-10 15:14:56 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'add' , function ( assert ) {
2013-12-07 10:07:46 +00:00
var rect1 = makeRect ( ) ,
rect2 = makeRect ( ) ,
rect3 = makeRect ( ) ,
rect4 = makeRect ( ) ;
2012-08-10 15:14:56 +00:00
2017-09-17 09:44:57 +00:00
assert . ok ( typeof canvas . add === 'function' ) ;
assert . equal ( canvas . add ( rect1 ) , canvas , 'should be chainable' ) ;
assert . strictEqual ( canvas . item ( 0 ) , rect1 ) ;
2012-08-10 15:14:56 +00:00
2013-12-07 10:07:46 +00:00
canvas . add ( rect2 , rect3 , rect4 ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( canvas . getObjects ( ) . length , 4 , 'should support multiple arguments' ) ;
2013-12-07 10:07:46 +00:00
2017-09-17 09:44:57 +00:00
assert . strictEqual ( canvas . item ( 1 ) , rect2 ) ;
assert . strictEqual ( canvas . item ( 2 ) , rect3 ) ;
assert . strictEqual ( canvas . item ( 3 ) , rect4 ) ;
2012-08-10 15:14:56 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'add renderOnAddRemove disabled' , function ( assert ) {
2013-08-07 19:01:45 +00:00
var rect = makeRect ( ) ,
originalRenderOnAddition ,
renderAllCount = 0 ;
function countRenderAll ( ) {
renderAllCount ++ ;
}
originalRenderOnAddition = canvas . renderOnAddRemove ;
canvas . renderOnAddRemove = false ;
canvas . on ( 'after:render' , countRenderAll ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( canvas . add ( rect ) , canvas , 'should be chainable' ) ;
assert . equal ( renderAllCount , 0 ) ;
2013-08-07 19:01:45 +00:00
2017-09-17 09:44:57 +00:00
assert . equal ( canvas . item ( 0 ) , rect ) ;
2013-08-07 19:01:45 +00:00
canvas . add ( makeRect ( ) , makeRect ( ) , makeRect ( ) ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( canvas . getObjects ( ) . length , 4 , 'should support multiple arguments' ) ;
assert . equal ( renderAllCount , 0 ) ;
2013-08-07 19:01:45 +00:00
canvas . renderAll ( ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( renderAllCount , 1 ) ;
2013-08-07 19:01:45 +00:00
canvas . off ( 'after:render' , countRenderAll ) ;
canvas . renderOnAddRemove = originalRenderOnAddition ;
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'object:added' , function ( assert ) {
2013-12-07 10:07:46 +00:00
var objectsAdded = [ ] ;
canvas . on ( 'object:added' , function ( e ) {
objectsAdded . push ( e . target ) ;
} ) ;
var rect = new fabric . Rect ( { width : 10 , height : 20 } ) ;
canvas . add ( rect ) ;
2017-09-17 09:44:57 +00:00
assert . deepEqual ( objectsAdded [ 0 ] , rect ) ;
2013-12-07 10:07:46 +00:00
var circle1 = new fabric . Circle ( ) ,
circle2 = new fabric . Circle ( ) ;
canvas . add ( circle1 , circle2 ) ;
2017-09-17 09:44:57 +00:00
assert . strictEqual ( objectsAdded [ 1 ] , circle1 ) ;
assert . strictEqual ( objectsAdded [ 2 ] , circle2 ) ;
2013-12-07 10:07:46 +00:00
var circle3 = new fabric . Circle ( ) ;
canvas . insertAt ( circle3 , 2 ) ;
2017-09-17 09:44:57 +00:00
assert . strictEqual ( objectsAdded [ 3 ] , circle3 ) ;
2013-12-07 10:07:46 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'insertAt' , function ( assert ) {
2012-08-10 15:14:56 +00:00
var rect1 = makeRect ( ) ,
rect2 = makeRect ( ) ;
canvas . add ( rect1 , rect2 ) ;
2017-09-17 09:44:57 +00:00
assert . ok ( typeof canvas . insertAt === 'function' , 'should respond to `insertAt` method' ) ;
2012-08-10 15:14:56 +00:00
var rect = makeRect ( ) ;
canvas . insertAt ( rect , 1 ) ;
2017-09-17 09:44:57 +00:00
assert . strictEqual ( canvas . item ( 1 ) , rect ) ;
2012-08-10 15:14:56 +00:00
canvas . insertAt ( rect , 2 ) ;
2017-09-17 09:44:57 +00:00
assert . strictEqual ( canvas . item ( 2 ) , rect ) ;
assert . equal ( canvas . insertAt ( rect , 2 ) , canvas , 'should be chainable' ) ;
2012-08-10 15:14:56 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'insertAt renderOnAddRemove disabled' , function ( assert ) {
2013-08-07 19:01:45 +00:00
var rect1 = makeRect ( ) ,
rect2 = makeRect ( ) ,
originalRenderOnAddition ,
renderAllCount = 0 ;
function countRenderAll ( ) {
renderAllCount ++ ;
}
originalRenderOnAddition = canvas . renderOnAddRemove ;
canvas . renderOnAddRemove = false ;
canvas . on ( 'after:render' , countRenderAll ) ;
canvas . add ( rect1 , rect2 ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( renderAllCount , 0 ) ;
2013-08-07 19:01:45 +00:00
var rect = makeRect ( ) ;
canvas . insertAt ( rect , 1 ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( renderAllCount , 0 ) ;
2013-08-07 19:01:45 +00:00
2017-09-17 09:44:57 +00:00
assert . strictEqual ( canvas . item ( 1 ) , rect ) ;
2013-08-07 19:01:45 +00:00
canvas . insertAt ( rect , 2 ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( renderAllCount , 0 ) ;
2013-08-07 19:01:45 +00:00
canvas . renderAll ( ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( renderAllCount , 1 ) ;
2013-08-07 19:01:45 +00:00
canvas . off ( 'after:render' , countRenderAll ) ;
canvas . renderOnAddRemove = originalRenderOnAddition ;
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'remove' , function ( assert ) {
2013-12-07 10:07:46 +00:00
var rect1 = makeRect ( ) ,
rect2 = makeRect ( ) ,
rect3 = makeRect ( ) ,
rect4 = makeRect ( ) ;
canvas . add ( rect1 , rect2 , rect3 , rect4 ) ;
2017-09-17 09:44:57 +00:00
assert . ok ( typeof canvas . remove === 'function' ) ;
assert . equal ( canvas . remove ( rect1 ) , canvas , 'should be chainable' ) ;
assert . strictEqual ( canvas . item ( 0 ) , rect2 , 'should be second object' ) ;
2013-12-07 10:07:46 +00:00
canvas . remove ( rect2 , rect3 ) ;
2017-09-17 09:44:57 +00:00
assert . strictEqual ( canvas . item ( 0 ) , rect4 ) ;
2013-12-07 10:07:46 +00:00
canvas . remove ( rect4 ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( canvas . isEmpty ( ) , true , 'canvas should be empty' ) ;
2013-12-07 10:07:46 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'remove renderOnAddRemove disabled' , function ( assert ) {
2013-12-07 10:07:46 +00:00
var rect1 = makeRect ( ) ,
rect2 = makeRect ( ) ,
originalRenderOnAddition ,
renderAllCount = 0 ;
function countRenderAll ( ) {
renderAllCount ++ ;
}
originalRenderOnAddition = canvas . renderOnAddRemove ;
canvas . renderOnAddRemove = false ;
canvas . on ( 'after:render' , countRenderAll ) ;
canvas . add ( rect1 , rect2 ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( renderAllCount , 0 ) ;
2013-12-07 10:07:46 +00:00
2017-09-17 09:44:57 +00:00
assert . equal ( canvas . remove ( rect1 ) , canvas , 'should be chainable' ) ;
assert . equal ( renderAllCount , 0 ) ;
assert . strictEqual ( canvas . item ( 0 ) , rect2 , 'only second object should be left' ) ;
2013-12-07 10:07:46 +00:00
canvas . renderAll ( ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( renderAllCount , 1 ) ;
2013-12-07 10:07:46 +00:00
canvas . off ( 'after:render' , countRenderAll ) ;
canvas . renderOnAddRemove = originalRenderOnAddition ;
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'object:removed' , function ( assert ) {
2013-12-07 10:07:46 +00:00
var objectsRemoved = [ ] ;
canvas . on ( 'object:removed' , function ( e ) {
objectsRemoved . push ( e . target ) ;
} ) ;
var rect = new fabric . Rect ( { width : 10 , height : 20 } ) ,
circle1 = new fabric . Circle ( ) ,
circle2 = new fabric . Circle ( ) ;
canvas . add ( rect , circle1 , circle2 ) ;
2017-09-17 09:44:57 +00:00
assert . strictEqual ( canvas . item ( 0 ) , rect ) ;
assert . strictEqual ( canvas . item ( 1 ) , circle1 ) ;
assert . strictEqual ( canvas . item ( 2 ) , circle2 ) ;
2013-12-07 10:07:46 +00:00
canvas . remove ( rect ) ;
2017-09-17 09:44:57 +00:00
assert . strictEqual ( objectsRemoved [ 0 ] , rect ) ;
2013-12-07 10:07:46 +00:00
canvas . remove ( circle1 , circle2 ) ;
2017-09-17 09:44:57 +00:00
assert . strictEqual ( objectsRemoved [ 1 ] , circle1 ) ;
assert . strictEqual ( objectsRemoved [ 2 ] , circle2 ) ;
2013-12-07 10:07:46 +00:00
2017-09-17 09:44:57 +00:00
assert . equal ( canvas . isEmpty ( ) , true , 'canvas should be empty' ) ;
2013-12-07 10:07:46 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'clearContext' , function ( assert ) {
assert . ok ( typeof canvas . clearContext === 'function' ) ;
assert . equal ( canvas . clearContext ( canvas . contextContainer ) , canvas , 'should be chainable' ) ;
2012-08-10 15:14:56 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'clear' , function ( assert ) {
assert . ok ( typeof canvas . clear === 'function' ) ;
2016-10-01 12:23:27 +00:00
var bg = new fabric . Rect ( { width : 10 , height : 20 } ) ;
canvas . backgroundColor = '#FF0000' ;
canvas . overlayColor = '#FF0000' ;
canvas . backgroundImage = bg ;
canvas . overlayImage = bg ;
2017-09-17 09:44:57 +00:00
assert . equal ( canvas . clear ( ) , canvas , 'should be chainable' ) ;
assert . equal ( canvas . getObjects ( ) . length , 0 , 'clear remove all objects' ) ;
assert . equal ( canvas . backgroundColor , '' , 'clear remove background color' ) ;
assert . equal ( canvas . overlayColor , '' , 'clear remove overlay color' ) ;
assert . equal ( canvas . backgroundImage , null , 'clear remove bg image' ) ;
assert . equal ( canvas . overlayImage , null , 'clear remove overlay image' ) ;
2012-08-10 15:14:56 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'renderAll' , function ( assert ) {
assert . ok ( typeof canvas . renderAll === 'function' ) ;
assert . equal ( canvas , canvas . renderAll ( ) ) ;
2012-08-10 15:14:56 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'toDataURL' , function ( assert ) {
assert . ok ( typeof canvas . toDataURL === 'function' ) ;
2012-08-10 15:14:56 +00:00
if ( ! fabric . Canvas . supports ( 'toDataURL' ) ) {
2016-09-10 13:14:23 +00:00
window . alert ( 'toDataURL is not supported by this environment. Some of the tests can not be run.' ) ;
2012-08-10 15:14:56 +00:00
}
else {
2016-09-10 13:14:23 +00:00
var rect = new fabric . Rect ( { width : 100 , height : 100 , fill : 'red' , top : 0 , left : 0 } ) ;
2016-02-07 17:31:05 +00:00
canvas . add ( rect ) ;
2013-03-06 17:47:50 +00:00
var dataURL = canvas . toDataURL ( ) ;
2012-08-10 15:14:56 +00:00
// don't compare actual data url, as it is often browser-dependent
// this.assertIdentical(emptyImageCanvasData, canvas.toDataURL('png'));
2017-09-17 09:44:57 +00:00
assert . equal ( typeof dataURL , 'string' ) ;
assert . equal ( dataURL . substring ( 0 , 21 ) , 'data:image/png;base64' ) ;
2016-02-08 14:25:10 +00:00
//we can just compare that the dataUrl generated differs from the dataURl of an empty canvas.
2018-02-04 21:42:32 +00:00
assert . equal ( dataURL . substring ( 200 , 210 ) !== 'AAAAAAAAAA' , true ) ;
2012-08-10 15:14:56 +00:00
}
} ) ;
2018-02-10 12:12:00 +00:00
QUnit . test ( 'toDataURL with enableRetinaScaling: true and no multiplier' , function ( assert ) {
2018-02-04 21:42:32 +00:00
var done = assert . async ( ) ;
fabric . devicePixelRatio = 2 ;
var c = new fabric . StaticCanvas ( null , { enableRetinaScaling : true , width : 10 , height : 10 } ) ;
var dataUrl = c . toDataURL ( { enableRetinaScaling : true } ) ;
var img = fabric . document . createElement ( 'img' ) ;
img . onload = function ( ) {
assert . equal ( img . width , c . width * fabric . devicePixelRatio , 'output width is bigger' ) ;
assert . equal ( img . height , c . height * fabric . devicePixelRatio , 'output height is bigger' ) ;
fabric . devicePixelRatio = 1 ;
done ( ) ;
} ;
img . src = dataUrl ;
} ) ;
2018-02-10 12:12:00 +00:00
QUnit . test ( 'toDataURL with enableRetinaScaling: true and multiplier = 1' , function ( assert ) {
var done = assert . async ( ) ;
fabric . devicePixelRatio = 2 ;
var c = new fabric . StaticCanvas ( null , { enableRetinaScaling : true , width : 10 , height : 10 } ) ;
var dataUrl = c . toDataURL ( { enableRetinaScaling : true , multiplier : 1 } ) ;
var img = fabric . document . createElement ( 'img' ) ;
img . onload = function ( ) {
assert . equal ( img . width , c . width * fabric . devicePixelRatio , 'output width is bigger' ) ;
assert . equal ( img . height , c . height * fabric . devicePixelRatio , 'output height is bigger' ) ;
fabric . devicePixelRatio = 1 ;
done ( ) ;
} ;
img . src = dataUrl ;
} ) ;
QUnit . test ( 'toDataURL with enableRetinaScaling: true and multiplier = 3' , function ( assert ) {
var done = assert . async ( ) ;
fabric . devicePixelRatio = 2 ;
var c = new fabric . StaticCanvas ( null , { enableRetinaScaling : true , width : 10 , height : 10 } ) ;
var dataUrl = c . toDataURL ( { enableRetinaScaling : true , multiplier : 3 } ) ;
var img = fabric . document . createElement ( 'img' ) ;
img . onload = function ( ) {
assert . equal ( img . width , c . width * fabric . devicePixelRatio * 3 , 'output width is bigger by 6' ) ;
assert . equal ( img . height , c . height * fabric . devicePixelRatio * 3 , 'output height is bigger by 6' ) ;
fabric . devicePixelRatio = 1 ;
done ( ) ;
} ;
img . src = dataUrl ;
} ) ;
QUnit . test ( 'toDataURL with enableRetinaScaling: false and no multiplier' , function ( assert ) {
var done = assert . async ( ) ;
fabric . devicePixelRatio = 2 ;
var c = new fabric . StaticCanvas ( null , { enableRetinaScaling : true , width : 10 , height : 10 } ) ;
var dataUrl = c . toDataURL ( { enableRetinaScaling : false } ) ;
var img = fabric . document . createElement ( 'img' ) ;
img . onload = function ( ) {
assert . equal ( img . width , c . width , 'output width is not bigger' ) ;
assert . equal ( img . height , c . height , 'output height is not bigger' ) ;
fabric . devicePixelRatio = 1 ;
done ( ) ;
} ;
img . src = dataUrl ;
} ) ;
QUnit . test ( 'toDataURL with enableRetinaScaling: false and multiplier = 1' , function ( assert ) {
var done = assert . async ( ) ;
fabric . devicePixelRatio = 2 ;
var c = new fabric . StaticCanvas ( null , { enableRetinaScaling : true , width : 10 , height : 10 } ) ;
var dataUrl = c . toDataURL ( { enableRetinaScaling : false , multiplier : 1 } ) ;
var img = fabric . document . createElement ( 'img' ) ;
img . onload = function ( ) {
assert . equal ( img . width , c . width , 'output width is not bigger' ) ;
assert . equal ( img . height , c . height , 'output height is not bigger' ) ;
fabric . devicePixelRatio = 1 ;
done ( ) ;
} ;
img . src = dataUrl ;
} ) ;
QUnit . test ( 'toDataURL with enableRetinaScaling: false and multiplier = 3' , function ( assert ) {
var done = assert . async ( ) ;
fabric . devicePixelRatio = 2 ;
var c = new fabric . StaticCanvas ( null , { enableRetinaScaling : true , width : 10 , height : 10 } ) ;
var dataUrl = c . toDataURL ( { enableRetinaScaling : false , multiplier : 3 } ) ;
var img = fabric . document . createElement ( 'img' ) ;
img . onload = function ( ) {
assert . equal ( img . width , c . width * 3 , 'output width is bigger by 3' ) ;
assert . equal ( img . height , c . height * 3 , 'output height is bigger by 3' ) ;
fabric . devicePixelRatio = 1 ;
done ( ) ;
} ;
img . src = dataUrl ;
} ) ;
2018-02-04 21:42:32 +00:00
QUnit . test ( 'toDataURL with enableRetinaScaling: false' , function ( assert ) {
var done = assert . async ( ) ;
fabric . devicePixelRatio = 2 ;
var c = new fabric . StaticCanvas ( null , { enableRetinaScaling : true , width : 10 , height : 10 } ) ;
var dataUrl = c . toDataURL ( { enableRetinaScaling : false } ) ;
var img = fabric . document . createElement ( 'img' ) ;
img . onload = function ( ) {
assert . equal ( img . width , c . width , 'output width is bigger' ) ;
assert . equal ( img . height , c . height , 'output height is bigger' ) ;
fabric . devicePixelRatio = 1 ;
done ( ) ;
} ;
img . src = dataUrl ;
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'toDataURL jpg' , function ( assert ) {
2013-09-14 16:44:44 +00:00
if ( ! fabric . Canvas . supports ( 'toDataURL' ) ) {
2016-09-10 13:14:23 +00:00
window . alert ( 'toDataURL is not supported by this environment. Some of the tests can not be run.' ) ;
2013-09-14 16:44:44 +00:00
}
else {
try {
var dataURL = canvas . toDataURL ( { format : 'jpg' } ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( dataURL . substring ( 0 , 22 ) , 'data:image/jpeg;base64' ) ;
2013-09-14 16:44:44 +00:00
}
// node-canvas does not support jpeg data urls
2016-09-10 13:14:23 +00:00
catch ( err ) {
2017-09-17 09:44:57 +00:00
assert . ok ( true ) ;
2013-09-14 16:44:44 +00:00
}
}
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'toDataURL cropping' , function ( assert ) {
2017-12-31 08:51:07 +00:00
var done = assert . async ( ) ;
2017-09-17 09:44:57 +00:00
assert . ok ( typeof canvas . toDataURL === 'function' ) ;
2016-10-11 09:05:20 +00:00
if ( ! fabric . Canvas . supports ( 'toDataURL' ) ) {
window . alert ( 'toDataURL is not supported by this environment. Some of the tests can not be run.' ) ;
2017-12-31 08:51:07 +00:00
done ( ) ;
2016-10-11 09:05:20 +00:00
}
else {
var croppingWidth = 75 ,
croppingHeight = 50 ,
dataURL = canvas . toDataURL ( { width : croppingWidth , height : croppingHeight } ) ;
fabric . Image . fromURL ( dataURL , function ( img ) {
2017-09-17 09:44:57 +00:00
assert . equal ( img . width , croppingWidth , 'Width of exported image should correspond to cropping width' ) ;
assert . equal ( img . height , croppingHeight , 'Height of exported image should correspond to cropping height' ) ;
2017-12-31 08:51:07 +00:00
done ( ) ;
2016-10-11 09:05:20 +00:00
} ) ;
}
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'centerObjectH' , function ( assert ) {
assert . ok ( typeof canvas . centerObjectH === 'function' ) ;
2012-08-10 15:14:56 +00:00
var rect = makeRect ( { left : 102 , top : 202 } ) ;
canvas . add ( rect ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( canvas . centerObjectH ( rect ) , canvas , 'should be chainable' ) ;
assert . equal ( rect . getCenterPoint ( ) . x , canvas . width / 2 , 'object\'s "center.y" property should correspond to canvas element\'s center' ) ;
2016-06-11 12:10:20 +00:00
canvas . setZoom ( 4 ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( rect . getCenterPoint ( ) . x , canvas . height / 2 , 'object\'s "center.x" property should correspond to canvas element\'s center when canvas is transformed' ) ;
2016-08-07 15:00:58 +00:00
canvas . setZoom ( 1 ) ;
2012-08-10 15:14:56 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'centerObjectV' , function ( assert ) {
assert . ok ( typeof canvas . centerObjectV === 'function' ) ;
2012-08-10 15:14:56 +00:00
var rect = makeRect ( { left : 102 , top : 202 } ) ;
canvas . add ( rect ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( canvas . centerObjectV ( rect ) , canvas , 'should be chainable' ) ;
assert . equal ( rect . getCenterPoint ( ) . y , canvas . height / 2 , 'object\'s "center.y" property should correspond to canvas element\'s center' ) ;
2016-06-11 12:10:20 +00:00
canvas . setZoom ( 2 ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( rect . getCenterPoint ( ) . y , canvas . height / 2 , 'object\'s "center.y" property should correspond to canvas element\'s center when canvas is transformed' ) ;
2016-06-11 12:10:20 +00:00
2012-08-10 15:14:56 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'centerObject' , function ( assert ) {
assert . ok ( typeof canvas . centerObject === 'function' ) ;
2012-08-10 15:14:56 +00:00
var rect = makeRect ( { left : 102 , top : 202 } ) ;
canvas . add ( rect ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( canvas . centerObject ( rect ) , canvas , 'should be chainable' ) ;
2012-08-10 15:14:56 +00:00
2017-09-17 09:44:57 +00:00
assert . equal ( rect . getCenterPoint ( ) . y , canvas . height / 2 , 'object\'s "center.y" property should correspond to canvas element\'s center' ) ;
assert . equal ( rect . getCenterPoint ( ) . x , canvas . height / 2 , 'object\'s "center.x" property should correspond to canvas element\'s center' ) ;
2016-06-11 12:10:20 +00:00
canvas . setZoom ( 4 ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( rect . getCenterPoint ( ) . y , canvas . height / 2 , 'object\'s "center.y" property should correspond to canvas element\'s center when canvas is transformed' ) ;
assert . equal ( rect . getCenterPoint ( ) . x , canvas . height / 2 , 'object\'s "center.x" property should correspond to canvas element\'s center when canvas is transformed' ) ;
2016-08-07 15:00:58 +00:00
canvas . setZoom ( 1 ) ;
2016-06-11 12:10:20 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'viewportCenterObjectH' , function ( assert ) {
assert . ok ( typeof canvas . viewportCenterObjectH === 'function' ) ;
2016-06-11 12:10:20 +00:00
var rect = makeRect ( { left : 102 , top : 202 } ) , pan = 10 ;
canvas . viewportTransform = [ 1 , 0 , 0 , 1 , 0 , 0 ] ;
canvas . add ( rect ) ;
var oldY = rect . top ;
2017-09-17 09:44:57 +00:00
assert . equal ( canvas . viewportCenterObjectH ( rect ) , canvas , 'should be chainable' ) ;
assert . equal ( rect . getCenterPoint ( ) . x , canvas . width / 2 , 'object\'s "center.x" property should correspond to canvas element\'s center when canvas is not transformed' ) ;
assert . equal ( rect . top , oldY , 'object\'s "top" should not change' ) ;
2016-06-11 12:10:20 +00:00
canvas . setZoom ( 2 ) ;
canvas . viewportCenterObjectH ( rect ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( rect . getCenterPoint ( ) . x , canvas . width / ( 2 * canvas . getZoom ( ) ) , 'object\'s "center.x" property should correspond to viewport center' ) ;
assert . equal ( rect . top , oldY , 'object\'s "top" should not change' ) ;
2016-06-11 12:10:20 +00:00
canvas . absolutePan ( { x : pan , y : pan } ) ;
canvas . viewportCenterObjectH ( rect ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( rect . getCenterPoint ( ) . x , ( canvas . width / 2 + pan ) / canvas . getZoom ( ) , 'object\'s "center.x" property should correspond to viewport center' ) ;
assert . equal ( rect . top , oldY , 'object\'s "top" should not change' ) ;
2016-06-11 12:10:20 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'viewportCenterObjectV' , function ( assert ) {
assert . ok ( typeof canvas . viewportCenterObjectV === 'function' ) ;
2016-06-11 12:10:20 +00:00
var rect = makeRect ( { left : 102 , top : 202 } ) , pan = 10 ;
canvas . viewportTransform = [ 1 , 0 , 0 , 1 , 0 , 0 ] ;
canvas . add ( rect ) ;
var oldX = rect . left ;
2017-09-17 09:44:57 +00:00
assert . equal ( canvas . viewportCenterObjectV ( rect ) , canvas , 'should be chainable' ) ;
assert . equal ( rect . getCenterPoint ( ) . y , canvas . height / 2 , 'object\'s "center.y" property should correspond to canvas element\'s center when canvas is not transformed' ) ;
assert . equal ( rect . left , oldX , 'x position did not change' ) ;
2016-06-11 12:10:20 +00:00
canvas . setZoom ( 2 ) ;
canvas . viewportCenterObjectV ( rect ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( rect . getCenterPoint ( ) . y , canvas . height / ( 2 * canvas . getZoom ( ) ) , 'object\'s "center.y" property should correspond to viewport center' ) ;
assert . equal ( rect . left , oldX , 'x position did not change' ) ;
2016-06-11 12:10:20 +00:00
canvas . absolutePan ( { x : pan , y : pan } ) ;
canvas . viewportCenterObjectV ( rect ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( rect . getCenterPoint ( ) . y , ( canvas . height / 2 + pan ) / canvas . getZoom ( ) , 'object\'s "top" property should correspond to viewport center' ) ;
assert . equal ( rect . left , oldX , 'x position did not change' ) ;
2016-06-11 12:10:20 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'viewportCenterObject' , function ( assert ) {
assert . ok ( typeof canvas . viewportCenterObject === 'function' ) ;
2016-06-11 12:10:20 +00:00
var rect = makeRect ( { left : 102 , top : 202 } ) , pan = 10 ;
canvas . viewportTransform = [ 1 , 0 , 0 , 1 , 0 , 0 ] ;
canvas . add ( rect ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( canvas . viewportCenterObject ( rect ) , canvas , 'should be chainable' ) ;
assert . equal ( rect . getCenterPoint ( ) . y , canvas . height / 2 , 'object\'s "center.y" property should correspond to canvas element\'s center when canvas is not transformed' ) ;
assert . equal ( rect . getCenterPoint ( ) . x , canvas . width / 2 , 'object\'s "center.x" property should correspond to canvas element\'s center when canvas is not transformed' ) ;
2016-06-11 12:10:20 +00:00
canvas . setZoom ( 2 ) ;
canvas . viewportCenterObject ( rect ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( rect . getCenterPoint ( ) . y , canvas . height / ( 2 * canvas . getZoom ( ) ) , 'object\'s "center.y" property should correspond to viewport center' ) ;
assert . equal ( rect . getCenterPoint ( ) . x , canvas . width / ( 2 * canvas . getZoom ( ) ) , 'object\'s "center.x" property should correspond to viewport center' ) ;
2016-06-11 12:10:20 +00:00
canvas . absolutePan ( { x : pan , y : pan } ) ;
canvas . viewportCenterObject ( rect ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( rect . getCenterPoint ( ) . y , ( canvas . height / 2 + pan ) / canvas . getZoom ( ) , 'object\'s "center.y" property should correspond to viewport center' ) ;
assert . equal ( rect . getCenterPoint ( ) . x , ( canvas . width / 2 + pan ) / canvas . getZoom ( ) , 'object\'s "center.x" property should correspond to viewport center' ) ;
2016-06-11 12:10:20 +00:00
canvas . viewportTransform = [ 1 , 0 , 0 , 1 , 0 , 0 ] ;
2012-08-10 15:14:56 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'straightenObject' , function ( assert ) {
assert . ok ( typeof canvas . straightenObject === 'function' ) ;
2013-11-20 19:41:13 +00:00
var rect = makeRect ( { angle : 10 } ) ;
2012-08-10 15:14:56 +00:00
canvas . add ( rect ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( canvas . straightenObject ( rect ) , canvas , 'should be chainable' ) ;
assert . equal ( rect . get ( 'angle' ) , 0 , 'angle should be coerced to 0 (from 10)' ) ;
2012-08-10 15:14:56 +00:00
2017-08-13 18:49:39 +00:00
rect . rotate ( '60' ) ;
2012-08-10 15:14:56 +00:00
canvas . straightenObject ( rect ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( rect . get ( 'angle' ) , 90 , 'angle should be coerced to 90 (from 60)' ) ;
2012-08-10 15:14:56 +00:00
2017-08-13 18:49:39 +00:00
rect . rotate ( '100' ) ;
2012-08-10 15:14:56 +00:00
canvas . straightenObject ( rect ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( rect . get ( 'angle' ) , 90 , 'angle should be coerced to 90 (from 100)' ) ;
2012-08-10 15:14:56 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'toSVG' , function ( assert ) {
assert . ok ( typeof canvas . toSVG === 'function' ) ;
2013-08-27 18:32:15 +00:00
canvas . clear ( ) ;
2016-06-11 12:10:20 +00:00
canvas . viewportTransform = [ 1 , 0 , 0 , 1 , 0 , 0 ] ;
2013-08-27 18:32:15 +00:00
var svg = canvas . toSVG ( ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( svg , CANVAS _SVG ) ;
2013-08-27 18:32:15 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'toSVG with different encoding (ISO-8859-1)' , function ( assert ) {
assert . ok ( typeof canvas . toSVG === 'function' ) ;
2013-08-27 18:32:15 +00:00
canvas . clear ( ) ;
2016-06-11 12:10:20 +00:00
canvas . viewportTransform = [ 1 , 0 , 0 , 1 , 0 , 0 ] ;
2013-08-27 18:32:15 +00:00
var svg = canvas . toSVG ( { encoding : 'ISO-8859-1' } ) ;
var svgDefaultEncoding = canvas . toSVG ( ) ;
2017-09-17 09:44:57 +00:00
assert . ok ( svg != svgDefaultEncoding ) ;
assert . equal ( svg , CANVAS _SVG . replace ( 'encoding="UTF-8"' , 'encoding="ISO-8859-1"' ) ) ;
2013-08-27 18:32:15 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'toSVG without preamble' , function ( assert ) {
assert . ok ( typeof canvas . toSVG === 'function' ) ;
2013-02-06 06:20:56 +00:00
var withPreamble = canvas . toSVG ( ) ;
var withoutPreamble = canvas . toSVG ( { suppressPreamble : true } ) ;
2017-09-17 09:44:57 +00:00
assert . ok ( withPreamble != withoutPreamble ) ;
assert . equal ( withoutPreamble . slice ( 0 , 4 ) , '<svg' , 'svg should start with root node when premable is suppressed' ) ;
2013-02-06 06:20:56 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'toSVG with viewBox' , function ( assert ) {
assert . ok ( typeof canvas . toSVG === 'function' ) ;
2013-08-27 18:32:15 +00:00
canvas . clear ( ) ;
var svg = canvas . toSVG ( { viewBox : { x : 100 , y : 100 , width : 300 , height : 300 } } ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( svg , CANVAS _SVG _VIEWBOX ) ;
2013-08-27 18:32:15 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'toSVG with reviver' , function ( assert ) {
assert . ok ( typeof canvas . toSVG === 'function' ) ;
2013-09-29 07:22:44 +00:00
canvas . clear ( ) ;
var circle = new fabric . Circle ( ) ,
rect = new fabric . Rect ( ) ,
path1 = new fabric . Path ( 'M 100 100 L 300 100 L 200 300 z' ) ,
tria = new fabric . Triangle ( ) ,
polygon = new fabric . Polygon ( [ { x : 10 , y : 12 } , { x : 20 , y : 22 } ] ) ,
polyline = new fabric . Polyline ( [ { x : 10 , y : 12 } , { x : 20 , y : 22 } ] ) ,
line = new fabric . Line ( ) ,
text = new fabric . Text ( 'Text' ) ,
group = new fabric . Group ( [ text , line ] ) ,
ellipse = new fabric . Ellipse ( ) ,
image = new fabric . Image ( { width : 0 , height : 0 } ) ,
path2 = new fabric . Path ( 'M 0 0 L 200 100 L 200 300 z' ) ,
path3 = new fabric . Path ( 'M 50 50 L 100 300 L 400 400 z' ) ,
2017-06-01 09:02:32 +00:00
pathGroup = new fabric . Group ( [ path2 , path3 ] ) ;
2013-09-29 07:22:44 +00:00
canvas . renderOnAddRemove = false ;
canvas . add ( circle , rect , path1 , tria , polygon , polyline , group , ellipse , image , pathGroup ) ;
var reviverCount = 0 ,
2017-06-01 09:02:32 +00:00
len = canvas . size ( ) + group . size ( ) + pathGroup . size ( ) ;
2013-09-29 07:22:44 +00:00
function reviver ( svg ) {
reviverCount ++ ;
return svg ;
}
2015-04-23 09:47:23 +00:00
canvas . toSVG ( null , reviver ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( reviverCount , len ) ;
2015-04-23 09:47:23 +00:00
2013-09-29 07:22:44 +00:00
canvas . renderOnAddRemove = true ;
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'toSVG with reviver 2' , function ( assert ) {
assert . ok ( typeof canvas . toSVG === 'function' ) ;
2016-05-17 10:56:34 +00:00
canvas . clear ( ) ;
var circle = new fabric . Circle ( ) ,
rect = new fabric . Rect ( ) ,
path1 = new fabric . Path ( 'M 100 100 L 300 100 L 200 300 z' ) ,
tria = new fabric . Triangle ( ) ,
polygon = new fabric . Polygon ( [ { x : 10 , y : 12 } , { x : 20 , y : 22 } ] ) ,
polyline = new fabric . Polyline ( [ { x : 10 , y : 12 } , { x : 20 , y : 22 } ] ) ,
line = new fabric . Line ( ) ,
text = new fabric . Text ( 'Text' ) ,
group = new fabric . Group ( [ text , line ] ) ,
ellipse = new fabric . Ellipse ( ) ,
image = new fabric . Image ( { width : 0 , height : 0 } ) ,
imageBG = new fabric . Image ( { width : 0 , height : 0 } ) ,
imageOL = new fabric . Image ( { width : 0 , height : 0 } ) ,
path2 = new fabric . Path ( 'M 0 0 L 200 100 L 200 300 z' ) ,
path3 = new fabric . Path ( 'M 50 50 L 100 300 L 400 400 z' ) ,
2017-06-01 09:02:32 +00:00
pathGroup = new fabric . Group ( [ path2 , path3 ] ) ;
2016-05-17 10:56:34 +00:00
canvas . renderOnAddRemove = false ;
canvas . add ( circle , rect , path1 , tria , polygon , polyline , group , ellipse , image , pathGroup ) ;
canvas . setBackgroundImage ( imageBG ) ;
canvas . setOverlayImage ( imageOL ) ;
var reviverCount = 0 ,
2017-06-01 09:02:32 +00:00
len = canvas . size ( ) + group . size ( ) + pathGroup . size ( ) ;
2016-05-17 10:56:34 +00:00
function reviver ( svg ) {
reviverCount ++ ;
return svg ;
}
canvas . toSVG ( null , reviver ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( reviverCount , len + 2 , 'reviver should include background and overlay image' ) ;
2016-05-17 10:56:34 +00:00
canvas . setBackgroundImage ( null ) ;
canvas . setOverlayImage ( null ) ;
canvas . renderOnAddRemove = true ;
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'toSVG with exclude from export' , function ( assert ) {
assert . ok ( typeof canvas . toSVG === 'function' ) ;
2016-05-17 10:56:34 +00:00
canvas . clear ( ) ;
var circle = new fabric . Circle ( { excludeFromExport : true } ) ,
rect = new fabric . Rect ( { excludeFromExport : true } ) ,
path1 = new fabric . Path ( 'M 100 100 L 300 100 L 200 300 z' ) ,
tria = new fabric . Triangle ( ) ,
polygon = new fabric . Polygon ( [ { x : 10 , y : 12 } , { x : 20 , y : 22 } ] ) ,
polyline = new fabric . Polyline ( [ { x : 10 , y : 12 } , { x : 20 , y : 22 } ] ) ,
line = new fabric . Line ( ) ,
text = new fabric . Text ( 'Text' ) ,
group = new fabric . Group ( [ text , line ] ) ,
ellipse = new fabric . Ellipse ( ) ,
image = new fabric . Image ( { width : 0 , height : 0 } ) ,
path2 = new fabric . Path ( 'M 0 0 L 200 100 L 200 300 z' ) ,
path3 = new fabric . Path ( 'M 50 50 L 100 300 L 400 400 z' ) ,
2017-06-01 09:02:32 +00:00
pathGroup = new fabric . Group ( [ path2 , path3 ] ) ;
2016-05-17 10:56:34 +00:00
canvas . renderOnAddRemove = false ;
canvas . add ( circle , rect , path1 , tria , polygon , polyline , group , ellipse , image , pathGroup ) ;
var reviverCount = 0 ,
2017-06-01 09:02:32 +00:00
len = canvas . size ( ) + group . size ( ) + pathGroup . size ( ) ;
2016-05-17 10:56:34 +00:00
function reviver ( svg ) {
reviverCount ++ ;
return svg ;
}
canvas . toSVG ( null , reviver ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( reviverCount , len - 2 , 'reviver should not include objects with excludeFromExport' ) ;
2016-05-17 10:56:34 +00:00
canvas . renderOnAddRemove = true ;
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'toJSON' , function ( assert ) {
assert . ok ( typeof canvas . toJSON === 'function' ) ;
assert . equal ( JSON . stringify ( canvas . toJSON ( ) ) , '{"version":"' + fabric . version + '","objects":[]}' ) ;
2012-08-10 15:14:56 +00:00
canvas . backgroundColor = '#ff5555' ;
2013-11-03 12:09:49 +00:00
canvas . overlayColor = 'rgba(0,0,0,0.2)' ;
2017-09-17 09:44:57 +00:00
assert . equal ( JSON . stringify ( canvas . toJSON ( ) ) , '{"version":"' + fabric . version + '","objects":[],"background":"#ff5555","overlay":"rgba(0,0,0,0.2)"}' , '`background` and `overlay` value should be reflected in json' ) ;
2012-08-10 15:14:56 +00:00
canvas . add ( makeRect ( ) ) ;
2017-09-17 09:44:57 +00:00
assert . deepEqual ( JSON . stringify ( canvas . toJSON ( ) ) , RECT _JSON ) ;
2012-08-10 15:14:56 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'toJSON custom properties non-existence check' , function ( assert ) {
2013-11-03 12:09:49 +00:00
var rect = new fabric . Rect ( { width : 10 , height : 20 } ) ;
rect . padding = 123 ;
canvas . add ( rect ) ;
rect . foo = 'bar' ;
canvas . bar = 456 ;
var data = canvas . toJSON ( [ 'padding' , 'foo' , 'bar' , 'baz' ] ) ;
2017-09-17 09:44:57 +00:00
assert . ok ( 'padding' in data . objects [ 0 ] ) ;
assert . ok ( 'foo' in data . objects [ 0 ] , 'foo shouldn\'t be included if it\'s not in an object' ) ;
assert . ok ( ! ( 'bar' in data . objects [ 0 ] ) , 'bar shouldn\'t be included if it\'s not in an object' ) ;
assert . ok ( ! ( 'baz' in data . objects [ 0 ] ) , 'bar shouldn\'t be included if it\'s not in an object' ) ;
assert . ok ( ! ( 'foo' in data ) ) ;
assert . ok ( ! ( 'baz' in data ) ) ;
assert . ok ( 'bar' in data ) ;
2013-11-03 12:09:49 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'toJSON backgroundImage' , function ( assert ) {
var done = assert . async ( ) ;
2013-11-03 12:09:49 +00:00
createImageObject ( function ( image ) {
canvas . backgroundImage = image ;
var json = canvas . toJSON ( ) ;
fixImageDimension ( json . backgroundImage ) ;
2017-09-17 09:44:57 +00:00
assert . deepEqual ( json . backgroundImage , REFERENCE _IMG _OBJECT ) ;
2013-11-03 12:09:49 +00:00
canvas . backgroundImage = null ;
2017-09-17 09:44:57 +00:00
done ( ) ;
2013-11-03 12:09:49 +00:00
} ) ;
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'toJSON backgroundImage with custom props' , function ( assert ) {
var done = assert . async ( ) ;
2016-09-11 10:40:57 +00:00
createImageObject ( function ( image ) {
canvas . backgroundImage = image ;
image . custom = 'yes' ;
var json = canvas . toJSON ( [ 'custom' ] ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( json . backgroundImage . custom , 'yes' ) ;
2016-09-11 10:40:57 +00:00
canvas . backgroundImage = null ;
2017-09-17 09:44:57 +00:00
done ( ) ;
2016-09-11 10:40:57 +00:00
} ) ;
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'toJSON overlayImage' , function ( assert ) {
var done = assert . async ( ) ;
2013-11-03 12:09:49 +00:00
createImageObject ( function ( image ) {
canvas . overlayImage = image ;
var json = canvas . toJSON ( ) ;
fixImageDimension ( json . overlayImage ) ;
2017-09-17 09:44:57 +00:00
assert . deepEqual ( json . overlayImage , REFERENCE _IMG _OBJECT ) ;
2013-11-03 12:09:49 +00:00
canvas . overlayImage = null ;
2017-09-17 09:44:57 +00:00
done ( ) ;
2013-11-03 12:09:49 +00:00
} ) ;
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'toJSON overlayImage with custom props' , function ( assert ) {
var done = assert . async ( ) ;
2016-09-11 10:40:57 +00:00
createImageObject ( function ( image ) {
canvas . overlayImage = image ;
image . custom = 'yes' ;
var json = canvas . toJSON ( [ 'custom' ] ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( json . overlayImage . custom , 'yes' ) ;
2016-09-11 10:40:57 +00:00
canvas . overlayImage = null ;
2017-09-17 09:44:57 +00:00
done ( ) ;
2016-09-11 10:40:57 +00:00
} ) ;
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'toDatalessJSON' , function ( assert ) {
2012-08-10 15:14:56 +00:00
var path = new fabric . Path ( 'M 100 100 L 300 100 L 200 300 z' , {
sourcePath : 'http://example.com/'
} ) ;
canvas . add ( path ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( JSON . stringify ( canvas . toDatalessJSON ( ) ) , PATH _DATALESS _JSON ) ;
2012-08-10 15:14:56 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'toObject' , function ( assert ) {
assert . ok ( typeof canvas . toObject === 'function' ) ;
2012-08-10 15:14:56 +00:00
var expectedObject = {
2017-08-29 20:23:42 +00:00
version : fabric . version ,
2012-08-10 15:14:56 +00:00
objects : canvas . getObjects ( )
} ;
2017-09-17 09:44:57 +00:00
assert . deepEqual ( expectedObject , canvas . toObject ( ) ) ;
2012-08-10 15:14:56 +00:00
var rect = makeRect ( ) ;
canvas . add ( rect ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( canvas . toObject ( ) . objects [ 0 ] . type , rect . type ) ;
2012-08-10 15:14:56 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'toObject non includeDefaultValues' , function ( assert ) {
2016-11-12 17:20:20 +00:00
canvas . includeDefaultValues = false ;
var rect = makeRect ( ) ;
canvas . add ( rect ) ;
var cObject = canvas . toObject ( ) ;
2017-08-29 20:23:42 +00:00
var expectedRect = { version : fabric . version , type : 'rect' , width : 10 , height : 10 } ;
2017-09-17 09:44:57 +00:00
assert . deepEqual ( cObject . objects [ 0 ] , expectedRect , 'Rect should be exported withoud defaults' ) ;
2016-11-12 17:20:20 +00:00
canvas . includeDefaultValues = true ;
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'toObject excludeFromExport' , function ( assert ) {
2016-05-17 10:56:34 +00:00
var rect = makeRect ( ) , rect2 = makeRect ( ) , rect3 = makeRect ( ) ;
canvas . clear ( ) ;
canvas . add ( rect , rect2 , rect3 ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( canvas . toObject ( ) . objects . length , 3 , 'all objects get exported' ) ;
2016-05-17 10:56:34 +00:00
rect . excludeFromExport = true ;
rect2 . excludeFromExport = true ;
2017-09-17 09:44:57 +00:00
assert . equal ( canvas . toObject ( ) . objects . length , 1 , 'only one object gets exported' ) ;
2016-05-17 10:56:34 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'toObject excludeFromExport bgImage overlay' , function ( assert ) {
2017-07-22 14:34:47 +00:00
var rect = makeRect ( ) , rect2 = makeRect ( ) , rect3 = makeRect ( ) ;
canvas . clear ( ) ;
canvas . backgroundImage = rect ;
canvas . overlayImage = rect2 ;
canvas . add ( rect3 ) ;
var rectToObject = rect . toObject ( ) ;
var rect2ToObject = rect2 . toObject ( ) ;
var canvasToObject = canvas . toObject ( ) ;
2017-09-17 09:44:57 +00:00
assert . deepEqual ( canvasToObject . backgroundImage , rectToObject , 'background exported' ) ;
assert . deepEqual ( canvasToObject . overlayImage , rect2ToObject , 'overlay exported' ) ;
2017-07-22 14:34:47 +00:00
rect . excludeFromExport = true ;
rect2 . excludeFromExport = true ;
canvasToObject = canvas . toObject ( ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( canvasToObject . backgroundImage , undefined , 'background not exported' ) ;
assert . equal ( canvasToObject . overlayImage , undefined , 'overlay not exported' ) ;
2017-07-22 14:34:47 +00:00
} ) ;
2016-05-17 10:56:34 +00:00
2017-09-17 09:44:57 +00:00
QUnit . test ( 'toDatalessObject' , function ( assert ) {
assert . ok ( typeof canvas . toDatalessObject === 'function' ) ;
2012-08-10 15:14:56 +00:00
var expectedObject = {
2017-09-17 09:44:57 +00:00
version : fabric . version ,
2012-08-10 15:14:56 +00:00
objects : canvas . getObjects ( )
} ;
2017-09-17 09:44:57 +00:00
assert . deepEqual ( expectedObject , canvas . toDatalessObject ( ) ) ;
2012-08-10 15:14:56 +00:00
var rect = makeRect ( ) ;
canvas . add ( rect ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( canvas . toObject ( ) . objects [ 0 ] . type , rect . type ) ;
2012-08-10 15:14:56 +00:00
// TODO (kangax): need to test this method with fabric.Path to ensure that path is not populated
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'toObject with additional properties' , function ( assert ) {
2012-11-30 22:46:09 +00:00
canvas . freeDrawingColor = 'red' ;
canvas . foobar = 123 ;
var expectedObject = {
2017-09-17 09:44:57 +00:00
version : fabric . version ,
2012-11-30 22:46:09 +00:00
objects : canvas . getObjects ( ) ,
freeDrawingColor : 'red' ,
foobar : 123
} ;
2017-09-17 09:44:57 +00:00
assert . deepEqual ( expectedObject , canvas . toObject ( [ 'freeDrawingColor' , 'foobar' ] ) ) ;
2012-11-30 22:46:09 +00:00
var rect = makeRect ( ) ;
canvas . add ( rect ) ;
2017-09-17 09:44:57 +00:00
assert . ok ( ! ( 'rotatingPointOffset' in canvas . toObject ( [ 'smthelse' ] ) . objects [ 0 ] ) ) ;
assert . ok ( 'rotatingPointOffset' in canvas . toObject ( [ 'rotatingPointOffset' ] ) . objects [ 0 ] ) ;
2012-11-30 22:46:09 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'isEmpty' , function ( assert ) {
assert . ok ( typeof canvas . isEmpty === 'function' ) ;
assert . ok ( canvas . isEmpty ( ) ) ;
2012-08-10 15:14:56 +00:00
canvas . add ( makeRect ( ) ) ;
2017-09-17 09:44:57 +00:00
assert . ok ( ! canvas . isEmpty ( ) ) ;
2012-08-10 15:14:56 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'loadFromJSON with json string staticCanvas' , function ( assert ) {
var done = assert . async ( ) ;
assert . ok ( typeof canvas . loadFromJSON === 'function' ) ;
2012-08-10 15:14:56 +00:00
canvas . loadFromJSON ( PATH _JSON , function ( ) {
var obj = canvas . item ( 0 ) ;
2017-09-17 09:44:57 +00:00
assert . ok ( ! canvas . isEmpty ( ) , 'canvas is not empty' ) ;
assert . equal ( obj . type , 'path' , 'first object is a path object' ) ;
assert . equal ( canvas . backgroundColor , '#ff5555' , 'backgroundColor is populated properly' ) ;
assert . equal ( obj . get ( 'left' ) , 268 ) ;
assert . equal ( obj . get ( 'top' ) , 266 ) ;
assert . equal ( obj . get ( 'width' ) , 49.803999999999995 ) ;
assert . equal ( obj . get ( 'height' ) , 48.027 ) ;
assert . equal ( obj . get ( 'fill' ) , 'rgb(0,0,0)' ) ;
assert . strictEqual ( obj . get ( 'stroke' ) , null ) ;
assert . strictEqual ( obj . get ( 'strokeWidth' ) , 1 ) ;
assert . strictEqual ( obj . get ( 'scaleX' ) , 1 ) ;
assert . strictEqual ( obj . get ( 'scaleY' ) , 1 ) ;
assert . strictEqual ( obj . get ( 'angle' ) , 0 ) ;
assert . strictEqual ( obj . get ( 'flipX' ) , false ) ;
assert . strictEqual ( obj . get ( 'flipY' ) , false ) ;
assert . strictEqual ( obj . get ( 'opacity' ) , 1 ) ;
assert . ok ( obj . get ( 'path' ) . length > 0 ) ;
done ( ) ;
2012-12-08 12:38:19 +00:00
} ) ;
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'loadFromJSON with json object' , function ( assert ) {
var done = assert . async ( ) ;
assert . ok ( typeof canvas . loadFromJSON === 'function' ) ;
2012-12-08 12:38:19 +00:00
canvas . loadFromJSON ( JSON . parse ( PATH _JSON ) , function ( ) {
var obj = canvas . item ( 0 ) ;
2017-09-17 09:44:57 +00:00
assert . ok ( ! canvas . isEmpty ( ) , 'canvas is not empty' ) ;
assert . equal ( obj . type , 'path' , 'first object is a path object' ) ;
assert . equal ( canvas . backgroundColor , '#ff5555' , 'backgroundColor is populated properly' ) ;
assert . equal ( canvas . overlayColor , 'rgba(0,0,0,0.2)' , 'overlayColor is populated properly' ) ;
assert . equal ( obj . get ( 'left' ) , 268 ) ;
assert . equal ( obj . get ( 'top' ) , 266 ) ;
assert . equal ( obj . get ( 'width' ) , 49.803999999999995 ) ;
assert . equal ( obj . get ( 'height' ) , 48.027 ) ;
assert . equal ( obj . get ( 'fill' ) , 'rgb(0,0,0)' ) ;
assert . strictEqual ( obj . get ( 'stroke' ) , null ) ;
assert . strictEqual ( obj . get ( 'strokeWidth' ) , 1 ) ;
assert . strictEqual ( obj . get ( 'scaleX' ) , 1 ) ;
assert . strictEqual ( obj . get ( 'scaleY' ) , 1 ) ;
assert . strictEqual ( obj . get ( 'angle' ) , 0 ) ;
assert . strictEqual ( obj . get ( 'flipX' ) , false ) ;
assert . strictEqual ( obj . get ( 'flipY' ) , false ) ;
assert . strictEqual ( obj . get ( 'opacity' ) , 1 ) ;
assert . ok ( obj . get ( 'path' ) . length > 0 ) ;
done ( ) ;
2017-02-23 01:10:54 +00:00
} ) ;
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'loadFromJSON with json object without default values' , function ( assert ) {
var done = assert . async ( ) ;
assert . ok ( typeof canvas . loadFromJSON === 'function' ) ;
2017-02-23 01:10:54 +00:00
canvas . loadFromJSON ( JSON . parse ( PATH _WITHOUT _DEFAULTS _JSON ) , function ( ) {
var obj = canvas . item ( 0 ) ;
2017-09-17 09:44:57 +00:00
assert . ok ( ! canvas . isEmpty ( ) , 'canvas is not empty' ) ;
assert . equal ( obj . type , 'path' , 'first object is a path object' ) ;
assert . equal ( canvas . backgroundColor , '#ff5555' , 'backgroundColor is populated properly' ) ;
assert . equal ( canvas . overlayColor , 'rgba(0,0,0,0.2)' , 'overlayColor is populated properly' ) ;
assert . equal ( obj . get ( 'left' ) , 268 ) ;
assert . equal ( obj . get ( 'top' ) , 266 ) ;
assert . equal ( obj . get ( 'width' ) , 49.803999999999995 ) ;
assert . equal ( obj . get ( 'height' ) , 48.027 ) ;
assert . equal ( obj . get ( 'fill' ) , 'rgb(0,0,0)' ) ;
assert . strictEqual ( obj . get ( 'stroke' ) , null ) ;
assert . strictEqual ( obj . get ( 'strokeWidth' ) , 1 ) ;
assert . strictEqual ( obj . get ( 'scaleX' ) , 1 ) ;
assert . strictEqual ( obj . get ( 'scaleY' ) , 1 ) ;
assert . strictEqual ( obj . get ( 'angle' ) , 0 ) ;
assert . strictEqual ( obj . get ( 'flipX' ) , false ) ;
assert . strictEqual ( obj . get ( 'flipY' ) , false ) ;
assert . strictEqual ( obj . get ( 'opacity' ) , 1 ) ;
assert . ok ( obj . get ( 'path' ) . length > 0 ) ;
done ( ) ;
2012-08-10 15:14:56 +00:00
} ) ;
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'loadFromJSON with image background and color' , function ( assert ) {
var done = assert . async ( ) ;
2016-06-05 15:08:19 +00:00
var serialized = JSON . parse ( PATH _JSON ) ;
serialized . background = 'green' ;
2018-05-29 08:28:02 +00:00
serialized . backgroundImage = JSON . parse ( '{"type":"image","originX":"left","originY":"top","left":13.6,"top":-1.4,"width":3000,"height":3351,"fill":"rgb(0,0,0)","stroke":null,"strokeWidth":0,"strokeDashArray":null,"strokeLineCap":"butt","strokeLineJoin":"miter","strokeMiterLimit":4,"scaleX":0.05,"scaleY":0.05,"angle":0,"flipX":false,"flipY":false,"opacity":1,"shadow":null,"visible":true,"clipTo":null,"backgroundColor":"","fillRule":"nonzero","globalCompositeOperation":"source-over","transformMatrix":null,"skewX":0,"skewY":0,"src":"' + IMG _SRC + '","filters":[],"crossOrigin":""}' ) ;
2016-06-05 15:08:19 +00:00
canvas . loadFromJSON ( serialized , function ( ) {
2017-09-17 09:44:57 +00:00
assert . ok ( ! canvas . isEmpty ( ) , 'canvas is not empty' ) ;
assert . equal ( canvas . backgroundColor , 'green' ) ;
assert . ok ( canvas . backgroundImage instanceof fabric . Image ) ;
done ( ) ;
2016-06-05 15:08:19 +00:00
} ) ;
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'loadFromJSON custom properties' , function ( assert ) {
var done = assert . async ( ) ;
2012-11-30 22:46:09 +00:00
var rect = new fabric . Rect ( { width : 10 , height : 20 } ) ;
rect . padding = 123 ;
2016-09-10 13:14:23 +00:00
rect . foo = 'bar' ;
2012-11-30 22:46:09 +00:00
canvas . add ( rect ) ;
var jsonWithoutFoo = JSON . stringify ( canvas . toJSON ( [ 'padding' ] ) ) ;
var jsonWithFoo = JSON . stringify ( canvas . toJSON ( [ 'padding' , 'foo' ] ) ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( jsonWithFoo , RECT _JSON _WITH _PADDING ) ;
assert . ok ( jsonWithoutFoo !== RECT _JSON _WITH _PADDING ) ;
2012-11-30 22:46:09 +00:00
canvas . clear ( ) ;
canvas . loadFromJSON ( jsonWithFoo , function ( ) {
var obj = canvas . item ( 0 ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( obj . padding , 123 , 'padding on object is set properly' ) ;
assert . equal ( obj . foo , 'bar' , '"foo" property on object is set properly' ) ;
done ( ) ;
2012-11-30 22:46:09 +00:00
} ) ;
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'loadFromJSON with text' , function ( assert ) {
var done = assert . async ( ) ;
2013-11-03 12:09:49 +00:00
var json = '{"objects":[{"type":"text","left":150,"top":200,"width":128,"height":64.32,"fill":"#000000","stroke":"","strokeWidth":"","scaleX":0.8,"scaleY":0.8,"angle":0,"flipX":false,"flipY":false,"opacity":1,"text":"NAME HERE","fontSize":24,"fontWeight":"","fontFamily":"Delicious_500","fontStyle":"","lineHeight":"","textDecoration":"","textAlign":"center","path":"","strokeStyle":"","backgroundColor":""}],"background":"#ffffff"}' ;
canvas . loadFromJSON ( json , function ( ) {
2013-06-19 10:49:31 +00:00
2013-11-03 12:09:49 +00:00
canvas . renderAll ( ) ;
2013-06-19 10:49:31 +00:00
2017-09-17 09:44:57 +00:00
assert . equal ( 'text' , canvas . item ( 0 ) . type ) ;
assert . equal ( 150 , canvas . item ( 0 ) . left ) ;
assert . equal ( 200 , canvas . item ( 0 ) . top ) ;
assert . equal ( 'NAME HERE' , canvas . item ( 0 ) . text ) ;
2013-11-03 12:09:49 +00:00
2017-09-17 09:44:57 +00:00
done ( ) ;
2013-11-03 12:09:49 +00:00
} ) ;
2013-06-19 10:49:31 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'sendToBack' , function ( assert ) {
assert . ok ( typeof canvas . sendToBack === 'function' ) ;
2012-08-10 15:14:56 +00:00
var rect1 = makeRect ( ) ,
rect2 = makeRect ( ) ,
rect3 = makeRect ( ) ;
canvas . add ( rect1 , rect2 , rect3 ) ;
canvas . sendToBack ( rect3 ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( canvas . item ( 0 ) , rect3 , 'third should now be the first one' ) ;
2012-08-10 15:14:56 +00:00
canvas . sendToBack ( rect2 ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( canvas . item ( 0 ) , rect2 , 'second should now be the first one' ) ;
2012-08-10 15:14:56 +00:00
canvas . sendToBack ( rect2 ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( canvas . item ( 0 ) , rect2 , 'second should *still* be the first one' ) ;
2012-08-10 15:14:56 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'bringToFront' , function ( assert ) {
assert . ok ( typeof canvas . bringToFront === 'function' ) ;
2012-08-10 15:14:56 +00:00
var rect1 = makeRect ( ) ,
rect2 = makeRect ( ) ,
rect3 = makeRect ( ) ;
canvas . add ( rect1 , rect2 , rect3 ) ;
canvas . bringToFront ( rect1 ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( canvas . item ( 2 ) , rect1 , 'first should now be the last one' ) ;
2012-08-10 15:14:56 +00:00
canvas . bringToFront ( rect2 ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( canvas . item ( 2 ) , rect2 , 'second should now be the last one' ) ;
2012-08-10 15:14:56 +00:00
canvas . bringToFront ( rect2 ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( canvas . item ( 2 ) , rect2 , 'second should *still* be the last one' ) ;
2012-08-10 15:14:56 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'sendBackwards' , function ( assert ) {
assert . ok ( typeof canvas . sendBackwards === 'function' ) ;
2012-08-10 15:14:56 +00:00
var rect1 = makeRect ( ) ,
rect2 = makeRect ( ) ,
rect3 = makeRect ( ) ;
canvas . add ( rect1 , rect2 , rect3 ) ;
// [ 1, 2, 3 ]
2017-09-17 09:44:57 +00:00
assert . equal ( canvas . item ( 0 ) , rect1 ) ;
assert . equal ( canvas . item ( 1 ) , rect2 ) ;
assert . equal ( canvas . item ( 2 ) , rect3 ) ;
2012-08-10 15:14:56 +00:00
canvas . sendBackwards ( rect3 ) ;
// moved 3 one level back — [1, 3, 2]
2017-09-17 09:44:57 +00:00
assert . equal ( canvas . item ( 0 ) , rect1 ) ;
assert . equal ( canvas . item ( 2 ) , rect2 ) ;
assert . equal ( canvas . item ( 1 ) , rect3 ) ;
2012-08-10 15:14:56 +00:00
canvas . sendBackwards ( rect3 ) ;
// moved 3 one level back — [3, 1, 2]
2017-09-17 09:44:57 +00:00
assert . equal ( canvas . item ( 1 ) , rect1 ) ;
assert . equal ( canvas . item ( 2 ) , rect2 ) ;
assert . equal ( canvas . item ( 0 ) , rect3 ) ;
2012-08-10 15:14:56 +00:00
canvas . sendBackwards ( rect3 ) ;
// 3 stays at the deepEqual position — [2, 3, 1]
2017-09-17 09:44:57 +00:00
assert . equal ( canvas . item ( 1 ) , rect1 ) ;
assert . equal ( canvas . item ( 2 ) , rect2 ) ;
assert . equal ( canvas . item ( 0 ) , rect3 ) ;
2012-08-10 15:14:56 +00:00
canvas . sendBackwards ( rect2 ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( canvas . item ( 2 ) , rect1 ) ;
assert . equal ( canvas . item ( 1 ) , rect2 ) ;
assert . equal ( canvas . item ( 0 ) , rect3 ) ;
2012-08-10 15:14:56 +00:00
canvas . sendBackwards ( rect2 ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( canvas . item ( 2 ) , rect1 ) ;
assert . equal ( canvas . item ( 0 ) , rect2 ) ;
assert . equal ( canvas . item ( 1 ) , rect3 ) ;
2012-08-10 15:14:56 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'bringForward' , function ( assert ) {
assert . ok ( typeof canvas . bringForward === 'function' ) ;
2012-08-10 15:14:56 +00:00
var rect1 = makeRect ( ) ,
rect2 = makeRect ( ) ,
rect3 = makeRect ( ) ;
canvas . add ( rect1 , rect2 , rect3 ) ;
// initial position — [ 1, 2, 3 ]
2017-09-17 09:44:57 +00:00
assert . equal ( canvas . item ( 0 ) , rect1 ) ;
assert . equal ( canvas . item ( 1 ) , rect2 ) ;
assert . equal ( canvas . item ( 2 ) , rect3 ) ;
2012-08-10 15:14:56 +00:00
canvas . bringForward ( rect1 ) ;
// 1 moves one way up — [ 2, 1, 3 ]
2017-09-17 09:44:57 +00:00
assert . equal ( canvas . item ( 1 ) , rect1 ) ;
assert . equal ( canvas . item ( 0 ) , rect2 ) ;
assert . equal ( canvas . item ( 2 ) , rect3 ) ;
2012-08-10 15:14:56 +00:00
canvas . bringForward ( rect1 ) ;
// 1 moves one way up again — [ 2, 3, 1 ]
2017-09-17 09:44:57 +00:00
assert . equal ( canvas . item ( 2 ) , rect1 ) ;
assert . equal ( canvas . item ( 0 ) , rect2 ) ;
assert . equal ( canvas . item ( 1 ) , rect3 ) ;
2012-08-10 15:14:56 +00:00
canvas . bringForward ( rect1 ) ;
// 1 is already all the way on top and so doesn't change position — [ 2, 3, 1 ]
2017-09-17 09:44:57 +00:00
assert . equal ( canvas . item ( 2 ) , rect1 ) ;
assert . equal ( canvas . item ( 0 ) , rect2 ) ;
assert . equal ( canvas . item ( 1 ) , rect3 ) ;
2012-08-10 15:14:56 +00:00
canvas . bringForward ( rect3 ) ;
// 1 is already all the way on top and so doesn't change position — [ 2, 1, 3 ]
2017-09-17 09:44:57 +00:00
assert . equal ( canvas . item ( 1 ) , rect1 ) ;
assert . equal ( canvas . item ( 0 ) , rect2 ) ;
assert . equal ( canvas . item ( 2 ) , rect3 ) ;
2012-08-10 15:14:56 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'moveTo' , function ( assert ) {
assert . ok ( typeof canvas . moveTo === 'function' ) ;
2013-03-22 14:10:44 +00:00
var rect1 = makeRect ( ) ,
rect2 = makeRect ( ) ,
rect3 = makeRect ( ) ;
canvas . add ( rect1 , rect2 , rect3 ) ;
// [ 1, 2, 3 ]
2017-09-17 09:44:57 +00:00
assert . equal ( canvas . item ( 0 ) , rect1 ) ;
assert . equal ( canvas . item ( 1 ) , rect2 ) ;
assert . equal ( canvas . item ( 2 ) , rect3 ) ;
2013-03-22 14:10:44 +00:00
canvas . moveTo ( rect3 , 0 ) ;
// moved 3 to level 0 — [3, 1, 2]
2017-09-17 09:44:57 +00:00
assert . equal ( canvas . item ( 1 ) , rect1 ) ;
assert . equal ( canvas . item ( 2 ) , rect2 ) ;
assert . equal ( canvas . item ( 0 ) , rect3 ) ;
2013-03-22 14:10:44 +00:00
canvas . moveTo ( rect3 , 1 ) ;
// moved 3 to level 1 — [1, 3, 2]
2017-09-17 09:44:57 +00:00
assert . equal ( canvas . item ( 0 ) , rect1 ) ;
assert . equal ( canvas . item ( 2 ) , rect2 ) ;
assert . equal ( canvas . item ( 1 ) , rect3 ) ;
2013-03-22 14:10:44 +00:00
canvas . moveTo ( rect3 , 2 ) ;
// moved 3 to level 2 — [1, 2, 3]
2017-09-17 09:44:57 +00:00
assert . equal ( canvas . item ( 0 ) , rect1 ) ;
assert . equal ( canvas . item ( 1 ) , rect2 ) ;
assert . equal ( canvas . item ( 2 ) , rect3 ) ;
2013-03-22 14:10:44 +00:00
canvas . moveTo ( rect3 , 2 ) ;
// moved 3 to same level 2 and so doesn't change position — [1, 2, 3]
2017-09-17 09:44:57 +00:00
assert . equal ( canvas . item ( 0 ) , rect1 ) ;
assert . equal ( canvas . item ( 1 ) , rect2 ) ;
assert . equal ( canvas . item ( 2 ) , rect3 ) ;
2013-03-22 14:10:44 +00:00
canvas . moveTo ( rect2 , 0 ) ;
// moved 2 to level 0 — [2, 1, 3]
2017-09-17 09:44:57 +00:00
assert . equal ( canvas . item ( 1 ) , rect1 ) ;
assert . equal ( canvas . item ( 0 ) , rect2 ) ;
assert . equal ( canvas . item ( 2 ) , rect3 ) ;
2013-03-22 14:10:44 +00:00
canvas . moveTo ( rect2 , 2 ) ;
// moved 2 to level 2 — [1, 3, 2]
2017-09-17 09:44:57 +00:00
assert . equal ( canvas . item ( 0 ) , rect1 ) ;
assert . equal ( canvas . item ( 2 ) , rect2 ) ;
assert . equal ( canvas . item ( 1 ) , rect3 ) ;
2013-03-22 14:10:44 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'item' , function ( assert ) {
assert . ok ( typeof canvas . item === 'function' ) ;
2012-08-10 15:14:56 +00:00
var rect1 = makeRect ( ) ,
rect2 = makeRect ( ) ;
canvas . add ( rect1 , rect2 ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( canvas . item ( 0 ) , rect1 ) ;
assert . equal ( canvas . item ( 1 ) , rect2 ) ;
2012-08-10 15:14:56 +00:00
canvas . remove ( canvas . item ( 0 ) ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( canvas . item ( 0 ) , rect2 ) ;
2012-08-10 15:14:56 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'complexity' , function ( assert ) {
assert . ok ( typeof canvas . complexity === 'function' ) ;
assert . equal ( canvas . complexity ( ) , 0 ) ;
2012-08-10 15:14:56 +00:00
canvas . add ( makeRect ( ) ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( canvas . complexity ( ) , 1 ) ;
2012-08-10 15:14:56 +00:00
canvas . add ( makeRect ( ) , makeRect ( ) ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( canvas . complexity ( ) , 3 ) ;
2012-08-10 15:14:56 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'toString' , function ( assert ) {
assert . ok ( typeof canvas . toString === 'function' ) ;
2012-08-10 15:14:56 +00:00
2017-09-17 09:44:57 +00:00
assert . equal ( canvas . toString ( ) , '#<fabric.Canvas (0): { objects: 0 }>' ) ;
2012-08-10 15:14:56 +00:00
canvas . add ( makeRect ( ) ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( canvas . toString ( ) , '#<fabric.Canvas (1): { objects: 1 }>' ) ;
2012-08-10 15:14:56 +00:00
} ) ;
2017-11-19 22:41:42 +00:00
QUnit . test ( 'dispose clear references' , function ( assert ) {
var canvas2 = new fabric . Canvas ( ) ;
assert . ok ( typeof canvas2 . dispose === 'function' ) ;
canvas2 . add ( makeRect ( ) , makeRect ( ) , makeRect ( ) ) ;
canvas2 . dispose ( ) ;
assert . equal ( canvas2 . getObjects ( ) . length , 0 , 'dispose should clear canvas' ) ;
assert . equal ( canvas2 . lowerCanvasEl , null , 'dispose should clear lowerCanvasEl' ) ;
2018-03-22 11:35:12 +00:00
assert . equal ( canvas2 . contextContainer , null , 'dispose should clear contextContainer' ) ;
2012-08-10 15:14:56 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'clone' , function ( assert ) {
assert . ok ( typeof canvas . clone === 'function' ) ;
2012-08-10 15:14:56 +00:00
// TODO (kangax): test clone
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'getSetWidth' , function ( assert ) {
assert . ok ( typeof canvas . getWidth === 'function' ) ;
assert . equal ( canvas . getWidth ( ) , 600 ) ;
assert . equal ( canvas . setWidth ( 444 ) , canvas , 'should be chainable' ) ;
assert . equal ( canvas . getWidth ( ) , 444 ) ;
assert . equal ( canvas . lowerCanvasEl . style . width , 444 + 'px' ) ;
2012-08-10 15:14:56 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'getSetHeight' , function ( assert ) {
assert . ok ( typeof canvas . getHeight === 'function' ) ;
assert . equal ( canvas . getHeight ( ) , 600 ) ;
assert . equal ( canvas . setHeight ( 765 ) , canvas , 'should be chainable' ) ;
assert . equal ( canvas . getHeight ( ) , 765 ) ;
assert . equal ( canvas . lowerCanvasEl . style . height , 765 + 'px' ) ;
2014-07-12 17:06:19 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'setWidth css only' , function ( assert ) {
2014-07-12 17:06:19 +00:00
canvas . setWidth ( 123 ) ;
canvas . setWidth ( '100%' , { cssOnly : true } ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( canvas . lowerCanvasEl . style . width , '100%' , 'Should be as the css only value' ) ;
assert . equal ( canvas . getWidth ( ) , 123 , 'Should be as the none css only value' ) ;
2014-07-12 17:06:19 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'setHeight css only' , function ( assert ) {
2014-07-12 17:06:19 +00:00
canvas . setHeight ( 123 ) ;
canvas . setHeight ( '100%' , { cssOnly : true } ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( canvas . lowerCanvasEl . style . height , '100%' , 'Should be as the css only value' ) ;
assert . equal ( canvas . getWidth ( ) , 123 , 'Should be as the none css only value' ) ;
2014-07-12 17:06:19 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'setWidth backstore only' , function ( assert ) {
2014-07-12 17:06:19 +00:00
canvas . setWidth ( 123 ) ;
canvas . setWidth ( 500 , { backstoreOnly : true } ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( canvas . lowerCanvasEl . style . width , 123 + 'px' , 'Should be as none backstore only value + "px"' ) ;
assert . equal ( canvas . getWidth ( ) , 500 , 'Should be as the backstore only value' ) ;
2014-07-12 17:06:19 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'setHeight backstore only' , function ( assert ) {
2014-07-12 17:06:19 +00:00
canvas . setHeight ( 123 ) ;
canvas . setHeight ( 500 , { backstoreOnly : true } ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( canvas . lowerCanvasEl . style . height , 123 + 'px' , 'Should be as none backstore only value + "px"' ) ;
assert . equal ( canvas . getHeight ( ) , 500 , 'Should be as the backstore only value' ) ;
2012-08-10 15:14:56 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'fxRemove' , function ( assert ) {
var done = assert . async ( ) ;
assert . ok ( typeof canvas . fxRemove === 'function' ) ;
2012-08-10 15:14:56 +00:00
var rect = new fabric . Rect ( ) ;
canvas . add ( rect ) ;
var callbackFired = false ;
function onComplete ( ) {
callbackFired = true ;
}
2017-09-17 09:44:57 +00:00
assert . ok ( canvas . item ( 0 ) === rect ) ;
assert . equal ( canvas . fxRemove ( rect , { onComplete : onComplete } ) , canvas , 'should be chainable' ) ;
2012-08-10 15:14:56 +00:00
setTimeout ( function ( ) {
2017-09-17 09:44:57 +00:00
assert . equal ( canvas . item ( 0 ) , undefined ) ;
assert . ok ( callbackFired ) ;
done ( ) ;
2012-08-10 15:14:56 +00:00
} , 1000 ) ;
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'options in setBackgroundImage from URL' , function ( assert ) {
var done = assert . async ( ) ;
2015-04-07 09:38:26 +00:00
canvas . setBackgroundImage ( IMG _SRC , function ( ) {
2017-09-17 09:44:57 +00:00
assert . equal ( canvas . backgroundImage . left , 50 ) ;
assert . equal ( canvas . backgroundImage . originX , 'right' ) ;
2015-04-23 09:47:23 +00:00
2017-09-17 09:44:57 +00:00
done ( ) ;
2015-04-07 09:38:26 +00:00
} , {
left : 50 ,
originX : 'right'
} ) ;
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'setViewportTransform' , function ( assert ) {
assert . ok ( typeof canvas . setViewportTransform === 'function' ) ;
2016-08-07 15:00:58 +00:00
var vpt = [ 2 , 0 , 0 , 2 , 50 , 50 ] ;
canvas . viewportTransform = fabric . StaticCanvas . prototype . viewportTransform ;
2017-09-17 09:44:57 +00:00
assert . deepEqual ( canvas . viewportTransform , [ 1 , 0 , 0 , 1 , 0 , 0 ] , 'initial viewport is identity matrix' ) ;
2016-08-07 15:00:58 +00:00
canvas . setViewportTransform ( vpt ) ;
2017-09-17 09:44:57 +00:00
assert . deepEqual ( canvas . viewportTransform , vpt , 'viewport now is the set one' ) ;
2016-08-07 15:00:58 +00:00
canvas . viewportTransform = fabric . StaticCanvas . prototype . viewportTransform ;
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'getZoom' , function ( assert ) {
assert . ok ( typeof canvas . getZoom === 'function' ) ;
2016-08-07 15:00:58 +00:00
var vpt = [ 2 , 0 , 0 , 2 , 50 , 50 ] ;
canvas . viewportTransform = fabric . StaticCanvas . prototype . viewportTransform ;
2017-09-17 09:44:57 +00:00
assert . deepEqual ( canvas . getZoom ( ) , 1 , 'initial zoom is 1' ) ;
2016-08-07 15:00:58 +00:00
canvas . setViewportTransform ( vpt ) ;
2017-09-17 09:44:57 +00:00
assert . deepEqual ( canvas . getZoom ( ) , 2 , 'zoom is set to 2' ) ;
2016-08-07 15:00:58 +00:00
canvas . viewportTransform = fabric . StaticCanvas . prototype . viewportTransform ;
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'setZoom' , function ( assert ) {
assert . ok ( typeof canvas . setZoom === 'function' ) ;
assert . deepEqual ( canvas . getZoom ( ) , 1 , 'initial zoom is 1' ) ;
2016-08-07 15:00:58 +00:00
canvas . setZoom ( 2 ) ;
2017-09-17 09:44:57 +00:00
assert . deepEqual ( canvas . getZoom ( ) , 2 , 'zoom is set to 2' ) ;
2016-08-07 15:00:58 +00:00
canvas . viewportTransform = fabric . StaticCanvas . prototype . viewportTransform ;
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'zoomToPoint' , function ( assert ) {
assert . ok ( typeof canvas . zoomToPoint === 'function' ) ;
assert . deepEqual ( canvas . viewportTransform , [ 1 , 0 , 0 , 1 , 0 , 0 ] , 'initial viewport is identity matrix' ) ;
2016-08-07 15:00:58 +00:00
var point = new fabric . Point ( 50 , 50 ) ;
canvas . zoomToPoint ( point , 1 ) ;
2017-09-17 09:44:57 +00:00
assert . deepEqual ( canvas . viewportTransform , [ 1 , 0 , 0 , 1 , 0 , 0 ] , 'viewport has no changes if not moving with zoom level' ) ;
2016-08-07 15:00:58 +00:00
canvas . zoomToPoint ( point , 2 ) ;
2017-09-17 09:44:57 +00:00
assert . deepEqual ( canvas . viewportTransform , [ 2 , 0 , 0 , 2 , - 50 , - 50 ] , 'viewport has a translation effect and zoom' ) ;
2016-08-07 15:00:58 +00:00
canvas . zoomToPoint ( point , 3 ) ;
2017-09-17 09:44:57 +00:00
assert . deepEqual ( canvas . viewportTransform , [ 3 , 0 , 0 , 3 , - 100 , - 100 ] , 'viewport has a translation effect and zoom' ) ;
2016-08-07 15:00:58 +00:00
canvas . viewportTransform = fabric . StaticCanvas . prototype . viewportTransform ;
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'absolutePan' , function ( assert ) {
assert . ok ( typeof canvas . absolutePan === 'function' ) ;
assert . deepEqual ( canvas . viewportTransform , [ 1 , 0 , 0 , 1 , 0 , 0 ] , 'initial viewport is identity matrix' ) ;
2016-08-07 15:00:58 +00:00
var point = new fabric . Point ( 50 , 50 ) ;
canvas . absolutePan ( point ) ;
2017-09-17 09:44:57 +00:00
assert . deepEqual ( canvas . viewportTransform , [ 1 , 0 , 0 , 1 , - point . x , - point . y ] , 'viewport has translation effect applied' ) ;
2016-08-07 15:00:58 +00:00
canvas . absolutePan ( point ) ;
2017-09-17 09:44:57 +00:00
assert . deepEqual ( canvas . viewportTransform , [ 1 , 0 , 0 , 1 , - point . x , - point . y ] , 'viewport has same translation effect applied' ) ;
2016-08-07 15:00:58 +00:00
canvas . viewportTransform = fabric . StaticCanvas . prototype . viewportTransform ;
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'relativePan' , function ( assert ) {
assert . ok ( typeof canvas . relativePan === 'function' ) ;
assert . deepEqual ( canvas . viewportTransform , [ 1 , 0 , 0 , 1 , 0 , 0 ] , 'initial viewport is identity matrix' ) ;
2016-08-07 15:00:58 +00:00
var point = new fabric . Point ( - 50 , - 50 ) ;
canvas . relativePan ( point ) ;
2017-09-17 09:44:57 +00:00
assert . deepEqual ( canvas . viewportTransform , [ 1 , 0 , 0 , 1 , - 50 , - 50 ] , 'viewport has translation effect applied' ) ;
2016-08-07 15:00:58 +00:00
canvas . relativePan ( point ) ;
2017-09-17 09:44:57 +00:00
assert . deepEqual ( canvas . viewportTransform , [ 1 , 0 , 0 , 1 , - 100 , - 100 ] , 'viewport has translation effect applied on top of old one' ) ;
2016-08-07 15:00:58 +00:00
canvas . viewportTransform = fabric . StaticCanvas . prototype . viewportTransform ;
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'getContext' , function ( assert ) {
assert . ok ( typeof canvas . getContext === 'function' ) ;
2016-08-07 15:00:58 +00:00
var context = canvas . getContext ( ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( context , canvas . contextContainer , 'should return the context container' ) ;
2016-08-07 15:00:58 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'calcViewportBoundaries' , function ( assert ) {
assert . ok ( typeof canvas . calcViewportBoundaries === 'function' ) ;
2017-01-30 14:24:32 +00:00
canvas . calcViewportBoundaries ( ) ;
2017-09-17 09:44:57 +00:00
assert . deepEqual ( canvas . vptCoords . tl , new fabric . Point ( 0 , 0 ) , 'tl is 0,0' ) ;
assert . deepEqual ( canvas . vptCoords . tr , new fabric . Point ( canvas . getWidth ( ) , 0 ) , 'tr is width, 0' ) ;
assert . deepEqual ( canvas . vptCoords . bl , new fabric . Point ( 0 , canvas . getHeight ( ) ) , 'bl is 0, height' ) ;
assert . deepEqual ( canvas . vptCoords . br , new fabric . Point ( canvas . getWidth ( ) , canvas . getHeight ( ) ) , 'tl is width, height' ) ;
2017-01-30 14:24:32 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'calcViewportBoundaries with zoom' , function ( assert ) {
assert . ok ( typeof canvas . calcViewportBoundaries === 'function' ) ;
2017-01-30 14:24:32 +00:00
canvas . setViewportTransform ( [ 2 , 0 , 0 , 2 , 0 , 0 ] ) ;
2017-09-17 09:44:57 +00:00
assert . deepEqual ( canvas . vptCoords . tl , new fabric . Point ( 0 , 0 ) , 'tl is 0,0' ) ;
assert . deepEqual ( canvas . vptCoords . tr , new fabric . Point ( canvas . getWidth ( ) / 2 , 0 ) , 'tl is 0,0' ) ;
assert . deepEqual ( canvas . vptCoords . bl , new fabric . Point ( 0 , canvas . getHeight ( ) / 2 ) , 'tl is 0,0' ) ;
assert . deepEqual ( canvas . vptCoords . br , new fabric . Point ( canvas . getWidth ( ) / 2 , canvas . getHeight ( ) / 2 ) , 'tl is 0,0' ) ;
2017-01-30 14:24:32 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'calcViewportBoundaries with zoom and translation' , function ( assert ) {
assert . ok ( typeof canvas . calcViewportBoundaries === 'function' ) ;
2017-01-30 14:24:32 +00:00
canvas . setViewportTransform ( [ 2 , 0 , 0 , 2 , - 60 , 60 ] ) ;
2017-09-17 09:44:57 +00:00
assert . deepEqual ( canvas . vptCoords . tl , new fabric . Point ( 30 , - 30 ) , 'tl is 0,0' ) ;
assert . deepEqual ( canvas . vptCoords . tr , new fabric . Point ( 30 + canvas . getWidth ( ) / 2 , - 30 ) , 'tl is 0,0' ) ;
assert . deepEqual ( canvas . vptCoords . bl , new fabric . Point ( 30 , canvas . getHeight ( ) / 2 - 30 ) , 'tl is 0,0' ) ;
assert . deepEqual ( canvas . vptCoords . br , new fabric . Point ( 30 + canvas . getWidth ( ) / 2 , canvas . getHeight ( ) / 2 - 30 ) , 'tl is 0,0' ) ;
2017-01-30 14:24:32 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( '_isRetinaScaling' , function ( assert ) {
2017-06-12 09:13:55 +00:00
canvas . enableRetinaScaling = true ;
fabric . devicePixelRatio = 2 ;
var isScaling = canvas . _isRetinaScaling ( ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( isScaling , true , 'retina > 1 and enabled' ) ;
2017-06-12 09:13:55 +00:00
canvas . enableRetinaScaling = false ;
fabric . devicePixelRatio = 2 ;
var isScaling = canvas . _isRetinaScaling ( ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( isScaling , false , 'retina > 1 and disabled' ) ;
2017-06-12 09:13:55 +00:00
canvas . enableRetinaScaling = false ;
fabric . devicePixelRatio = 1 ;
var isScaling = canvas . _isRetinaScaling ( ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( isScaling , false , 'retina = 1 and disabled' ) ;
2017-06-12 09:13:55 +00:00
canvas . enableRetinaScaling = true ;
fabric . devicePixelRatio = 1 ;
var isScaling = canvas . _isRetinaScaling ( ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( isScaling , false , 'retina = 1 and enabled' ) ;
2017-06-12 09:13:55 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'getRetinaScaling' , function ( assert ) {
2017-06-12 09:13:55 +00:00
canvas . enableRetinaScaling = true ;
fabric . devicePixelRatio = 1 ;
var scaling = canvas . getRetinaScaling ( ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( scaling , 1 , 'retina is devicePixelRatio' ) ;
2017-06-12 09:13:55 +00:00
fabric . devicePixelRatio = 2 ;
var scaling = canvas . getRetinaScaling ( ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( scaling , 2 , 'retina is devicePixelRatio' ) ;
2017-06-12 09:13:55 +00:00
fabric . devicePixelRatio = 2 ;
canvas . enableRetinaScaling = false ;
var scaling = canvas . getRetinaScaling ( ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( scaling , 1 , 'retina is disabled, 1' ) ;
2017-06-12 09:13:55 +00:00
} ) ;
2016-05-23 12:53:09 +00:00
//how to test with an exception?
2017-09-17 09:44:57 +00:00
/ * Q U n i t . t e s t ( ' o p t i o n s i n s e t B a c k g r o u n d I m a g e f r o m i n v a l i d U R L ' , f u n c t i o n ( a s s e r t ) {
var done = assert . async ( ) ;
2016-05-23 12:53:09 +00:00
canvas . backgroundImage = null ;
2017-09-17 09:44:57 +00:00
canvas . setBackgroundImage ( IMG _SRC + '_not_exist' , function ( ) {
assert . equal ( canvas . backgroundImage , null ) ;
done ( ) ;
2016-05-23 12:53:09 +00:00
} , {
left : 50 ,
originX : 'right'
} ) ;
} ) ; * /
2017-09-17 09:44:57 +00:00
QUnit . test ( 'options in setBackgroundImage from image instance' , function ( assert ) {
var done = assert . async ( ) ;
2015-04-07 09:38:26 +00:00
createImageObject ( function ( imageInstance ) {
canvas . setBackgroundImage ( imageInstance , function ( ) {
2017-09-17 09:44:57 +00:00
assert . equal ( canvas . backgroundImage . left , 100 ) ;
assert . equal ( canvas . backgroundImage . originX , 'center' ) ;
2015-04-23 09:47:23 +00:00
2017-09-17 09:44:57 +00:00
done ( ) ;
2015-04-07 09:38:26 +00:00
} , {
left : 100 ,
originX : 'center'
} ) ;
} ) ;
} ) ;
2017-11-24 18:00:47 +00:00
QUnit . test ( 'createPNGStream' , function ( assert ) {
if ( ! fabric . isLikelyNode ) {
assert . ok ( true , 'not supposed to run outside node' ) ;
}
else {
assert . ok ( typeof canvas . createPNGStream === 'function' , 'there is a createPNGStream method' ) ;
}
} ) ;
QUnit . test ( 'createJPEGStream' , function ( assert ) {
if ( ! fabric . isLikelyNode ) {
assert . ok ( true , 'not supposed to run outside node' ) ;
}
else {
assert . ok ( typeof canvas . createJPEGStream === 'function' , 'there is a createJPEGStream method' ) ;
}
} ) ;
2018-03-31 22:11:53 +00:00
QUnit . test ( 'toSVG with background' , function ( assert ) {
var canvas2 = new fabric . StaticCanvas ( ) ;
canvas2 . backgroundColor = 'red' ;
var svg = canvas2 . toSVG ( ) ;
var expectedSVG = '<?xml version="1.0" encoding="UTF-8" standalone="no" ?>\n<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">\n<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="300" height="150" viewBox="0 0 300 150" xml:space="preserve">\n<desc>Created with Fabric.js ' + fabric . version + '</desc>\n<defs>\n</defs>\n<rect x="0" y="0" width="100%" height="100%" fill="red"></rect>\n</svg>' ;
assert . equal ( svg , expectedSVG , 'svg is as expected' ) ;
} ) ;
QUnit . test ( 'toSVG with background and zoom and svgViewportTransformation' , function ( assert ) {
var canvas2 = new fabric . StaticCanvas ( ) ;
canvas2 . backgroundColor = 'blue' ;
canvas2 . svgViewportTransformation = true ;
canvas2 . viewportTransform = [ 3 , 0 , 0 , 3 , 60 , 30 ] ;
var svg = canvas2 . toSVG ( ) ;
var expectedSVG = '<?xml version="1.0" encoding="UTF-8" standalone="no" ?>\n<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">\n<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="300" height="150" viewBox="-20 -10 100 50" xml:space="preserve">\n<desc>Created with Fabric.js ' + fabric . version + '</desc>\n<defs>\n</defs>\n<rect x="0" y="0" width="100%" height="100%" fill="blue"></rect>\n</svg>' ;
assert . equal ( svg , expectedSVG , 'svg is as expected' ) ;
} ) ;
QUnit . test ( 'toSVG with background gradient' , function ( assert ) {
fabric . Object . _ _uid = 0 ;
var canvas2 = new fabric . StaticCanvas ( ) ;
canvas2 . backgroundColor = new fabric . Gradient ( {
type : 'linear' ,
colorStops : [
{ offset : 0 , color : 'black' } ,
{ offset : 1 , color : 'white' } ,
] ,
coords : {
x1 : 0 ,
x2 : 300 ,
y1 : 0 ,
y2 : 0 ,
} ,
} ) ;
var svg = canvas2 . toSVG ( ) ;
var expectedSVG = '<?xml version="1.0" encoding="UTF-8" standalone="no" ?>\n<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">\n<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="300" height="150" viewBox="0 0 300 150" xml:space="preserve">\n<desc>Created with Fabric.js ' + fabric . version + '</desc>\n<defs>\n<linearGradient id="SVGID_0" gradientUnits="userSpaceOnUse" x1="-150" y1="-75" x2="150" y2="-75">\n<stop offset="0%" style="stop-color:black;"/>\n<stop offset="100%" style="stop-color:white;"/>\n</linearGradient>\n</defs>\n<rect transform="translate(150,75)" x="-150" y="-75" width="300" height="150" fill="url(#SVGID_0)"></rect>\n</svg>' ;
assert . equal ( svg , expectedSVG , 'svg is as expected' ) ;
} ) ;
QUnit . test ( 'toSVG with background pattern' , function ( assert ) {
fabric . Object . _ _uid = 0 ;
var canvas2 = new fabric . StaticCanvas ( ) ;
canvas2 . backgroundColor = new fabric . Pattern ( {
source : 'a.jpeg' ,
repeat : 'repeat' ,
} ) ;
var svg = canvas2 . toSVG ( ) ;
var expectedSVG = '<?xml version="1.0" encoding="UTF-8" standalone="no" ?>\n<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">\n<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="300" height="150" viewBox="0 0 300 150" xml:space="preserve">\n<desc>Created with Fabric.js ' + fabric . version + '</desc>\n<defs>\n<pattern id="SVGID_0" x="0" y="0" width="0" height="0">\n<image x="0" y="0" width="0" height="0" xlink:href=""></image>\n</pattern>\n</defs>\n<rect transform="translate(150,75)" x="-150" y="-75" width="300" height="150" fill="url(#SVGID_0)"></rect>\n</svg>' ;
assert . equal ( svg , expectedSVG , 'svg is as expected' ) ;
} ) ;
2017-09-17 09:44:57 +00:00
// QUnit.test('backgroundImage', function(assert) {
// var done = assert.async();
// assert.deepEqual('', canvas.backgroundImage);
2012-08-10 15:14:56 +00:00
// canvas.setBackgroundImage('../../assets/pug.jpg');
// setTimeout(function() {
2017-09-17 09:44:57 +00:00
// assert.ok(typeof canvas.backgroundImage == 'object');
// assert.ok(/pug\.jpg$/.test(canvas.backgroundImage.src));
2012-08-10 15:14:56 +00:00
2017-09-17 09:44:57 +00:00
// done();
2012-08-10 15:14:56 +00:00
// }, 1000);
// });
2017-09-17 09:44:57 +00:00
// QUnit.test('setOverlayImage', function(assert) {
// var done = assert.async();
// assert.deepEqual(canvas.overlayImage, undefined);
2012-08-10 15:14:56 +00:00
// canvas.setOverlayImage('../../assets/pug.jpg');
// setTimeout(function() {
2017-09-17 09:44:57 +00:00
// assert.ok(typeof canvas.overlayImage == 'object');
// assert.ok(/pug\.jpg$/.test(canvas.overlayImage.src));
2012-08-10 15:14:56 +00:00
2017-09-17 09:44:57 +00:00
// done();
2012-08-10 15:14:56 +00:00
// }, 1000);
// });
2013-02-06 06:20:56 +00:00
} ) ( ) ;