2012-08-10 15:14:56 +00:00
( function ( ) {
2017-04-27 21:03:00 +00:00
2017-08-29 20:23:42 +00:00
var EMPTY _JSON = '{"version":"' + fabric . version + '","objects":[]}' ;
2012-08-10 15:14:56 +00:00
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
2017-08-29 20:23:42 +00:00
var PATH _JSON = '{"version":"' + fabric . version + '","objects": [{"version":"' + fabric . version + '","type": "path", "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": [{"version":"' + fabric . version + '","type": "path", "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 _OBJ _JSON = '{"version":"' + fabric . version + '","type": "path", "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-09-12 18:10:23 +00:00
'13.99], ["z", null]]}' ;
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,"scaleX":1,"scaleY":1,"angle":0,"flipX":false,"flipY":false,"opacity":1,' +
2016-09-10 13:14:23 +00:00
'"shadow":null,' +
2017-09-17 20:47:35 +00:00
'"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
2016-08-07 15:00:58 +00:00
function _createImageElement ( ) {
2017-11-19 19:00:01 +00:00
return fabric . document . createElement ( 'img' ) ;
2016-08-07 15:00:58 +00:00
}
function getAbsolutePath ( path ) {
var isAbsolute = /^https?:/ . test ( path ) ;
2016-12-28 12:22:23 +00:00
if ( isAbsolute ) { return path ; } ;
2016-08-07 15:00:58 +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' ) ;
2016-08-07 15:00:58 +00:00
2017-11-19 19:00:01 +00:00
var canvas = this . canvas = new fabric . Canvas ( null , { enableRetinaScaling : false , width : 600 , height : 600 } ) ;
2012-08-10 15:14:56 +00:00
var upperCanvasEl = canvas . upperCanvasEl ;
var lowerCanvasEl = canvas . lowerCanvasEl ;
function makeRect ( options ) {
var defaultOptions = { width : 10 , height : 10 } ;
return new fabric . Rect ( fabric . util . object . extend ( defaultOptions , options || { } ) ) ;
}
2016-04-23 00:00:24 +00:00
function makeTriangle ( options ) {
2016-07-16 15:25:34 +00:00
var defaultOptions = { width : 30 , height : 30 } ;
2016-04-23 00:00:24 +00:00
return new fabric . Triangle ( fabric . util . object . extend ( defaultOptions , options || { } ) ) ;
}
2012-08-10 15:14:56 +00:00
QUnit . module ( 'fabric.Canvas' , {
2017-09-17 09:44:57 +00:00
beforeEach : function ( ) {
2012-08-10 15:14:56 +00:00
upperCanvasEl . style . display = '' ;
2016-08-07 15:00:58 +00:00
canvas . controlsAboveOverlay = fabric . Canvas . prototype . controlsAboveOverlay ;
canvas . preserveObjectStacking = fabric . Canvas . prototype . preserveObjectStacking ;
2012-08-10 15:14:56 +00:00
} ,
2017-09-17 09:44:57 +00:00
afterEach : function ( ) {
2012-08-10 15:14:56 +00:00
canvas . clear ( ) ;
canvas . backgroundColor = fabric . Canvas . prototype . backgroundColor ;
2013-11-03 12:09:49 +00:00
canvas . overlayColor = fabric . Canvas . prototype . overlayColor ;
2017-09-17 09:44:57 +00:00
canvas . _collectObjects = fabric . Canvas . prototype . _collectObjects ;
2017-09-16 18:27:45 +00:00
canvas . off ( ) ;
2012-08-10 15:14:56 +00:00
canvas . calcOffset ( ) ;
upperCanvasEl . style . display = 'none' ;
}
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'initialProperties' , function ( assert ) {
assert . ok ( 'backgroundColor' in canvas ) ;
assert . equal ( canvas . includeDefaultValues , true ) ;
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 ( '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 ( 'preserveObjectStacking' , function ( assert ) {
assert . ok ( typeof canvas . preserveObjectStacking == 'boolean' ) ;
assert . ok ( ! canvas . preserveObjectStacking , 'default is false' ) ;
2016-08-07 15:00:58 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'uniScaleTransform' , function ( assert ) {
assert . ok ( typeof canvas . uniScaleTransform == 'boolean' ) ;
assert . ok ( ! canvas . uniScaleTransform , 'default is false' ) ;
2016-08-07 15:00:58 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'uniScaleKey' , function ( assert ) {
assert . ok ( typeof canvas . uniScaleKey == 'string' ) ;
assert . equal ( canvas . uniScaleKey , 'shiftKey' , 'default is shift' ) ;
2016-08-07 15:00:58 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'centeredScaling' , function ( assert ) {
assert . ok ( typeof canvas . centeredScaling == 'boolean' ) ;
assert . ok ( ! canvas . centeredScaling , 'default is false' ) ;
2016-08-07 15:00:58 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'centeredRotation' , function ( assert ) {
assert . ok ( typeof canvas . centeredRotation == 'boolean' ) ;
assert . ok ( ! canvas . centeredRotation , 'default is false' ) ;
2016-08-07 15:00:58 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'centeredKey' , function ( assert ) {
assert . ok ( typeof canvas . centeredKey == 'string' ) ;
assert . equal ( canvas . centeredKey , 'altKey' , 'default is alt' ) ;
2016-08-07 15:00:58 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'altActionKey' , function ( assert ) {
assert . ok ( typeof canvas . altActionKey == 'string' ) ;
assert . equal ( canvas . altActionKey , 'shiftKey' , 'default is shift' ) ;
2016-08-07 15:00:58 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'interactive' , function ( assert ) {
assert . ok ( typeof canvas . interactive == 'boolean' ) ;
assert . ok ( canvas . interactive , 'default is true' ) ;
2016-08-07 15:00:58 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'selection' , function ( assert ) {
assert . ok ( typeof canvas . selection == 'boolean' ) ;
assert . ok ( canvas . selection , 'default is true' ) ;
2016-08-07 15:00:58 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( '_initInteractive' , function ( assert ) {
assert . ok ( typeof canvas . _initInteractive === 'function' ) ;
2016-08-07 15:00:58 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'renderTop' , function ( assert ) {
assert . ok ( typeof canvas . renderTop === 'function' ) ;
assert . equal ( canvas , canvas . renderTop ( ) ) ;
2016-08-07 15:00:58 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( '_chooseObjectsToRender' , function ( assert ) {
assert . ok ( typeof canvas . _chooseObjectsToRender === 'function' ) ;
2016-08-07 15:00:58 +00:00
var rect = makeRect ( ) , rect2 = makeRect ( ) , rect3 = makeRect ( ) ;
canvas . add ( rect ) ;
canvas . add ( rect2 ) ;
canvas . add ( rect3 ) ;
var objs = canvas . _chooseObjectsToRender ( ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( objs [ 0 ] , rect ) ;
assert . equal ( objs [ 1 ] , rect2 ) ;
assert . equal ( objs [ 2 ] , rect3 ) ;
2016-08-07 15:00:58 +00:00
canvas . setActiveObject ( rect ) ;
objs = canvas . _chooseObjectsToRender ( ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( objs [ 0 ] , rect2 ) ;
assert . equal ( objs [ 1 ] , rect3 ) ;
assert . equal ( objs [ 2 ] , rect ) ;
2016-08-07 15:00:58 +00:00
canvas . setActiveObject ( rect2 ) ;
canvas . preserveObjectStacking = true ;
objs = canvas . _chooseObjectsToRender ( ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( objs [ 0 ] , rect ) ;
assert . equal ( objs [ 1 ] , rect2 ) ;
assert . equal ( objs [ 2 ] , rect3 ) ;
2016-08-07 15:00:58 +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 ( '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' ) ;
2013-12-07 10:07:46 +00:00
} ) ;
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 actual hovered target' , function ( assert ) {
2017-01-28 16:04:11 +00:00
var rect1 = makeRect ( ) ;
canvas . add ( rect1 ) ;
canvas . _hoveredTarget = rect1 ;
canvas . remove ( rect1 ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( canvas . _hoveredTarget , null , 'reference to hovered target should be removed' ) ;
2017-01-28 16:04:11 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'before:selection:cleared' , function ( assert ) {
2013-12-07 10:07:46 +00:00
var isFired = false ;
2017-09-17 09:44:57 +00:00
canvas . on ( 'before:selection:cleared' , function ( ) { isFired = true ; } ) ;
2013-12-07 10:07:46 +00:00
canvas . add ( new fabric . Rect ( ) ) ;
canvas . remove ( canvas . item ( 0 ) ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( isFired , false , 'removing inactive object shouldnt fire "before:selection:cleared"' ) ;
2013-12-07 10:07:46 +00:00
canvas . add ( new fabric . Rect ( ) ) ;
canvas . setActiveObject ( canvas . item ( 0 ) ) ;
canvas . remove ( canvas . item ( 0 ) ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( isFired , true , 'removing active object should fire "before:selection:cleared"' ) ;
2013-12-07 10:07:46 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'selection:cleared' , function ( assert ) {
2013-12-07 10:07:46 +00:00
var isFired = false ;
2017-09-17 09:44:57 +00:00
canvas . on ( 'selection:cleared' , function ( ) { isFired = true ; } ) ;
2013-12-07 10:07:46 +00:00
canvas . add ( new fabric . Rect ( ) ) ;
canvas . remove ( canvas . item ( 0 ) ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( isFired , false , 'removing inactive object shouldnt fire "selection:cleared"' ) ;
2013-12-07 10:07:46 +00:00
canvas . add ( new fabric . Rect ( ) ) ;
canvas . setActiveObject ( canvas . item ( 0 ) ) ;
canvas . remove ( canvas . item ( 0 ) ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( isFired , true , 'removing active object should fire "selection:cleared"' ) ;
2017-09-16 18:27:45 +00:00
canvas . off ( 'selection:cleared' ) ;
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'create active selection fires selection:created' , function ( assert ) {
2017-09-16 18:27:45 +00:00
var isFired = false ;
var rect1 = new fabric . Rect ( ) ;
var rect2 = new fabric . Rect ( ) ;
2017-09-17 09:44:57 +00:00
canvas . on ( 'selection:created' , function ( ) { isFired = true ; } ) ;
2017-09-16 18:27:45 +00:00
canvas . setActiveObject ( rect1 ) ;
canvas . _createActiveSelection ( rect2 , { } ) ;
2017-09-17 11:18:13 +00:00
assert . equal ( canvas . _hoveredTarget , canvas . getActiveObject ( ) , 'the created selection is also hovered' ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( isFired , true , 'selection:created fired' ) ;
2017-09-16 18:27:45 +00:00
canvas . off ( 'selection:created' ) ;
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'create active selection fires selected on new object' , function ( assert ) {
2017-09-16 18:27:45 +00:00
var isFired = false ;
var rect1 = new fabric . Rect ( ) ;
var rect2 = new fabric . Rect ( ) ;
2017-09-17 09:44:57 +00:00
rect2 . on ( 'selected' , function ( ) { isFired = true ; } ) ;
2017-09-16 18:27:45 +00:00
canvas . setActiveObject ( rect1 ) ;
canvas . _createActiveSelection ( rect2 , { } ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( isFired , true , 'selected fired on rect2' ) ;
2017-09-16 18:27:45 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'update active selection selection:updated' , function ( assert ) {
2017-09-16 18:27:45 +00:00
var isFired = false ;
var rect1 = new fabric . Rect ( ) ;
var rect2 = new fabric . Rect ( ) ;
var rect3 = new fabric . Rect ( ) ;
2017-09-17 09:44:57 +00:00
canvas . on ( 'selection:updated' , function ( ) { isFired = true ; } ) ;
2017-09-16 18:27:45 +00:00
canvas . setActiveObject ( new fabric . ActiveSelection ( [ rect1 , rect2 ] ) ) ;
canvas . _updateActiveSelection ( rect3 , { } ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( isFired , true , 'selection:updated fired' ) ;
2017-09-17 11:18:13 +00:00
assert . equal ( canvas . _hoveredTarget , canvas . getActiveObject ( ) , 'hovered target is updated' ) ;
2017-09-16 18:27:45 +00:00
canvas . off ( 'selection:updated' ) ;
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'update active selection fires deselected on an object' , function ( assert ) {
2017-09-16 18:27:45 +00:00
var isFired = false ;
var rect1 = new fabric . Rect ( ) ;
var rect2 = new fabric . Rect ( ) ;
2017-09-17 09:44:57 +00:00
rect2 . on ( 'deselected' , function ( ) { isFired = true ; } ) ;
2017-09-16 18:27:45 +00:00
canvas . setActiveObject ( new fabric . ActiveSelection ( [ rect1 , rect2 ] ) ) ;
canvas . _updateActiveSelection ( rect2 , { } ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( isFired , true , 'deselected on rect2 fired' ) ;
2017-09-16 18:27:45 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'update active selection fires selected on an object' , function ( assert ) {
2017-09-16 18:27:45 +00:00
var isFired = false ;
var rect1 = new fabric . Rect ( ) ;
var rect2 = new fabric . Rect ( ) ;
var rect3 = new fabric . Rect ( ) ;
2017-09-17 09:44:57 +00:00
rect3 . on ( 'selected' , function ( ) { isFired = true ; } ) ;
2017-09-16 18:27:45 +00:00
canvas . setActiveObject ( new fabric . ActiveSelection ( [ rect1 , rect2 ] ) ) ;
canvas . _updateActiveSelection ( rect3 , { } ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( isFired , true , 'selected on rect3 fired' ) ;
2012-08-10 15:14:56 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'setActiveObject fires deselected' , function ( assert ) {
2017-02-19 04:03:23 +00:00
var isFired = false ;
var rect1 = new fabric . Rect ( ) ;
var rect2 = new fabric . Rect ( ) ;
2017-09-17 09:44:57 +00:00
rect1 . on ( 'deselected' , function ( ) { isFired = true ; } ) ;
2017-02-19 04:03:23 +00:00
canvas . setActiveObject ( rect1 ) ;
canvas . setActiveObject ( rect2 ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( isFired , true , 'switching active group fires deselected' ) ;
2017-02-19 04:03:23 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( '_createGroup respect order of objects' , function ( assert ) {
2017-09-16 18:27:45 +00:00
var rect1 = new fabric . Rect ( ) ;
var rect2 = new fabric . Rect ( ) ;
canvas . add ( rect1 ) ;
canvas . add ( rect2 ) ;
canvas . setActiveObject ( rect1 ) ;
var selection = canvas . _createGroup ( rect2 ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( selection . getObjects ( ) . indexOf ( rect1 ) , 0 , 'rect1 is the first object in the active selection' ) ;
assert . equal ( selection . getObjects ( ) . indexOf ( rect2 ) , 1 , 'rect2 is the second object in the active selection' ) ;
2017-09-16 18:27:45 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( '_createGroup respect order of objects (inverted)' , function ( assert ) {
2017-09-16 18:27:45 +00:00
var rect1 = new fabric . Rect ( ) ;
var rect2 = new fabric . Rect ( ) ;
canvas . add ( rect1 ) ;
canvas . add ( rect2 ) ;
canvas . setActiveObject ( rect2 ) ;
var selection = canvas . _createGroup ( rect1 ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( selection . getObjects ( ) . indexOf ( rect1 ) , 0 , 'rect1 is the first object in the active selection' ) ;
assert . equal ( selection . getObjects ( ) . indexOf ( rect2 ) , 1 , 'rect2 is the second object in the active selection' ) ;
2017-09-16 18:27:45 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( '_groupSelectedObjects fires selected for objects' , function ( assert ) {
2017-09-16 21:31:11 +00:00
var fired = 0 ;
var rect1 = new fabric . Rect ( ) ;
var rect2 = new fabric . Rect ( ) ;
var rect3 = new fabric . Rect ( ) ;
canvas . _collectObjects = function ( ) {
return [ rect1 , rect2 , rect3 ] ;
} ;
rect1 . on ( 'selected' , function ( ) { fired ++ ; } ) ;
rect2 . on ( 'selected' , function ( ) { fired ++ ; } ) ;
rect3 . on ( 'selected' , function ( ) { fired ++ ; } ) ;
canvas . _groupSelectedObjects ( { } ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( fired , 3 , 'event fired for each of 3 rects' ) ;
2017-09-16 21:31:11 +00:00
canvas . _collectObjects = fabric . Canvas . prototype . _collectObjects ;
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( '_groupSelectedObjects fires selection:created if more than one object is returned' , function ( assert ) {
2017-09-16 21:31:11 +00:00
var isFired = false ;
var rect1 = new fabric . Rect ( ) ;
var rect2 = new fabric . Rect ( ) ;
var rect3 = new fabric . Rect ( ) ;
canvas . _collectObjects = function ( ) {
return [ rect1 , rect2 , rect3 ] ;
} ;
canvas . on ( 'selection:created' , function ( ) { isFired = true ; } ) ;
canvas . _groupSelectedObjects ( { } ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( isFired , true , 'selection created fired' ) ;
assert . equal ( canvas . getActiveObject ( ) . type , 'activeSelection' , 'an active selection is created' ) ;
assert . equal ( canvas . getActiveObjects ( ) [ 2 ] , rect1 , 'rect1 is first object' ) ;
assert . equal ( canvas . getActiveObjects ( ) [ 1 ] , rect2 , 'rect2 is second object' ) ;
assert . equal ( canvas . getActiveObjects ( ) [ 0 ] , rect3 , 'rect3 is third object' ) ;
assert . equal ( canvas . getActiveObjects ( ) . length , 3 , 'contains exactly 3 objects' ) ;
2017-09-16 21:31:11 +00:00
canvas . _collectObjects = fabric . Canvas . prototype . _collectObjects ;
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( '_groupSelectedObjects fires selection:created if one only object is returned' , function ( assert ) {
2017-09-16 21:31:11 +00:00
var isFired = false ;
var rect1 = new fabric . Rect ( ) ;
canvas . _collectObjects = function ( ) {
return [ rect1 ] ;
} ;
canvas . on ( 'object:selected' , function ( ) { isFired = true ; } ) ;
canvas . _groupSelectedObjects ( { } ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( isFired , true , 'object:selected fired for _groupSelectedObjects' ) ;
assert . equal ( canvas . getActiveObject ( ) , rect1 , 'rect1 is set as activeObject' ) ;
2017-09-16 21:31:11 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( '_collectObjects collects object contained in area' , function ( assert ) {
2017-09-16 21:31:11 +00:00
var rect1 = new fabric . Rect ( { width : 10 , height : 10 , top : 0 , left : 0 } ) ;
var rect2 = new fabric . Rect ( { width : 10 , height : 10 , top : 0 , left : 10 } ) ;
var rect3 = new fabric . Rect ( { width : 10 , height : 10 , top : 10 , left : 0 } ) ;
var rect4 = new fabric . Rect ( { width : 10 , height : 10 , top : 10 , left : 10 } ) ;
canvas . add ( rect1 , rect2 , rect3 , rect4 ) ;
canvas . _groupSelector = {
top : 15 ,
left : 15 ,
ex : 1 ,
ey : 1
} ;
var collected = canvas . _collectObjects ( ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( collected . length , 4 , 'a rect that contains all objects collects them all' ) ;
assert . equal ( collected [ 3 ] , rect1 , 'contains rect1 as last object' ) ;
assert . equal ( collected [ 2 ] , rect2 , 'contains rect2' ) ;
assert . equal ( collected [ 1 ] , rect3 , 'contains rect3' ) ;
assert . equal ( collected [ 0 ] , rect4 , 'contains rect4 as first object' ) ;
2017-09-16 21:31:11 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( '_collectObjects do not collects object if area is outside' , function ( assert ) {
2017-09-16 21:31:11 +00:00
var rect1 = new fabric . Rect ( { width : 10 , height : 10 , top : 0 , left : 0 } ) ;
var rect2 = new fabric . Rect ( { width : 10 , height : 10 , top : 0 , left : 10 } ) ;
var rect3 = new fabric . Rect ( { width : 10 , height : 10 , top : 10 , left : 0 } ) ;
var rect4 = new fabric . Rect ( { width : 10 , height : 10 , top : 10 , left : 10 } ) ;
canvas . add ( rect1 , rect2 , rect3 , rect4 ) ;
canvas . _groupSelector = {
top : 1 ,
left : 1 ,
ex : 24 ,
ey : 24
} ;
var collected = canvas . _collectObjects ( ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( collected . length , 0 , 'a rect outside objects do not collect any of them' ) ;
2017-09-16 21:31:11 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( '_collectObjects collect included objects that are not touched by the selection sides' , function ( assert ) {
2017-09-16 21:31:11 +00:00
var rect1 = new fabric . Rect ( { width : 10 , height : 10 , top : 5 , left : 5 } ) ;
canvas . add ( rect1 ) ;
canvas . _groupSelector = {
top : 20 ,
left : 20 ,
ex : 1 ,
ey : 1
} ;
var collected = canvas . _collectObjects ( ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( collected . length , 1 , 'a rect that contains all objects collects them all' ) ;
assert . equal ( collected [ 0 ] , rect1 , 'rect1 is collected' ) ;
2017-09-16 21:31:11 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( '_collectObjects collect topmost object if no dragging occurs' , function ( assert ) {
2017-09-16 21:31:11 +00:00
var rect1 = new fabric . Rect ( { width : 10 , height : 10 , top : 0 , left : 0 } ) ;
var rect2 = new fabric . Rect ( { width : 10 , height : 10 , top : 0 , left : 0 } ) ;
var rect3 = new fabric . Rect ( { width : 10 , height : 10 , top : 0 , left : 0 } ) ;
canvas . add ( rect1 , rect2 , rect3 ) ;
canvas . _groupSelector = {
top : 0 ,
left : 0 ,
ex : 1 ,
ey : 1
} ;
var collected = canvas . _collectObjects ( ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( collected . length , 1 , 'a rect that contains all objects collects them all' ) ;
assert . equal ( collected [ 0 ] , rect3 , 'rect3 is collected' ) ;
2017-09-16 21:31:11 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( '_collectObjects collect objects if the drag is inside the object' , function ( assert ) {
2017-09-16 21:31:11 +00:00
var rect1 = new fabric . Rect ( { width : 10 , height : 10 , top : 0 , left : 0 } ) ;
var rect2 = new fabric . Rect ( { width : 10 , height : 10 , top : 0 , left : 0 } ) ;
var rect3 = new fabric . Rect ( { width : 10 , height : 10 , top : 0 , left : 0 } ) ;
canvas . add ( rect1 , rect2 , rect3 ) ;
canvas . _groupSelector = {
top : 2 ,
left : 2 ,
ex : 1 ,
ey : 1
} ;
var collected = canvas . _collectObjects ( ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( collected . length , 3 , 'a rect that contains all objects collects them all' ) ;
assert . equal ( collected [ 0 ] , rect3 , 'rect3 is collected' ) ;
assert . equal ( collected [ 1 ] , rect2 , 'rect2 is collected' ) ;
assert . equal ( collected [ 2 ] , rect1 , 'rect1 is collected' ) ;
2017-09-16 21:31:11 +00:00
} ) ;
2017-11-29 11:40:17 +00:00
QUnit . test ( '_collectObjects collects object fully contained in area' , function ( assert ) {
canvas . selectionFullyContained = true ;
var rect1 = new fabric . Rect ( { width : 10 , height : 10 , top : 0 , left : 0 } ) ;
var rect2 = new fabric . Rect ( { width : 10 , height : 10 , top : 0 , left : 10 } ) ;
var rect3 = new fabric . Rect ( { width : 10 , height : 10 , top : 10 , left : 0 } ) ;
var rect4 = new fabric . Rect ( { width : 10 , height : 10 , top : 10 , left : 10 } ) ;
canvas . add ( rect1 , rect2 , rect3 , rect4 ) ;
canvas . _groupSelector = {
top : 30 ,
left : 30 ,
ex : - 1 ,
ey : - 1
} ;
var collected = canvas . _collectObjects ( ) ;
assert . equal ( collected . length , 4 , 'a rect that contains all objects collects them all' ) ;
assert . equal ( collected [ 3 ] , rect1 , 'contains rect1 as last object' ) ;
assert . equal ( collected [ 2 ] , rect2 , 'contains rect2' ) ;
assert . equal ( collected [ 1 ] , rect3 , 'contains rect3' ) ;
assert . equal ( collected [ 0 ] , rect4 , 'contains rect4 as first object' ) ;
canvas . selectionFullyContained = false ;
} ) ;
QUnit . test ( '_collectObjects does not collect objects not fully contained' , function ( assert ) {
canvas . selectionFullyContained = true ;
var rect1 = new fabric . Rect ( { width : 10 , height : 10 , top : 0 , left : 0 } ) ;
var rect2 = new fabric . Rect ( { width : 10 , height : 10 , top : 0 , left : 10 } ) ;
var rect3 = new fabric . Rect ( { width : 10 , height : 10 , top : 10 , left : 0 } ) ;
var rect4 = new fabric . Rect ( { width : 10 , height : 10 , top : 10 , left : 10 } ) ;
canvas . add ( rect1 , rect2 , rect3 , rect4 ) ;
canvas . _groupSelector = {
top : 20 ,
left : 20 ,
ex : 5 ,
ey : 5
} ;
var collected = canvas . _collectObjects ( ) ;
assert . equal ( collected . length , 1 , 'a rect intersecting objects does not collect those' ) ;
assert . equal ( collected [ 0 ] , rect4 , 'contains rect1 as only one fully contained' ) ;
canvas . selectionFullyContained = false ;
} ) ;
2017-09-29 03:53:07 +00:00
QUnit . test ( '_fireSelectionEvents fires multiple things' , function ( assert ) {
var rect1Deselected = false ;
var rect3Selected = false ;
var rect1 = new fabric . Rect ( ) ;
var rect2 = new fabric . Rect ( ) ;
var rect3 = new fabric . Rect ( ) ;
var activeSelection = new fabric . ActiveSelection ( [ rect1 , rect2 ] ) ;
canvas . setActiveObject ( activeSelection ) ;
rect1 . on ( 'deselected' , function ( ) {
rect1Deselected = true ;
} ) ;
rect3 . on ( 'selected' , function ( ) {
rect3Selected = true ;
} ) ;
var currentObjects = canvas . getActiveObjects ( ) ;
activeSelection . removeWithUpdate ( rect1 ) ;
activeSelection . addWithUpdate ( rect3 ) ;
canvas . _fireSelectionEvents ( currentObjects , { } ) ;
assert . ok ( rect3Selected , 'rect 3 selected' ) ;
assert . ok ( rect1Deselected , 'rect 1 deselected' ) ;
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'getContext' , function ( assert ) {
assert . ok ( typeof canvas . getContext === 'function' ) ;
2012-08-10 15:14:56 +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 . getContext ( ) ) , 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' ) ;
2012-08-10 15:14:56 +00:00
2017-09-17 09:44:57 +00:00
assert . equal ( canvas . clear ( ) , canvas , 'should be chainable' ) ;
assert . equal ( canvas . getObjects ( ) . length , 0 ) ;
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 ( '_drawSelection' , function ( assert ) {
assert . ok ( typeof canvas . _drawSelection === 'function' ) ;
2012-08-10 15:14:56 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'findTarget' , function ( assert ) {
assert . ok ( typeof canvas . findTarget === 'function' ) ;
2016-04-23 00:00:24 +00:00
var rect = makeRect ( { left : 0 , top : 0 } ) , target ;
canvas . add ( rect ) ;
target = canvas . findTarget ( {
clientX : 5 , clientY : 5
2016-07-16 15:25:34 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( target , rect , 'Should return the rect' ) ;
2016-04-23 00:00:24 +00:00
target = canvas . findTarget ( {
clientX : 30 , clientY : 30
2016-07-16 15:25:34 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( target , null , 'Should not find target' ) ;
2016-04-23 00:00:24 +00:00
canvas . remove ( rect ) ;
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'findTarget preserveObjectStacking false' , function ( assert ) {
assert . ok ( typeof canvas . findTarget === 'function' ) ;
2016-07-17 06:35:18 +00:00
canvas . preserveObjectStacking = false ;
var rect = makeRect ( { left : 0 , top : 0 } ) ,
rectOver = makeRect ( { left : 0 , top : 0 } ) ,
target ,
pointer = { clientX : 5 , clientY : 5 } ;
2016-06-02 08:58:02 +00:00
canvas . add ( rect ) ;
2016-07-17 06:35:18 +00:00
canvas . add ( rectOver ) ;
canvas . setActiveObject ( rect ) ;
2016-06-02 08:58:02 +00:00
canvas . renderAll ( ) ;
2016-07-17 06:35:18 +00:00
target = canvas . findTarget ( pointer ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( target , rect , 'Should return the rect' ) ;
2016-07-17 06:35:18 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'findTarget preserveObjectStacking true' , function ( assert ) {
assert . ok ( typeof canvas . findTarget === 'function' ) ;
2016-07-17 06:35:18 +00:00
canvas . preserveObjectStacking = true ;
2016-09-11 19:28:48 +00:00
var rect = makeRect ( { left : 0 , top : 0 , width : 30 , height : 30 } ) ,
rectOver = makeRect ( { left : 0 , top : 0 , width : 30 , height : 30 } ) ,
2016-07-17 06:35:18 +00:00
target ,
2016-09-11 19:28:48 +00:00
pointer = { clientX : 15 , clientY : 15 , 'shiftKey' : true } ,
pointer2 = { clientX : 4 , clientY : 4 } ;
2016-07-17 06:35:18 +00:00
canvas . add ( rect ) ;
canvas . add ( rectOver ) ;
target = canvas . findTarget ( pointer ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( target , rectOver , 'Should return the rectOver, rect is not considered' ) ;
2016-07-17 06:35:18 +00:00
canvas . setActiveObject ( rect ) ;
target = canvas . findTarget ( pointer ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( target , rectOver , 'Should still return rectOver because is above active object' ) ;
2016-09-11 19:28:48 +00:00
target = canvas . findTarget ( pointer2 ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( target , rect , 'Should rect because a corner of the activeObject has been hit' ) ;
2016-09-11 19:28:48 +00:00
canvas . altSelectionKey = 'shiftKey' ;
target = canvas . findTarget ( pointer ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( target , rect , 'Should rect because active and altSelectionKey is pressed' ) ;
2016-07-17 06:35:18 +00:00
canvas . preserveObjectStacking = false ;
2016-06-02 08:58:02 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'findTarget with subTargetCheck' , function ( assert ) {
2016-07-16 15:25:34 +00:00
var rect = makeRect ( { left : 0 , top : 0 } ) ,
2016-05-31 09:41:02 +00:00
rect2 = makeRect ( { left : 30 , top : 30 } ) , target ,
group = new fabric . Group ( [ rect , rect2 ] ) ;
canvas . add ( group ) ;
target = canvas . findTarget ( {
clientX : 5 , clientY : 5
} , true ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( target , group , 'Should return the group' ) ;
assert . equal ( canvas . targets [ 0 ] , undefined , 'no subtarget should return' ) ;
2016-05-31 09:41:02 +00:00
target = canvas . findTarget ( {
clientX : 30 , clientY : 30
2016-07-16 15:25:34 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( target , group , 'Should return the group' ) ;
2016-05-31 09:41:02 +00:00
group . subTargetCheck = true ;
target = canvas . findTarget ( {
clientX : 5 , clientY : 5
2016-07-16 15:25:34 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( target , group , 'Should return the group' ) ;
assert . equal ( canvas . targets [ 0 ] , rect , 'should return the rect' ) ;
2016-05-31 09:41:02 +00:00
target = canvas . findTarget ( {
clientX : 15 , clientY : 15
2016-07-16 15:25:34 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( target , group , 'Should return the group' ) ;
assert . equal ( canvas . targets [ 0 ] , undefined , 'no subtarget should return' ) ;
2016-05-31 09:41:02 +00:00
target = canvas . findTarget ( {
clientX : 32 , clientY : 32
2016-07-16 15:25:34 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( target , group , 'Should return the group' ) ;
assert . equal ( canvas . targets [ 0 ] , rect2 , 'should return the rect2' ) ;
2016-05-31 09:41:02 +00:00
canvas . remove ( group ) ;
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'findTarget with subTargetCheck on activeObject' , function ( assert ) {
2017-05-06 13:03:07 +00:00
var rect = makeRect ( { left : 0 , top : 0 } ) ,
rect2 = makeRect ( { left : 30 , top : 30 } ) , target ,
group = new fabric . Group ( [ rect , rect2 ] ) ;
canvas . add ( group ) ;
canvas . setActiveObject ( group ) ;
group . subTargetCheck = true ;
target = canvas . findTarget ( {
clientX : 9 , clientY : 9
} ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( target , group , 'Should return the group' ) ;
assert . equal ( canvas . targets [ 0 ] , rect , 'should return the rect' ) ;
2017-09-08 10:05:06 +00:00
target = canvas . findTarget ( {
clientX : 9 , clientY : 9
} ) ;
target = canvas . findTarget ( {
clientX : 9 , clientY : 9
} ) ;
target = canvas . findTarget ( {
clientX : 9 , clientY : 9
} ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( canvas . targets . length , 1 , 'multiple calls to subtarget should not add more to targets' ) ;
2017-09-08 10:05:06 +00:00
canvas . remove ( group ) ;
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'findTarget with subTargetCheck on activeObject and preserveObjectStacking true' , function ( assert ) {
2017-09-08 10:05:06 +00:00
var rect = makeRect ( { left : 0 , top : 0 } ) ,
rect2 = makeRect ( { left : 30 , top : 30 } ) , target ,
group = new fabric . Group ( [ rect , rect2 ] ) ;
canvas . preserveObjectStacking = true ;
canvas . add ( group ) ;
canvas . setActiveObject ( group ) ;
group . subTargetCheck = true ;
target = canvas . findTarget ( {
clientX : 9 , clientY : 9
} ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( target , group , 'Should return the group' ) ;
assert . equal ( canvas . targets [ 0 ] , rect , 'should return the rect' ) ;
2017-05-06 13:03:07 +00:00
target = canvas . findTarget ( {
clientX : 9 , clientY : 9
} ) ;
target = canvas . findTarget ( {
clientX : 9 , clientY : 9
} ) ;
target = canvas . findTarget ( {
clientX : 9 , clientY : 9
} ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( canvas . targets . length , 1 , 'multiple calls to subtarget should not add more to targets' ) ;
2017-05-06 13:03:07 +00:00
canvas . remove ( group ) ;
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'findTarget with perPixelTargetFind' , function ( assert ) {
assert . ok ( typeof canvas . findTarget === 'function' ) ;
2016-04-23 00:00:24 +00:00
var triangle = makeTriangle ( { left : 0 , top : 0 } ) , target ;
canvas . add ( triangle ) ;
target = canvas . findTarget ( {
2016-07-16 15:25:34 +00:00
clientX : 5 , clientY : 5
} ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( target , triangle , 'Should return the triangle by bounding box' ) ;
2016-04-23 00:00:24 +00:00
//TODO find out why this stops the tests
2016-07-16 15:25:34 +00:00
canvas . perPixelTargetFind = true ;
2016-04-23 00:00:24 +00:00
target = canvas . findTarget ( {
clientX : 5 , clientY : 5
2016-07-16 15:25:34 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( target , null , 'Should return null because of transparency checks' ) ;
2016-07-16 15:25:34 +00:00
target = canvas . findTarget ( {
clientX : 15 , clientY : 15
} ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( target , triangle , 'Should return the triangle now' ) ;
2016-04-23 00:00:24 +00:00
canvas . perPixelTargetFind = false ;
canvas . remove ( triangle ) ;
2012-08-10 15:14:56 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'findTarget on activegroup' , function ( assert ) {
2016-04-23 00:00:24 +00:00
var rect1 = makeRect ( { left : 0 , top : 0 } ) , target ;
2016-07-16 15:25:34 +00:00
var rect2 = makeRect ( { left : 20 , top : 20 } ) ;
var rect3 = makeRect ( { left : 20 , top : 0 } ) ;
2016-04-23 00:00:24 +00:00
canvas . add ( rect1 ) ;
canvas . add ( rect2 ) ;
2016-07-16 15:25:34 +00:00
canvas . add ( rect3 ) ;
2017-07-22 09:37:17 +00:00
var group = new fabric . ActiveSelection ( [ rect1 , rect2 ] ) ;
canvas . setActiveObject ( group ) ;
2016-04-23 00:00:24 +00:00
target = canvas . findTarget ( {
clientX : 5 , clientY : 5
2016-07-16 15:25:34 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( target , group , 'Should return the activegroup' ) ;
2016-07-16 15:25:34 +00:00
target = canvas . findTarget ( {
clientX : 40 , clientY : 15
} ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( target , null , 'Should miss the activegroup' ) ;
2016-07-16 15:25:34 +00:00
target = canvas . findTarget ( {
clientX : 5 , clientY : 5
} , true ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( target , rect1 , 'Should return the rect inside activegroup' ) ;
2016-07-16 15:25:34 +00:00
target = canvas . findTarget ( {
clientX : 25 , clientY : 5
} ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( target , group , 'Should return the activegroup' ) ;
2016-07-16 15:25:34 +00:00
target = canvas . findTarget ( {
clientX : 25 , clientY : 5
2016-04-23 00:00:24 +00:00
} , true ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( target , rect3 , 'Should return the rect behind activegroup' ) ;
2016-07-16 15:25:34 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'findTarget on activegroup with perPixelTargetFind' , function ( assert ) {
2016-07-16 15:25:34 +00:00
var rect1 = makeRect ( { left : 0 , top : 0 } ) , target ;
var rect2 = makeRect ( { left : 20 , top : 20 } ) ;
canvas . perPixelTargetFind = true ;
2016-07-17 06:35:18 +00:00
canvas . preserveObjectStacking = true ;
2016-07-16 15:25:34 +00:00
canvas . add ( rect1 ) ;
canvas . add ( rect2 ) ;
2017-07-22 09:37:17 +00:00
var group = new fabric . ActiveSelection ( [ rect1 , rect2 ] ) ;
canvas . setActiveObject ( group ) ;
2016-07-16 15:25:34 +00:00
target = canvas . findTarget ( {
2016-07-17 06:35:18 +00:00
clientX : 8 , clientY : 8
2016-07-16 15:25:34 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( target , group , 'Should return the activegroup' ) ;
2016-07-16 15:25:34 +00:00
target = canvas . findTarget ( {
clientX : 15 , clientY : 15
} ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( target , null , 'Should miss the activegroup' ) ;
2016-07-16 15:25:34 +00:00
canvas . perPixelTargetFind = false ;
2016-07-17 06:35:18 +00:00
canvas . preserveObjectStacking = false ;
2016-04-23 00:00:24 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'ActiveSelection sendToBack' , function ( assert ) {
2016-04-28 09:21:48 +00:00
var rect1 = makeRect ( ) ,
rect2 = makeRect ( ) ,
rect3 = makeRect ( ) ,
rect4 = makeRect ( ) ;
canvas . add ( rect1 , rect2 , rect3 , rect4 ) ;
2017-07-22 09:37:17 +00:00
var activeSel = new fabric . ActiveSelection ( [ rect3 , rect4 ] ) ;
canvas . setActiveObject ( activeSel ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( canvas . _objects [ 0 ] , rect1 , 'rect1 should be last' ) ;
assert . equal ( canvas . _objects [ 1 ] , rect2 , 'rect2 should be second' ) ;
2017-07-22 09:37:17 +00:00
canvas . sendToBack ( activeSel ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( canvas . _objects [ 0 ] , rect3 , 'rect3 should be the new last' ) ;
assert . equal ( canvas . _objects [ 1 ] , rect4 , 'rect3 should be the new second' ) ;
assert . equal ( canvas . _objects [ 2 ] , rect1 , 'rect1 should be the third object' ) ;
assert . equal ( canvas . _objects [ 3 ] , rect2 , 'rect2 should be on top now' ) ;
2016-04-28 09:21:48 +00:00
} ) ;
2016-07-16 15:25:34 +00:00
2017-09-17 09:44:57 +00:00
QUnit . test ( 'activeGroup bringToFront' , function ( assert ) {
2016-04-28 09:21:48 +00:00
var rect1 = makeRect ( ) ,
rect2 = makeRect ( ) ,
rect3 = makeRect ( ) ,
rect4 = makeRect ( ) ;
canvas . add ( rect1 , rect2 , rect3 , rect4 ) ;
2017-07-22 09:37:17 +00:00
var activeSel = new fabric . ActiveSelection ( [ rect1 , rect2 ] ) ;
canvas . setActiveObject ( activeSel ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( canvas . _objects [ 0 ] , rect1 , 'rect1 should be last' ) ;
assert . equal ( canvas . _objects [ 1 ] , rect2 , 'rect2 should be second' ) ;
2017-07-22 09:37:17 +00:00
canvas . bringToFront ( activeSel ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( canvas . _objects [ 0 ] , rect3 , 'rect3 should be the new last' ) ;
assert . equal ( canvas . _objects [ 1 ] , rect4 , 'rect3 should be the new second' ) ;
assert . equal ( canvas . _objects [ 2 ] , rect1 , 'rect1 should be the third object' ) ;
assert . equal ( canvas . _objects [ 3 ] , rect2 , 'rect2 should be on top now' ) ;
2016-04-28 09:21:48 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'activeGroup bringForward' , function ( assert ) {
2016-04-28 09:21:48 +00:00
var rect1 = makeRect ( ) ,
rect2 = makeRect ( ) ,
rect3 = makeRect ( ) ,
rect4 = makeRect ( ) ;
canvas . add ( rect1 , rect2 , rect3 , rect4 ) ;
2017-07-22 09:37:17 +00:00
var activeSel = new fabric . ActiveSelection ( [ rect1 , rect2 ] ) ;
canvas . setActiveObject ( activeSel ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( canvas . _objects [ 0 ] , rect1 , 'rect1 should be last' ) ;
assert . equal ( canvas . _objects [ 1 ] , rect2 , 'rect2 should be second' ) ;
2017-07-22 09:37:17 +00:00
canvas . bringForward ( activeSel ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( canvas . _objects [ 0 ] , rect3 , 'rect3 should be the new last' ) ;
assert . equal ( canvas . _objects [ 1 ] , rect1 , 'rect1 should be the new second' ) ;
assert . equal ( canvas . _objects [ 2 ] , rect2 , 'rect2 should be the third object' ) ;
assert . equal ( canvas . _objects [ 3 ] , rect4 , 'rect4 did not move' ) ;
2017-07-22 14:34:47 +00:00
canvas . bringForward ( activeSel ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( canvas . _objects [ 0 ] , rect3 , 'rect3 should be the new last' ) ;
assert . equal ( canvas . _objects [ 1 ] , rect4 , 'rect4 should be the new second' ) ;
assert . equal ( canvas . _objects [ 2 ] , rect1 , 'rect1 should be the third object' ) ;
assert . equal ( canvas . _objects [ 3 ] , rect2 , 'rect2 is the new top' ) ;
2017-07-22 14:34:47 +00:00
canvas . bringForward ( activeSel ) ;
canvas . bringForward ( activeSel ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( canvas . _objects [ 0 ] , rect3 , 'rect3 should be the new last' ) ;
assert . equal ( canvas . _objects [ 1 ] , rect4 , 'rect4 should be the new second' ) ;
assert . equal ( canvas . _objects [ 2 ] , rect1 , 'rect1 is still third' ) ;
assert . equal ( canvas . _objects [ 3 ] , rect2 , 'rect2 is still new top' ) ;
2016-04-28 09:21:48 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'activeGroup sendBackwards' , function ( assert ) {
2016-04-28 09:21:48 +00:00
var rect1 = makeRect ( ) ,
rect2 = makeRect ( ) ,
rect3 = makeRect ( ) ,
rect4 = makeRect ( ) ;
canvas . add ( rect1 , rect2 , rect3 , rect4 ) ;
2017-07-22 09:37:17 +00:00
var activeSel = new fabric . ActiveSelection ( [ rect3 , rect4 ] ) ;
canvas . setActiveObject ( activeSel ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( canvas . _objects [ 0 ] , rect1 , 'rect1 should be last' ) ;
assert . equal ( canvas . _objects [ 1 ] , rect2 , 'rect2 should be second' ) ;
2017-07-22 09:37:17 +00:00
canvas . sendBackwards ( activeSel ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( canvas . _objects [ 0 ] , rect1 , 'rect1 is still last' ) ;
assert . equal ( canvas . _objects [ 1 ] , rect3 , 'rect3 should be shifted down by 1' ) ;
assert . equal ( canvas . _objects [ 2 ] , rect4 , 'rect4 should be shifted down by 1' ) ;
assert . equal ( canvas . _objects [ 3 ] , rect2 , 'rect2 is the new top' ) ;
2017-07-22 14:34:47 +00:00
canvas . sendBackwards ( activeSel ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( canvas . _objects [ 0 ] , rect3 , 'rect3 is last' ) ;
assert . equal ( canvas . _objects [ 1 ] , rect4 , 'rect4 should be shifted down by 1' ) ;
assert . equal ( canvas . _objects [ 2 ] , rect1 , 'rect1 should be shifted down by 1' ) ;
assert . equal ( canvas . _objects [ 3 ] , rect2 , 'rect2 is still on top' ) ;
2017-07-22 14:34:47 +00:00
canvas . sendBackwards ( activeSel ) ;
canvas . sendBackwards ( activeSel ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( canvas . _objects [ 0 ] , rect3 , 'rect3 is still last' ) ;
assert . equal ( canvas . _objects [ 1 ] , rect4 , 'rect4 should be steady' ) ;
assert . equal ( canvas . _objects [ 2 ] , rect1 , 'rect1 should be steady' ) ;
assert . equal ( canvas . _objects [ 3 ] , rect2 , 'rect2 is still on top' ) ;
2016-04-28 09:21:48 +00:00
} ) ;
2016-04-23 00:00:24 +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 {
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' ) ;
2012-08-10 15:14:56 +00:00
}
} ) ;
2017-09-17 09:44:57 +00:00
// QUnit.test('getPointer', function(assert) {
// var done = assert.async();
// assert.ok(typeof canvas.getPointer === 'function');
//
// fabric.util.addListener(upperCanvasEl, 'click', function(e) {
// canvas.calcOffset();
// var pointer = canvas.getPointer(e);
// assert.equal(pointer.x, 101, 'pointer.x should be correct');
// assert.equal(pointer.y, 102, 'pointer.y should be correct');
//
// done();
// });
// setTimeout(function() {
// simulateEvent(upperCanvasEl, 'click', {
// pointerX: 101, pointerY: 102
// });
// }, 100);
// });
QUnit . test ( 'getCenter' , function ( assert ) {
assert . ok ( typeof canvas . getCenter === 'function' ) ;
2012-08-10 15:14:56 +00:00
var center = canvas . getCenter ( ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( center . left , upperCanvasEl . width / 2 ) ;
assert . equal ( center . top , upperCanvasEl . height / 2 ) ;
2012-08-10 15:14:56 +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 , upperCanvasEl . width / 2 , 'object\'s "left" property should correspond to canvas element\'s center' ) ;
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 , upperCanvasEl . height / 2 , 'object\'s "top" property should correspond to canvas element\'s center' ) ;
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 , upperCanvasEl . height / 2 , 'object\'s "top" property should correspond to canvas element\'s center' ) ;
assert . equal ( rect . getCenterPoint ( ) . x , upperCanvasEl . width / 2 , 'object\'s "left" property should correspond to canvas element\'s center' ) ;
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' ) ;
2015-04-23 09:47:23 +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 ( 'toJSON' , function ( assert ) {
assert . ok ( typeof canvas . toJSON === 'function' ) ;
assert . equal ( JSON . stringify ( canvas . toJSON ( ) ) , EMPTY _JSON ) ;
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 `overlayColor` 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 with active group' , function ( assert ) {
2013-06-02 23:55:51 +00:00
var rect = new fabric . Rect ( { width : 50 , height : 50 , left : 100 , top : 100 } ) ;
var circle = new fabric . Circle ( { radius : 50 , left : 50 , top : 50 } ) ;
canvas . add ( rect , circle ) ;
var json = JSON . stringify ( canvas ) ;
2017-07-22 09:37:17 +00:00
canvas . setActiveObject ( new fabric . ActiveSelection ( [ rect , circle ] , { canvas : canvas } ) ) ;
2013-06-02 23:55:51 +00:00
var jsonWithActiveGroup = JSON . stringify ( canvas ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( json , jsonWithActiveGroup ) ;
2013-06-02 23:55:51 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'toDatalessJSON' , function ( assert ) {
2013-11-03 12:09:49 +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 ) ;
2013-11-03 12:09:49 +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 ( 'toDatalessObject' , function ( assert ) {
assert . ok ( typeof canvas . toDatalessObject === '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 . 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 ( '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 Canvas' , function ( assert ) {
var done = assert . async ( ) ;
assert . ok ( typeof canvas . loadFromJSON === 'function' ) ;
2017-01-01 17:07:56 +00:00
canvas . loadFromJSON ( PATH _JSON , function ( ) {
2012-08-10 15:14:56 +00:00
var obj = canvas . item ( 0 ) ;
2012-12-08 12:38:19 +00:00
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-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 ( ) ;
2012-12-08 12:38:19 +00:00
canvas . loadFromJSON ( JSON . parse ( PATH _JSON ) , function ( ) {
var obj = canvas . item ( 0 ) ;
2012-08-10 15:14:56 +00:00
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 ( ) ;
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 ( 'originX' ) , 'left' ) ;
assert . equal ( obj . get ( 'originY' ) , 'top' ) ;
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 . equal ( 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 reviver function' , function ( assert ) {
2013-09-12 18:10:23 +00:00
function reviver ( obj , instance ) {
2017-09-17 09:44:57 +00:00
assert . deepEqual ( obj , JSON . parse ( PATH _OBJ _JSON ) ) ;
2013-09-12 18:10:23 +00:00
if ( instance . type === 'path' ) {
instance . customID = 'fabric_1' ;
}
}
canvas . loadFromJSON ( JSON . parse ( PATH _JSON ) , function ( ) {
2017-09-17 09:44:57 +00:00
var done = assert . async ( ) ;
2013-09-12 18:10:23 +00:00
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 . equal ( obj . get ( 'customID' ) , 'fabric_1' ) ;
assert . ok ( obj . get ( 'path' ) . length > 0 ) ;
done ( ) ;
2013-09-12 18:10:23 +00:00
} , reviver ) ;
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'loadFromJSON with no objects' , function ( assert ) {
var done = assert . async ( ) ;
2016-10-02 17:37:20 +00:00
var canvas1 = fabric . document . createElement ( 'canvas' ) ,
canvas2 = fabric . document . createElement ( 'canvas' ) ,
c1 = new fabric . Canvas ( canvas1 , { backgroundColor : 'green' , overlayColor : 'yellow' } ) ,
c2 = new fabric . Canvas ( canvas2 , { backgroundColor : 'red' , overlayColor : 'orange' } ) ;
2013-06-13 11:39:17 +00:00
var json = c1 . toJSON ( ) ;
var fired = false ;
c2 . loadFromJSON ( json , function ( ) {
fired = true ;
2017-09-17 09:44:57 +00:00
assert . ok ( fired , 'Callback should be fired even if no objects' ) ;
assert . equal ( c2 . backgroundColor , 'green' , 'Color should be set properly' ) ;
assert . equal ( c2 . overlayColor , 'yellow' , 'Color should be set properly' ) ;
done ( ) ;
2013-11-03 12:09:49 +00:00
} ) ;
2013-06-13 11:39:17 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'loadFromJSON without "objects" property' , function ( assert ) {
var done = assert . async ( ) ;
2016-10-02 17:37:20 +00:00
var canvas1 = fabric . document . createElement ( 'canvas' ) ,
canvas2 = fabric . document . createElement ( 'canvas' ) ,
c1 = new fabric . Canvas ( canvas1 , { backgroundColor : 'green' , overlayColor : 'yellow' } ) ,
c2 = new fabric . Canvas ( canvas2 , { backgroundColor : 'red' , overlayColor : 'orange' } ) ;
2014-05-13 11:32:55 +00:00
var json = c1 . toJSON ( ) ;
var fired = false ;
delete json . objects ;
c2 . loadFromJSON ( json , function ( ) {
fired = true ;
2017-09-17 09:44:57 +00:00
assert . ok ( fired , 'Callback should be fired even if no "objects" property exists' ) ;
assert . equal ( c2 . backgroundColor , 'green' , 'Color should be set properly' ) ;
assert . equal ( c2 . overlayColor , 'yellow' , 'Color should be set properly' ) ;
done ( ) ;
2014-05-13 11:32:55 +00:00
} ) ;
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'loadFromJSON with empty fabric.Group' , function ( assert ) {
var done = assert . async ( ) ;
2016-10-02 17:37:20 +00:00
var canvas1 = fabric . document . createElement ( 'canvas' ) ,
canvas2 = fabric . document . createElement ( 'canvas' ) ,
c1 = new fabric . Canvas ( canvas1 ) ,
c2 = new fabric . Canvas ( canvas2 ) ,
2013-11-02 15:02:38 +00:00
group = new fabric . Group ( ) ;
c1 . add ( group ) ;
2017-09-17 09:44:57 +00:00
assert . ok ( ! c1 . isEmpty ( ) , 'canvas is not empty' ) ;
2013-11-02 15:02:38 +00:00
var json = c1 . toJSON ( ) ;
var fired = false ;
c2 . loadFromJSON ( json , function ( ) {
fired = true ;
2017-09-17 09:44:57 +00:00
assert . ok ( fired , 'Callback should be fired even if empty fabric.Group exists' ) ;
done ( ) ;
2013-11-03 12:09:49 +00:00
} ) ;
2013-11-02 15:02:38 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'loadFromJSON with async content' , function ( assert ) {
var done = assert . async ( ) ;
2013-09-12 18:10:23 +00:00
var group = new fabric . Group ( [
new fabric . Rect ( { width : 10 , height : 20 } ) ,
new fabric . Circle ( { radius : 10 } )
] ) ;
var rect = new fabric . Rect ( { width : 20 , height : 10 } ) ;
var circle = new fabric . Circle ( { radius : 25 } ) ;
canvas . add ( group , rect , circle ) ;
var json = JSON . stringify ( canvas ) ;
canvas . clear ( ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( 0 , canvas . getObjects ( ) . length ) ;
2013-09-12 18:10:23 +00:00
canvas . loadFromJSON ( json , function ( ) {
2017-09-17 09:44:57 +00:00
assert . equal ( 3 , canvas . getObjects ( ) . length ) ;
2013-09-12 18:10:23 +00:00
2017-09-17 09:44:57 +00:00
done ( ) ;
2013-09-12 18:10:23 +00:00
} ) ;
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'loadFromDatalessJSON with async content' , function ( assert ) {
var done = assert . async ( ) ;
2013-09-12 18:10:23 +00:00
var circ1 = new fabric . Circle ( { radius : 30 , fill : '#55f' , top : 0 , left : 0 } ) ;
var circ2 = new fabric . Circle ( { radius : 30 , fill : '#f55' , top : 50 , left : 50 } ) ;
var circ3 = new fabric . Circle ( { radius : 30 , fill : '#5f5' , top : 50 , left : 50 } ) ;
var arr = [ circ1 , circ2 ] ;
var group = new fabric . Group ( arr , { top : 150 , left : 150 } ) ;
canvas . add ( circ3 ) ;
canvas . add ( group ) ;
canvas . renderAll ( ) ;
2017-07-22 09:37:17 +00:00
canvas . _discardActiveObject ( ) ;
2013-09-12 18:10:23 +00:00
var json = JSON . stringify ( canvas . toDatalessJSON ( ) ) ;
canvas . clear ( ) ;
canvas . loadFromDatalessJSON ( json , function ( ) {
2017-09-17 09:44:57 +00:00
assert . equal ( 2 , canvas . getObjects ( ) . length ) ;
assert . equal ( 'group' , canvas . getObjects ( ) [ 1 ] . type ) ;
2013-09-12 18:10:23 +00:00
2017-09-17 09:44:57 +00:00
done ( ) ;
2013-09-12 18:10:23 +00:00
} ) ;
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'loadFromJSON with custom properties on Canvas with no async object' , function ( assert ) {
var done = assert . async ( ) ;
2016-08-07 15:00:58 +00:00
var serialized = JSON . parse ( PATH _JSON ) ;
serialized . controlsAboveOverlay = true ;
serialized . preserveObjectStacking = true ;
2017-09-17 09:44:57 +00:00
assert . equal ( canvas . controlsAboveOverlay , fabric . Canvas . prototype . controlsAboveOverlay ) ;
assert . equal ( canvas . preserveObjectStacking , fabric . Canvas . prototype . preserveObjectStacking ) ;
2016-08-07 15:00:58 +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 . controlsAboveOverlay , true ) ;
assert . equal ( canvas . preserveObjectStacking , true ) ;
done ( ) ;
2016-08-07 15:00:58 +00:00
} ) ;
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'loadFromJSON with custom properties on Canvas with image' , function ( assert ) {
var done = assert . async ( ) ;
2018-05-29 08:28:02 +00:00
var JSON _STRING = '{"objects":[{"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-08-07 15:00:58 +00:00
+ '"background":"green"}' ;
var serialized = JSON . parse ( JSON _STRING ) ;
serialized . controlsAboveOverlay = true ;
serialized . preserveObjectStacking = true ;
2017-09-17 09:44:57 +00:00
assert . equal ( canvas . controlsAboveOverlay , fabric . Canvas . prototype . controlsAboveOverlay ) ;
assert . equal ( canvas . preserveObjectStacking , fabric . Canvas . prototype . preserveObjectStacking ) ;
2016-08-07 15:00:58 +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 . controlsAboveOverlay , true ) ;
assert . equal ( canvas . preserveObjectStacking , true ) ;
done ( ) ;
2016-08-07 15:00:58 +00:00
} ) ;
// before callback the properties are still false.
2017-09-17 09:44:57 +00:00
assert . equal ( canvas . controlsAboveOverlay , false ) ;
assert . equal ( canvas . preserveObjectStacking , false ) ;
2016-08-07 15:00:58 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'normalize pointer' , function ( assert ) {
assert . ok ( typeof canvas . _normalizePointer === 'function' ) ;
2016-08-07 15:00:58 +00:00
var pointer = { x : 10 , y : 20 } ,
object = makeRect ( { top : 10 , left : 10 , width : 50 , height : 50 , strokeWidth : 0 } ) ,
normalizedPointer = canvas . _normalizePointer ( object , pointer ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( normalizedPointer . x , - 25 , 'should be in top left corner of rect' ) ;
assert . equal ( normalizedPointer . y , - 15 , 'should be in top left corner of rect' ) ;
2016-08-07 15:00:58 +00:00
object . angle = 90 ;
normalizedPointer = canvas . _normalizePointer ( object , pointer ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( normalizedPointer . x , - 15 , 'should consider angle' ) ;
assert . equal ( normalizedPointer . y , - 25 , 'should consider angle' ) ;
2016-08-07 15:00:58 +00:00
object . angle = 0 ;
object . scaleX = 2 ;
object . scaleY = 2 ;
normalizedPointer = canvas . _normalizePointer ( object , pointer ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( normalizedPointer . x , - 25 , 'should consider scale' ) ;
assert . equal ( normalizedPointer . y , - 20 , 'should consider scale' ) ;
2016-08-07 15:00:58 +00:00
object . skewX = 60 ;
normalizedPointer = canvas . _normalizePointer ( object , pointer ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( normalizedPointer . x . toFixed ( 2 ) , - 33.66 , 'should consider skewX' ) ;
assert . equal ( normalizedPointer . y , - 20 , 'should not change' ) ;
2016-08-07 15:00:58 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'restorePointerVpt' , function ( assert ) {
assert . ok ( typeof canvas . restorePointerVpt === 'function' ) ;
2016-08-07 15:00:58 +00:00
var pointer = { x : 10 , y : 20 } ,
restoredPointer = canvas . restorePointerVpt ( pointer ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( restoredPointer . x , pointer . x , 'no changes if not vpt is set' ) ;
assert . equal ( restoredPointer . y , pointer . y , 'no changes if not vpt is set' ) ;
2016-08-07 15:00:58 +00:00
canvas . viewportTransform = [ 2 , 0 , 0 , 2 , 50 , - 60 ] ;
restoredPointer = canvas . restorePointerVpt ( pointer ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( restoredPointer . x , - 20 , 'vpt changes restored' ) ;
assert . equal ( restoredPointer . y , 40 , 'vpt changes restored' ) ;
2016-08-07 15:00:58 +00:00
canvas . viewportTransform = [ 1 , 0 , 0 , 1 , 0 , 0 ] ;
} ) ;
2017-09-17 09:44:57 +00:00
// QUnit.test('loadFromJSON with backgroundImage', function(assert) {
// var done = assert.async();
2012-08-10 15:14:56 +00:00
// canvas.setBackgroundImage('../../assets/pug.jpg');
// var anotherCanvas = new fabric.Canvas();
// setTimeout(function() {
// var json = JSON.stringify(canvas);
// anotherCanvas.loadFromJSON(json);
// setTimeout(function() {
2017-09-17 09:44:57 +00:00
// assert.equal(JSON.stringify(anotherCanvas), json, 'backgrondImage and properties are initialized correctly');
// done();
2012-08-10 15:14:56 +00:00
// }, 1000);
// }, 1000);
// });
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 ( 'setActiveObject' , function ( assert ) {
assert . ok ( typeof canvas . setActiveObject === 'function' ) ;
2012-08-10 15:14:56 +00:00
var rect1 = makeRect ( ) ,
rect2 = makeRect ( ) ;
canvas . add ( rect1 , rect2 ) ;
canvas . setActiveObject ( rect1 ) ;
2017-09-17 09:44:57 +00:00
assert . ok ( rect1 === canvas . _activeObject ) ;
2012-08-10 15:14:56 +00:00
canvas . setActiveObject ( rect2 ) ;
2017-09-17 09:44:57 +00:00
assert . ok ( rect2 === canvas . _activeObject ) ;
2012-08-10 15:14:56 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'getActiveObject' , function ( assert ) {
assert . ok ( typeof canvas . getActiveObject === 'function' ) ;
assert . equal ( canvas . getActiveObject ( ) , null , 'should initially be null' ) ;
2012-08-10 15:14:56 +00:00
var rect1 = makeRect ( ) ,
rect2 = makeRect ( ) ;
canvas . add ( rect1 , rect2 ) ;
canvas . setActiveObject ( rect1 ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( canvas . getActiveObject ( ) , rect1 ) ;
2012-08-10 15:14:56 +00:00
canvas . setActiveObject ( rect2 ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( canvas . getActiveObject ( ) , rect2 ) ;
2012-08-10 15:14:56 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'getsetActiveObject' , function ( assert ) {
assert . equal ( canvas . getActiveObject ( ) , null , 'should initially be null' ) ;
2012-08-10 15:14:56 +00:00
var group = new fabric . Group ( [
makeRect ( { left : 10 , top : 10 } ) ,
makeRect ( { left : 20 , top : 20 } )
] ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( canvas . setActiveObject ( group ) , canvas , 'should be chainable' ) ;
assert . equal ( canvas . getActiveObject ( ) , group ) ;
2012-08-10 15:14:56 +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 ( 'discardActiveObject on ActiveSelection' , function ( assert ) {
2017-07-22 09:37:17 +00:00
var group = new fabric . ActiveSelection ( [ makeRect ( ) , makeRect ( ) ] ) ;
canvas . setActiveObject ( group ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( canvas . discardActiveObject ( ) , canvas , 'should be chainable' ) ;
assert . equal ( canvas . getActiveObject ( ) , null , 'removing active group sets it to null' ) ;
2012-08-10 15:14:56 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( '_discardActiveObject' , function ( assert ) {
2012-08-10 15:14:56 +00:00
canvas . add ( makeRect ( ) ) ;
canvas . setActiveObject ( canvas . item ( 0 ) ) ;
2017-07-22 09:37:17 +00:00
canvas . _discardActiveObject ( ) ;
2017-09-17 09:44:57 +00:00
assert . ok ( ! canvas . item ( 0 ) . active ) ;
assert . equal ( canvas . getActiveObject ( ) , null ) ;
2012-08-10 15:14:56 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'discardActiveObject' , function ( assert ) {
assert . ok ( typeof canvas . discardActiveObject === 'function' ) ;
2012-08-10 15:14:56 +00:00
canvas . add ( makeRect ( ) ) ;
canvas . setActiveObject ( canvas . item ( 0 ) ) ;
var group = new fabric . Group ( [
makeRect ( { left : 10 , top : 10 } ) ,
makeRect ( { left : 20 , top : 20 } )
] ) ;
2017-07-22 09:37:17 +00:00
canvas . setActiveObject ( group ) ;
2012-08-10 15:14:56 +00:00
var eventsFired = {
selectionCleared : false
} ;
2017-09-17 09:44:57 +00:00
canvas . on ( 'selection:cleared' , function ( ) {
2012-08-10 15:14:56 +00:00
eventsFired . selectionCleared = true ;
} ) ;
2017-07-22 09:37:17 +00:00
canvas . discardActiveObject ( ) ;
2017-09-17 09:44:57 +00:00
assert . ok ( ! canvas . item ( 0 ) . active ) ;
assert . equal ( canvas . getActiveObject ( ) , null ) ;
assert . equal ( canvas . getActiveObject ( ) , null ) ;
2012-08-10 15:14:56 +00:00
for ( var prop in eventsFired ) {
2017-09-17 09:44:57 +00:00
assert . ok ( eventsFired [ prop ] ) ;
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-09-17 09:44:57 +00:00
QUnit . test ( 'toSVG with active group' , function ( assert ) {
2013-06-02 23:55:51 +00:00
var rect = new fabric . Rect ( { width : 50 , height : 50 , left : 100 , top : 100 } ) ;
var circle = new fabric . Circle ( { radius : 50 , left : 50 , top : 50 } ) ;
canvas . add ( rect , circle ) ;
var svg = canvas . toSVG ( ) ;
2017-07-22 09:37:17 +00:00
canvas . setActiveObject ( new fabric . ActiveSelection ( [ rect , circle ] ) ) ;
2013-06-02 23:55:51 +00:00
var svgWithActiveGroup = canvas . toSVG ( ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( svg , svgWithActiveGroup ) ;
2013-06-02 23:55:51 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'active group objects reordering' , function ( assert ) {
2015-04-20 22:45:46 +00:00
var rect1 = new fabric . Rect ( { width : 30 , height : 30 , left : 130 , top : 130 } ) ;
var rect2 = new fabric . Rect ( { width : 50 , height : 50 , left : 100 , top : 100 } ) ;
var circle1 = new fabric . Circle ( { radius : 10 , left : 60 , top : 60 } ) ;
var circle2 = new fabric . Circle ( { radius : 50 , left : 50 , top : 50 } ) ;
canvas . add ( rect1 , rect2 , circle1 , circle2 ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( canvas . _objects [ 0 ] , rect1 ) ;
assert . equal ( canvas . _objects [ 1 ] , rect2 ) ;
assert . equal ( canvas . _objects [ 2 ] , circle1 ) ;
assert . equal ( canvas . _objects [ 3 ] , circle2 ) ;
2017-07-22 09:37:17 +00:00
var aGroup = new fabric . ActiveSelection ( [ rect2 , circle2 , rect1 , circle1 ] ) ;
2015-04-20 22:45:46 +00:00
// before rendering objects are ordered in insert order
2017-09-17 09:44:57 +00:00
assert . equal ( aGroup . _objects [ 0 ] , rect2 ) ;
assert . equal ( aGroup . _objects [ 1 ] , circle2 ) ;
assert . equal ( aGroup . _objects [ 2 ] , rect1 ) ;
assert . equal ( aGroup . _objects [ 3 ] , circle1 ) ;
2017-07-22 09:37:17 +00:00
canvas . setActiveObject ( aGroup ) . renderAll ( ) ;
2015-04-20 22:45:46 +00:00
// after rendering objects are ordered in canvas stack order
2017-09-17 09:44:57 +00:00
assert . equal ( aGroup . _objects [ 0 ] , rect1 ) ;
assert . equal ( aGroup . _objects [ 1 ] , rect2 ) ;
assert . equal ( aGroup . _objects [ 2 ] , circle1 ) ;
assert . equal ( aGroup . _objects [ 3 ] , circle2 ) ;
2015-04-20 22:45:46 +00:00
} ) ;
2016-07-16 15:25:34 +00:00
2017-09-17 09:44:57 +00:00
QUnit . test ( 'dispose' , function ( assert ) {
2016-04-09 14:02:42 +00:00
//made local vars to do not dispose the external canvas
var el = fabric . document . createElement ( 'canvas' ) ,
parentEl = fabric . document . createElement ( 'div' ) ,
wrapperEl , lowerCanvasEl , upperCanvasEl ;
el . width = 200 ; el . height = 200 ;
parentEl . className = 'rootNode' ;
parentEl . appendChild ( el ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( parentEl . firstChild , el , 'canvas should be appended at partentEl' ) ;
assert . equal ( parentEl . childNodes . length , 1 , 'parentEl has 1 child only' ) ;
2016-04-09 14:02:42 +00:00
2017-11-19 19:00:01 +00:00
var canvas = new fabric . Canvas ( el , { enableRetinaScaling : false } ) ;
2016-04-09 14:02:42 +00:00
wrapperEl = canvas . wrapperEl ;
lowerCanvasEl = canvas . lowerCanvasEl ;
upperCanvasEl = canvas . upperCanvasEl ;
2017-09-17 09:44:57 +00:00
assert . equal ( parentEl . childNodes . length , 1 , 'parentEl has still 1 child only' ) ;
assert . equal ( wrapperEl . childNodes . length , 2 , 'wrapper should have 2 children' ) ;
assert . equal ( wrapperEl . tagName , 'DIV' , 'We wrapped canvas with DIV' ) ;
assert . equal ( wrapperEl . className , canvas . containerClass , 'DIV class should be set' ) ;
assert . equal ( wrapperEl . childNodes [ 0 ] , lowerCanvasEl , 'First child should be lowerCanvas' ) ;
assert . equal ( wrapperEl . childNodes [ 1 ] , upperCanvasEl , 'Second child should be upperCanvas' ) ;
2016-04-09 14:02:42 +00:00
if ( ! fabric . isLikelyNode ) {
2017-09-17 09:44:57 +00:00
assert . equal ( parentEl . childNodes [ 0 ] , wrapperEl , 'wrapperEl is appendend to rootNode' ) ;
2016-04-09 14:02:42 +00:00
}
//looks like i cannot use parentNode
//equal(wrapperEl, lowerCanvasEl.parentNode, 'lowerCanvas is appended to wrapperEl');
//equal(wrapperEl, upperCanvasEl.parentNode, 'upperCanvas is appended to wrapperEl');
//equal(parentEl, wrapperEl.parentNode, 'wrapperEl is appendend to rootNode');
2017-09-17 09:44:57 +00:00
assert . equal ( parentEl . childNodes . length , 1 , 'parent div should have 1 child' ) ;
assert . notEqual ( parentEl . firstChild , canvas . getElement ( ) , 'canvas should not be parent div firstChild' ) ;
assert . ok ( typeof canvas . dispose === 'function' ) ;
2016-04-09 14:02:42 +00:00
canvas . add ( makeRect ( ) , makeRect ( ) , makeRect ( ) ) ;
canvas . dispose ( ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( canvas . getObjects ( ) . length , 0 , 'dispose should clear canvas' ) ;
assert . equal ( parentEl . childNodes . length , 1 , 'parent has always 1 child' ) ;
2016-04-09 14:02:42 +00:00
if ( ! fabric . isLikelyNode ) {
2017-09-17 09:44:57 +00:00
assert . equal ( parentEl . childNodes [ 0 ] , lowerCanvasEl , 'canvas should be back to its firstChild place' ) ;
2016-04-09 14:02:42 +00:00
}
2017-09-17 09:44:57 +00:00
assert . equal ( canvas . wrapperEl , null , 'wrapperEl should be deleted' ) ;
assert . equal ( canvas . upperCanvasEl , null , 'upperCanvas should be deleted' ) ;
2018-03-22 11:35:12 +00:00
assert . equal ( canvas . cacheCanvasEl , null , 'cacheCanvasEl should be deleted' ) ;
assert . equal ( canvas . contextTop , null , 'contextTop should be deleted' ) ;
assert . equal ( canvas . contextCache , null , 'contextCache should be deleted' ) ;
2016-04-09 14:02:42 +00:00
} ) ;
2016-07-16 15:25:34 +00:00
2017-09-17 09:44:57 +00:00
// QUnit.test('dispose', function(assert) {
2012-08-10 15:14:56 +00:00
// function invokeEventsOnCanvas() {
// // nextSibling because we need to invoke events on upper canvas
// simulateEvent(canvas.getElement().nextSibling, 'mousedown');
// simulateEvent(canvas.getElement().nextSibling, 'mouseup');
// simulateEvent(canvas.getElement().nextSibling, 'mousemove');
// }
// var assertInvocationsCount = function() {
// var message = 'event handler should not be invoked after `dispose`';
2017-09-17 09:44:57 +00:00
// assert.equal(handlerInvocationCounts.__onMouseDown, 1);
// assert.equal(handlerInvocationCounts.__onMouseUp, 1);
// assert.equal(handlerInvocationCounts.__onMouseMove, 1);
2012-08-10 15:14:56 +00:00
// };
2017-09-17 09:44:57 +00:00
// assert.ok(typeof canvas.dispose === 'function');
2012-08-10 15:14:56 +00:00
// canvas.add(makeRect(), makeRect(), makeRect());
// var handlerInvocationCounts = {
// __onMouseDown: 0, __onMouseUp: 0, __onMouseMove: 0
// };
// // hijack event handlers
// canvas.__onMouseDown = function() {
// handlerInvocationCounts.__onMouseDown++;
// };
// canvas.__onMouseUp = function() {
// handlerInvocationCounts.__onMouseUp++;
// };
// canvas.__onMouseMove = function() {
// handlerInvocationCounts.__onMouseMove++;
// };
// invokeEventsOnCanvas();
// assertInvocationsCount();
// canvas.dispose();
2017-09-17 09:44:57 +00:00
// assert.equal(canvas.getObjects().length, 0, 'dispose should clear canvas');
2012-08-10 15:14:56 +00:00
// invokeEventsOnCanvas();
// assertInvocationsCount();
// });
2017-09-17 09:44:57 +00:00
QUnit . test ( 'clone' , function ( assert ) {
var done = assert . async ( ) ;
assert . ok ( typeof canvas . clone === 'function' ) ;
2012-08-10 15:14:56 +00:00
canvas . add ( new fabric . Rect ( { width : 100 , height : 110 , top : 120 , left : 130 , fill : 'rgba(0,1,2,0.3)' } ) ) ;
var canvasData = JSON . stringify ( canvas ) ;
canvas . clone ( function ( clone ) {
2017-09-17 09:44:57 +00:00
assert . ok ( clone instanceof fabric . Canvas ) ;
2012-08-10 15:14:56 +00:00
// alert(JSON.stringify(clone));
2017-09-17 09:44:57 +00:00
assert . equal ( canvasData , JSON . stringify ( clone ) , 'data on cloned canvas should be identical' ) ;
2012-08-10 15:14:56 +00:00
2017-09-17 09:44:57 +00:00
assert . equal ( canvas . getWidth ( ) , clone . getWidth ( ) ) ;
assert . equal ( canvas . getHeight ( ) , clone . getHeight ( ) ) ;
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
} ) ;
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'cloneWithoutData' , function ( assert ) {
var done = assert . async ( ) ;
assert . ok ( typeof canvas . cloneWithoutData === 'function' ) ;
2012-08-10 15:14:56 +00:00
canvas . add ( new fabric . Rect ( { width : 100 , height : 110 , top : 120 , left : 130 , fill : 'rgba(0,1,2,0.3)' } ) ) ;
canvas . cloneWithoutData ( function ( clone ) {
2017-09-17 09:44:57 +00:00
assert . ok ( clone instanceof fabric . Canvas ) ;
2012-08-10 15:14:56 +00:00
2017-09-17 09:44:57 +00:00
assert . equal ( JSON . stringify ( clone ) , EMPTY _JSON , 'data on cloned canvas should be empty' ) ;
2012-08-10 15:14:56 +00:00
2017-09-17 09:44:57 +00:00
assert . equal ( canvas . getWidth ( ) , clone . getWidth ( ) ) ;
assert . equal ( canvas . getHeight ( ) , clone . getHeight ( ) ) ;
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
} ) ;
} ) ;
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 . upperCanvasEl . style . width , '100%' , 'Should be as the css only value' ) ;
assert . equal ( canvas . wrapperEl . 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 . upperCanvasEl . style . height , '100%' , 'Should be as the css only value' ) ;
assert . equal ( canvas . wrapperEl . 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 . upperCanvasEl . style . width , 123 + 'px' , 'Should be as none backstore only value + "px"' ) ;
assert . equal ( canvas . wrapperEl . 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 . upperCanvasEl . style . height , 123 + 'px' , 'Should be as none backstore only value + "px"' ) ;
assert . equal ( canvas . wrapperEl . 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 ( 'containsPoint' , function ( assert ) {
assert . ok ( typeof canvas . containsPoint === 'function' ) ;
2012-08-10 15:14:56 +00:00
2013-11-03 23:15:49 +00:00
var rect = new fabric . Rect ( { left : 75 , top : 75 , width : 50 , height : 50 } ) ;
2012-08-10 15:14:56 +00:00
canvas . add ( rect ) ;
var canvasEl = canvas . getElement ( ) ,
canvasOffset = fabric . util . getElementOffset ( canvasEl ) ;
var eventStub = {
2012-10-24 18:56:48 +00:00
clientX : canvasOffset . left + 100 ,
clientY : canvasOffset . top + 100 ,
target : rect
2012-08-10 15:14:56 +00:00
} ;
2017-09-17 09:44:57 +00:00
assert . ok ( canvas . containsPoint ( eventStub , rect ) , 'point at (100, 100) should be within area (75, 75, 125, 125)' ) ;
2012-08-10 15:14:56 +00:00
eventStub = {
2012-10-24 18:56:48 +00:00
clientX : canvasOffset . left + 200 ,
clientY : canvasOffset . top + 200 ,
target : rect
2012-08-10 15:14:56 +00:00
} ;
2017-09-17 09:44:57 +00:00
assert . ok ( ! canvas . containsPoint ( eventStub , rect ) , 'point at (200, 200) should NOT be within area (75, 75, 125, 125)' ) ;
2012-08-10 15:14:56 +00:00
2013-11-03 23:15:49 +00:00
rect . set ( 'left' , 175 ) . set ( 'top' , 175 ) . setCoords ( ) ;
2017-09-17 09:44:57 +00:00
assert . ok ( canvas . containsPoint ( eventStub , rect ) , 'on rect at (200, 200) should be within area (175, 175, 225, 225)' ) ;
2012-08-10 15:14:56 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'setupCurrentTransform' , function ( assert ) {
assert . ok ( typeof canvas . _setupCurrentTransform === 'function' ) ;
2016-08-07 15:00:58 +00:00
var rect = new fabric . Rect ( { left : 75 , top : 75 , width : 50 , height : 50 } ) ;
canvas . add ( rect ) ;
var canvasEl = canvas . getElement ( ) ,
canvasOffset = fabric . util . getElementOffset ( canvasEl ) ;
var eventStub = {
clientX : canvasOffset . left + 100 ,
clientY : canvasOffset . top + 100 ,
target : rect
} ;
2017-08-14 13:14:41 +00:00
canvas . setActiveObject ( rect ) ;
2016-08-07 15:00:58 +00:00
canvas . _setupCurrentTransform ( eventStub , rect ) ;
var t = canvas . _currentTransform ;
2017-09-17 09:44:57 +00:00
assert . equal ( t . target , rect , 'should have rect as a target' ) ;
assert . equal ( t . action , 'drag' , 'should target inside rect and setup drag' ) ;
assert . equal ( t . corner , 0 , 'no corner selected' ) ;
assert . equal ( t . originX , rect . originX , 'no origin change for drag' ) ;
assert . equal ( t . originY , rect . originY , 'no origin change for drag' ) ;
2016-08-07 15:00:58 +00:00
eventStub = {
clientX : canvasOffset . left + rect . oCoords . tl . corner . tl . x + 1 ,
clientY : canvasOffset . top + rect . oCoords . tl . corner . tl . y + 1 ,
target : rect
} ;
canvas . _setupCurrentTransform ( eventStub , rect ) ;
t = canvas . _currentTransform ;
2017-09-17 09:44:57 +00:00
assert . equal ( t . target , rect , 'should have rect as a target' ) ;
assert . equal ( t . action , 'scale' , 'should target a corner and setup scale' ) ;
assert . equal ( t . corner , 'tl' , 'tl selected' ) ;
assert . equal ( t . originX , 'right' , 'origin in opposite direction' ) ;
assert . equal ( t . originY , 'bottom' , 'origin in opposite direction' ) ;
assert . equal ( t . shiftKey , undefined , 'shift was not pressed' ) ;
2016-08-07 15:00:58 +00:00
eventStub = {
clientX : canvasOffset . left + rect . left - 2 ,
2016-09-10 13:14:23 +00:00
clientY : canvasOffset . top + rect . top + rect . height / 2 ,
2016-08-07 15:00:58 +00:00
target : rect ,
shiftKey : true
} ;
canvas . _setupCurrentTransform ( eventStub , rect ) ;
t = canvas . _currentTransform ;
2017-09-17 09:44:57 +00:00
assert . equal ( t . target , rect , 'should have rect as a target' ) ;
assert . equal ( t . action , 'skewY' , 'should target a corner and setup skew' ) ;
assert . equal ( t . shiftKey , true , 'shift was pressed' ) ;
assert . equal ( t . corner , 'ml' , 'ml selected' ) ;
assert . equal ( t . originX , 'right' , 'origin in opposite direction' ) ;
2016-08-07 15:00:58 +00:00
eventStub = {
clientX : canvasOffset . left + rect . oCoords . mtr . x ,
clientY : canvasOffset . top + rect . oCoords . mtr . y ,
target : rect ,
} ;
canvas . _setupCurrentTransform ( eventStub , rect ) ;
t = canvas . _currentTransform ;
2017-09-17 09:44:57 +00:00
assert . equal ( t . target , rect , 'should have rect as a target' ) ;
assert . equal ( t . action , 'rotate' , 'should target a corner and setup rotate' ) ;
assert . equal ( t . corner , 'mtr' , 'mtr selected' ) ;
2018-04-01 12:28:07 +00:00
assert . equal ( t . originX , 'center' , 'origin in center' ) ;
assert . equal ( t . originY , 'center' , 'origin in center' ) ;
2016-08-07 15:00:58 +00:00
canvas . _currentTransform = false ;
} ) ;
2018-04-01 12:28:07 +00:00
QUnit . test ( '_rotateObject' , function ( assert ) {
assert . ok ( typeof canvas . _rotateObject === 'function' ) ;
var rect = new fabric . Rect ( { left : 75 , top : 75 , width : 50 , height : 50 } ) ;
canvas . add ( rect ) ;
var canvasEl = canvas . getElement ( ) ,
canvasOffset = fabric . util . getElementOffset ( canvasEl ) ;
var eventStub = {
clientX : canvasOffset . left + rect . oCoords . mtr . x ,
clientY : canvasOffset . top + rect . oCoords . mtr . y ,
target : rect ,
} ;
canvas . _setupCurrentTransform ( eventStub , rect ) ;
var rotated = canvas . _rotateObject ( 30 , 30 , 'equally' ) ;
assert . equal ( rotated , true , 'return true if a rotation happened' ) ;
rotated = canvas . _rotateObject ( 30 , 30 ) ;
assert . equal ( rotated , false , 'return true if no rotation happened' ) ;
} ) ;
QUnit . test ( '_rotateObject do not change origins' , function ( assert ) {
assert . ok ( typeof canvas . _rotateObject === 'function' ) ;
var rect = new fabric . Rect ( { left : 75 , top : 75 , width : 50 , height : 50 , originX : 'right' , originY : 'bottom' } ) ;
canvas . add ( rect ) ;
var canvasEl = canvas . getElement ( ) ,
canvasOffset = fabric . util . getElementOffset ( canvasEl ) ;
var eventStub = {
clientX : canvasOffset . left + rect . oCoords . mtr . x ,
clientY : canvasOffset . top + rect . oCoords . mtr . y ,
target : rect ,
} ;
canvas . _setupCurrentTransform ( eventStub , rect ) ;
assert . equal ( rect . originX , 'right' ) ;
assert . equal ( rect . originY , 'bottom' ) ;
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( '_scaleObject' , function ( assert ) {
assert . ok ( typeof canvas . _scaleObject === 'function' ) ;
2016-08-07 15:00:58 +00:00
var rect = new fabric . Rect ( { left : 75 , top : 75 , width : 50 , height : 50 } ) ;
canvas . add ( rect ) ;
var canvasEl = canvas . getElement ( ) ,
canvasOffset = fabric . util . getElementOffset ( canvasEl ) ;
var eventStub = {
clientX : canvasOffset . left + rect . oCoords . tl . corner . tl . x + 1 ,
clientY : canvasOffset . top + rect . oCoords . tl . corner . tl . y + 1 ,
target : rect
} ;
canvas . _setupCurrentTransform ( eventStub , rect ) ;
var scaled = canvas . _scaleObject ( 30 , 30 , 'equally' ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( scaled , true , 'return true if scaling happened' ) ;
2016-08-07 15:00:58 +00:00
scaled = canvas . _scaleObject ( 30 , 30 , 'equally' ) ;
2017-09-17 09:44:57 +00:00
assert . equal ( scaled , false , 'return false if no movement happen' ) ;
2016-08-07 15:00:58 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'containsPoint in viewport transform' , function ( assert ) {
2016-08-07 15:00:58 +00:00
canvas . viewportTransform = [ 2 , 0 , 0 , 2 , 50 , 50 ] ;
var rect = new fabric . Rect ( { left : 75 , top : 75 , width : 50 , height : 50 } ) ;
canvas . add ( rect ) ;
var canvasEl = canvas . getElement ( ) ,
canvasOffset = fabric . util . getElementOffset ( canvasEl ) ;
var eventStub = {
clientX : canvasOffset . left + 250 ,
clientY : canvasOffset . top + 250 ,
target : rect
} ;
2017-09-17 09:44:57 +00:00
assert . ok ( canvas . containsPoint ( eventStub , rect ) , 'point at (250, 250) should be within area (75, 75, 125, 125)' ) ;
2016-08-07 15:00:58 +00:00
canvas . viewportTransform = [ 1 , 0 , 0 , 1 , 0 , 0 ] ;
} ) ;
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 . equal ( 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('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
// assert.deepEqual(canvas.toJSON(), {
2016-09-10 13:14:23 +00:00
// "objects": [],
2012-08-10 15:14:56 +00:00
// "background": "rgba(0, 0, 0, 0)",
// "backgroundImage": (fabric.document.location.protocol +
// '//' +
// fabric.document.location.hostname +
// ((fabric.document.location.port === '' || parseInt(fabric.document.location.port, 10) === 80)
// ? ''
// : (':' + fabric.document.location.port)) +
// '/assets/pug.jpg'),
// "backgroundImageOpacity": 1,
// "backgroundImageStretch": true
// });
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 ( 'clipTo' , function ( assert ) {
2013-03-24 17:09:55 +00:00
canvas . clipTo = function ( ctx ) {
ctx . arc ( 0 , 0 , 10 , 0 , Math . PI * 2 , false ) ;
} ;
var error ;
try {
canvas . renderAll ( ) ;
}
2016-09-10 13:14:23 +00:00
catch ( err ) {
2013-03-24 17:09:55 +00:00
error = err ;
}
delete canvas . clipTo ;
2017-09-17 09:44:57 +00:00
assert . ok ( typeof error === 'undefined' , 'renderAll with clipTo does not throw' ) ;
2013-03-24 17:09:55 +00:00
} ) ;
2017-09-17 09:44:57 +00:00
QUnit . test ( 'canvas inheritance' , function ( assert ) {
2013-08-28 13:17:25 +00:00
// this should not error out
var InheritedCanvasClass = fabric . util . createClass ( fabric . Canvas , {
initialize : function ( ) {
}
} ) ;
2017-09-17 09:44:57 +00:00
assert . ok ( typeof InheritedCanvasClass === 'function' ) ;
2013-08-28 13:17:25 +00:00
} ) ;
2013-06-02 21:04:54 +00:00
} ) ( ) ;