fabric.js/test/unit/circle.js
2015-09-17 14:22:12 +02:00

233 lines
6.6 KiB
JavaScript

(function() {
QUnit.module('fabric.Circle');
test('constructor', function(){
ok(fabric.Circle);
var circle = new fabric.Circle();
ok(circle instanceof fabric.Circle, 'should inherit from fabric.Circle');
ok(circle instanceof fabric.Object, 'should inherit from fabric.Object');
deepEqual(circle.type, 'circle');
});
test('getRadiusX, getRadiusY', function() {
var circle = new fabric.Circle({ radius: 10 });
ok(typeof circle.getRadiusX == 'function', 'getRadiusX should exist');
ok(typeof circle.getRadiusY == 'function', 'getRadiusY should exist');
equal(circle.getRadiusX(), 10);
equal(circle.getRadiusY(), 10);
circle.scale(2);
equal(circle.getRadiusX(), 20);
equal(circle.getRadiusY(), 20);
circle.set('scaleX', 3);
equal(circle.getRadiusX(), 30);
equal(circle.getRadiusY(), 20);
circle.set('scaleY', 4);
equal(circle.getRadiusX(), 30);
equal(circle.getRadiusY(), 40);
});
test('setRadius', function() {
var circle = new fabric.Circle({radius: 10, strokeWidth: 0});
ok(typeof circle.setRadius == 'function');
equal(circle.getRadiusX(), 10);
equal(circle.getRadiusY(), 10);
equal(circle.getWidth(), 20);
equal(circle.getHeight(), 20);
equal(circle, circle.setRadius(20));
equal(circle.getRadiusX(), 20);
equal(circle.getRadiusY(), 20);
equal(circle.getWidth(), 40);
equal(circle.getHeight(), 40);
});
test('set radius', function() {
var circle = new fabric.Circle({strokeWidth: 0});
circle.set('radius', 20);
equal(circle.getRadiusX(), 20);
equal(circle.getRadiusY(), 20);
equal(circle.getWidth(), 40);
equal(circle.getHeight(), 40);
});
test('complexity', function() {
var circle = new fabric.Circle();
ok(typeof circle.complexity == 'function');
equal(circle.complexity(), 1);
});
test('toObject', function() {
var circle = new fabric.Circle();
var defaultProperties = {
'type': 'circle',
'originX': 'left',
'originY': 'top',
'left': 0,
'top': 0,
'width': 0,
'height': 0,
'fill': 'rgb(0,0,0)',
'stroke': null,
'strokeWidth': 1,
'strokeDashArray': null,
'strokeLineCap': 'butt',
'strokeLineJoin': 'miter',
'strokeMiterLimit': 10,
'scaleX': 1,
'scaleY': 1,
'angle': 0,
'flipX': false,
'flipY': false,
'opacity': 1,
'shadow': null,
'visible': true,
'backgroundColor': '',
'clipTo': null,
'fillRule': 'nonzero',
'globalCompositeOperation': 'source-over',
'radius': 0,
'startAngle': 0,
'endAngle': 2 * Math.PI,
'skewX': 0,
'skewY': 0,
'transformMatrix': null
};
ok(typeof circle.toObject == 'function');
deepEqual(circle.toObject(), defaultProperties);
circle.set('left', 100).set('top', 200).set('radius', 15);
var augmentedProperties = fabric.util.object.extend(fabric.util.object.clone(defaultProperties), {
left: 100,
top: 200,
width: 30,
height: 30,
radius: 15
});
deepEqual(circle.toObject(), augmentedProperties);
});
test('fromElement', function() {
ok(typeof fabric.Circle.fromElement == 'function');
var elCircle = fabric.document.createElement('circle'),
radius = 10,
left = 12,
top = 15,
fill = 'ff5555',
opacity = 0.5,
strokeWidth = 2,
strokeDashArray = [5, 2],
strokeLineCap = 'round',
strokeLineJoin = 'bevil',
strokeMiterLimit = 5;
elCircle.setAttribute('r', radius);
elCircle.setAttribute('cx', left);
elCircle.setAttribute('cy', top);
elCircle.setAttribute('fill', fill);
elCircle.setAttribute('opacity', opacity);
elCircle.setAttribute('stroke-width', strokeWidth);
elCircle.setAttribute('stroke-dasharray', '5, 2');
elCircle.setAttribute('stroke-linecap', strokeLineCap);
elCircle.setAttribute('stroke-linejoin', strokeLineJoin);
elCircle.setAttribute('stroke-miterlimit', strokeMiterLimit);
var oCircle = fabric.Circle.fromElement(elCircle);
ok(oCircle instanceof fabric.Circle);
equal(oCircle.get('radius'), radius);
equal(oCircle.get('left'), left - radius);
equal(oCircle.get('top'), top - radius);
equal(oCircle.get('fill'), fill);
equal(oCircle.get('opacity'), opacity);
equal(oCircle.get('strokeWidth'), strokeWidth);
deepEqual(oCircle.get('strokeDashArray'), strokeDashArray);
equal(oCircle.get('strokeLineCap'), strokeLineCap);
equal(oCircle.get('strokeLineJoin'), strokeLineJoin);
equal(oCircle.get('strokeMiterLimit'), strokeMiterLimit);
var elFaultyCircle = fabric.document.createElement('circle');
elFaultyCircle.setAttribute('r', '-10');
var error;
try {
fabric.Circle.fromElement(elFaultyCircle);
}
catch(err) {
error = err;
}
ok(error, 'negative attribute should throw');
elFaultyCircle.removeAttribute('r');
error = void 0;
try {
fabric.Circle.fromElement(elFaultyCircle);
}
catch(err) {
error = err;
}
ok(error, 'inexstent attribute should throw');
});
test('fromObject', function() {
ok(typeof fabric.Circle.fromObject == 'function');
var left = 112,
top = 234,
radius = 13.45,
fill = 'ff5555';
var circle = fabric.Circle.fromObject({
left: left, top: top, radius: radius, fill: fill
});
ok(circle instanceof fabric.Circle);
equal(circle.get('left'), left);
equal(circle.get('top'), top);
equal(circle.get('radius'), radius);
equal(circle.get('fill'), fill);
var expected = circle.toObject();
var actual = fabric.Circle.fromObject(expected).toObject();
deepEqual(actual, expected);
});
test('cloning and radius, width, height', function() {
var circle = new fabric.Circle({ radius: 10, strokeWidth: 0});
circle.scale(2);
var clone = circle.clone();
equal(clone.getWidth(), 40);
equal(clone.getHeight(), 40);
equal(clone.radius, 10);
});
})();