mirror of
https://github.com/scratchfoundation/paper.js.git
synced 2024-12-28 17:02:24 -05:00
314 lines
9 KiB
JavaScript
314 lines
9 KiB
JavaScript
/*
|
|
* Paper.js - The Swiss Army Knife of Vector Graphics Scripting.
|
|
* http://paperjs.org/
|
|
*
|
|
* Copyright (c) 2011 - 2020, Jürg Lehni & Jonathan Puckey
|
|
* http://juerglehni.com/ & https://puckey.studio/
|
|
*
|
|
* Distributed under the MIT license. See LICENSE file for details.
|
|
*
|
|
* All rights reserved.
|
|
*/
|
|
|
|
QUnit.module('Rectangle');
|
|
|
|
test('new Rectangle(Point, Size);', function() {
|
|
var rect = new Rectangle(new Point(10, 20), new Size(30, 40));
|
|
equals(rect, new Rectangle(10, 20, 30, 40));
|
|
});
|
|
|
|
test('new Rectangle({ point, size });', function() {
|
|
var rect = new Rectangle({ point: [10, 20], size: [30, 40] });
|
|
equals(rect, new Rectangle(10, 20, 30, 40));
|
|
var rect = new Rectangle({ point: new Point(10, 20), size: new Size(30, 40)});
|
|
equals(rect, new Rectangle(10, 20, 30, 40));
|
|
});
|
|
|
|
test('new Rectangle(Array, Array);', function() {
|
|
var rect = new Rectangle([10, 20], [30, 40]);
|
|
equals(rect, new Rectangle(10, 20, 30, 40));
|
|
});
|
|
|
|
test('new Rectangle(Point, Point);', function() {
|
|
var rect = new Rectangle(new Point(10, 20), new Point(30, 40));
|
|
equals(rect, new Rectangle(10, 20, 20, 20));
|
|
});
|
|
|
|
test('new Rectangle({ from, to });', function() {
|
|
var rect = new Rectangle({from: [10, 20], to: [30, 40]});
|
|
equals(rect, new Rectangle(10, 20, 20, 20));
|
|
});
|
|
|
|
test('new Rectangle(x, y, width, height);', function() {
|
|
var rect = new Rectangle(10, 20, 30, 40);
|
|
equals(rect, new Rectangle(10, 20, 30, 40));
|
|
});
|
|
|
|
test('new Rectangle({ x, y, width, height });', function() {
|
|
var rect = new Rectangle({x: 10, y: 20, width: 30, height: 40});
|
|
equals(rect, new Rectangle(10, 20, 30, 40));
|
|
});
|
|
|
|
test('new Rectangle(object)', function() {
|
|
var expected = new Rectangle(100, 50, 100, 200);
|
|
|
|
equals(function() {
|
|
return new Rectangle({
|
|
top: expected.top,
|
|
right: expected.right,
|
|
bottom: expected.bottom,
|
|
left: expected.left
|
|
});
|
|
}, expected);
|
|
|
|
function testProperties(key1, key2) {
|
|
var obj = {};
|
|
obj[key1] = expected[key1];
|
|
obj[key2] = expected[key2];
|
|
var rect = new Rectangle(obj);
|
|
equals(rect, expected, 'new Rectangle({ ' + key1 + ', ' + key2 + ' });');
|
|
}
|
|
|
|
var tests = [
|
|
['center', 'size'],
|
|
['topLeft', 'size'],
|
|
['topRight', 'size'],
|
|
['bottomRight', 'size'],
|
|
['bottomLeft', 'size'],
|
|
['leftCenter', 'size'],
|
|
['topCenter', 'size'],
|
|
['rightCenter', 'size'],
|
|
['bottomCenter', 'size'],
|
|
['topLeft', 'bottomRight'],
|
|
['topRight', 'bottomLeft'],
|
|
['topLeft', 'bottomCenter'],
|
|
['topLeft', 'rightCenter'],
|
|
['topRight', 'bottomCenter'],
|
|
['topRight', 'leftCenter'],
|
|
['bottomLeft', 'topCenter'],
|
|
['bottomLeft', 'rightCenter'],
|
|
['bottomRight', 'topCenter'],
|
|
['bottomRight', 'leftCenter']
|
|
];
|
|
|
|
tests.forEach(function(test) {
|
|
testProperties(test[0], test[1]);
|
|
testProperties(test[1], test[0]);
|
|
});
|
|
});
|
|
|
|
test('rect.left / rect.top VS rect.right / rect.bottom', function() {
|
|
var rect = new Rectangle({
|
|
point: [0,0],
|
|
size: [100, 100],
|
|
});
|
|
rect.left -= 10;
|
|
rect.top -= 10;
|
|
equals(rect.right, 90);
|
|
equals(rect.bottom, 90);
|
|
|
|
var rect = new Rectangle([0, 0], [100, 100]);
|
|
rect.left -= 10;
|
|
rect.top -= 10;
|
|
equals(rect.right, 90);
|
|
equals(rect.bottom, 90);
|
|
|
|
var rect = new Rectangle({
|
|
topLeft: [0,0],
|
|
bottomRight: [100, 100],
|
|
});
|
|
rect.left -= 10;
|
|
rect.top -= 10;
|
|
equals(rect.right, 100);
|
|
equals(rect.bottom, 100);
|
|
});
|
|
|
|
test('rect.size', function() {
|
|
var rect = new Rectangle(10, 10, 20, 30);
|
|
equals(function() {
|
|
return rect.size.equals([20, 30]);
|
|
}, true);
|
|
rect.size = [30, 40];
|
|
equals(rect, new Rectangle(10, 10, 30, 40));
|
|
});
|
|
|
|
test('rect.center', function() {
|
|
var rect = new Rectangle(10, 10, 20, 30);
|
|
equals(function() {
|
|
return rect.size;
|
|
}, new Size(20, 30));
|
|
equals(function() {
|
|
return rect.center;
|
|
}, new Point(20, 25));
|
|
rect.center = [100, 100];
|
|
equals(function() {
|
|
return rect.center;
|
|
}, new Point(100, 100));
|
|
equals(function() {
|
|
return rect.size;
|
|
}, new Size(20, 30));
|
|
rect.center = [200, 200];
|
|
equals(function() {
|
|
return rect.center;
|
|
}, new Point(200, 200));
|
|
equals(function() {
|
|
return rect.size;
|
|
}, new Size(20, 30));
|
|
});
|
|
|
|
test('rect.topLeft', function() {
|
|
var rect = new Rectangle(10, 10, 20, 20);
|
|
var point = rect.topLeft;
|
|
equals(point, { x: 10, y: 10 });
|
|
rect.topLeft = [10, 15];
|
|
var point = rect.topLeft;
|
|
equals(point, { x: 10, y: 15 });
|
|
});
|
|
|
|
test('rect.topRight', function() {
|
|
var rect = new Rectangle(10, 10, 20, 20);
|
|
var point = rect.topRight;
|
|
equals(point, { x: 30, y: 10 });
|
|
var rect = new Rectangle(10, 10, 20, 20);
|
|
rect.topRight = [10, 15];
|
|
var point = rect.topRight;
|
|
equals(point, { x: 10, y: 15 });
|
|
});
|
|
|
|
test('rect.bottomLeft', function() {
|
|
var rect = new Rectangle(10, 10, 20, 20);
|
|
var point = rect.bottomLeft;
|
|
equals(point, { x: 10, y: 30 });
|
|
var rect = new Rectangle(10, 10, 20, 20);
|
|
rect.bottomLeft = [10, 15];
|
|
var point = rect.bottomLeft;
|
|
equals(point, { x: 10, y: 15 });
|
|
});
|
|
|
|
test('rect.bottomRight', function() {
|
|
var rect = new Rectangle(10, 10, 20, 20);
|
|
var point = rect.bottomRight;
|
|
equals(point, { x: 30, y: 30 });
|
|
var rect = new Rectangle(10, 10, 20, 20);
|
|
rect.bottomRight = [10, 15];
|
|
var point = rect.bottomRight;
|
|
equals(point, { x: 10, y: 15 });
|
|
});
|
|
|
|
test('rect.bottomCenter', function() {
|
|
var rect = new Rectangle(10, 10, 20, 20);
|
|
var point = rect.bottomCenter;
|
|
equals(point, { x: 20, y: 30 });
|
|
var rect = new Rectangle(10, 10, 20, 20);
|
|
rect.bottomCenter = [10, 15];
|
|
var point = rect.bottomCenter;
|
|
equals(point, { x: 10, y: 15 });
|
|
});
|
|
|
|
test('rect.topCenter', function() {
|
|
var rect = new Rectangle(10, 10, 20, 20);
|
|
var point = rect.topCenter;
|
|
equals(point, { x: 20, y: 10 });
|
|
var rect = new Rectangle(10, 10, 20, 20);
|
|
rect.topCenter = [10, 15];
|
|
var point = rect.topCenter;
|
|
equals(point, { x: 10, y: 15 });
|
|
});
|
|
|
|
test('rect.leftCenter', function() {
|
|
var rect = new Rectangle(10, 10, 20, 20);
|
|
var point = rect.leftCenter;
|
|
equals(point, { x: 10, y: 20 });
|
|
var rect = new Rectangle(10, 10, 20, 20);
|
|
rect.leftCenter = [10, 15];
|
|
var point = rect.leftCenter;
|
|
equals(point, { x: 10, y: 15 });
|
|
});
|
|
|
|
test('rect.rightCenter', function() {
|
|
var rect = new Rectangle(10, 10, 20, 20);
|
|
var point = rect.rightCenter;
|
|
equals(point, { x: 30, y: 20 });
|
|
var rect = new Rectangle(10, 10, 20, 20);
|
|
rect.rightCenter = [10, 15];
|
|
var point = rect.rightCenter;
|
|
equals(point, { x: 10, y: 15 });
|
|
});
|
|
|
|
test('rect1.intersects(rect2)', function() {
|
|
var rect1 = new Rectangle(160, 270, 20, 20);
|
|
var rect2 = new Rectangle(195, 301, 19, 19);
|
|
equals(function() {
|
|
return rect1.intersects(rect2);
|
|
}, false);
|
|
rect1 = new Rectangle(160, 270, 20, 20);
|
|
rect2 = new Rectangle(170.5, 280.5, 19, 19);
|
|
equals(function() {
|
|
return rect1.intersects(rect2);
|
|
}, true);
|
|
});
|
|
|
|
test('rect1.contains(rect2)', function() {
|
|
var rect1 = new Rectangle(160, 270, 20, 20);
|
|
var rect2 = new Rectangle(195, 301, 19, 19);
|
|
equals(function() {
|
|
return rect1.contains(rect2);
|
|
}, false);
|
|
rect1 = new Rectangle(160, 270, 20, 20);
|
|
rect2 = new Rectangle(170.5, 280.5, 19, 19);
|
|
equals(function() {
|
|
return rect1.contains(rect2);
|
|
}, false);
|
|
|
|
rect1 = new Rectangle(299, 161, 137, 129);
|
|
rect2 = new Rectangle(340, 197, 61, 61);
|
|
equals(function() {
|
|
return rect1.contains(rect2);
|
|
}, true);
|
|
equals(function() {
|
|
return rect2.contains(rect1);
|
|
}, false);
|
|
});
|
|
|
|
test('rect.contains(point)', function() {
|
|
var rect = new Rectangle(160, 270, 20, 20);
|
|
var point = new Point(166, 280);
|
|
equals(function() {
|
|
return rect.contains(point);
|
|
}, true);
|
|
var point = new Point(30, 30);
|
|
equals(function() {
|
|
return rect.contains(point);
|
|
}, false);
|
|
});
|
|
|
|
test('rect1.intersect(rect2)', function() {
|
|
var rect1 = new Rectangle(160, 270, 20, 20);
|
|
var rect2 = new Rectangle(170.5, 280.5, 19, 19);
|
|
var intersected = rect1.intersect(rect2);
|
|
equals(function() {
|
|
return intersected.equals(new Rectangle(170.5, 280.5, 9.5, 9.5));
|
|
}, true);
|
|
});
|
|
|
|
test('rect1.unite(rect2)', function() {
|
|
var rect1 = new Rectangle(160, 270, 20, 20);
|
|
var rect2 = new Rectangle(170.5, 280.5, 19, 19);
|
|
var united = rect1.unite(rect2);
|
|
equals(function() {
|
|
return united.equals(new Rectangle(160, 270, 29.5, 29.5));
|
|
}, true);
|
|
});
|
|
|
|
test('rect.include(point)', function() {
|
|
var rect1 = new Rectangle(95, 151, 20, 20);
|
|
var included = rect1.include([50, 50]);
|
|
equals(function() {
|
|
return included.equals(new Rectangle(50, 50, 65, 121));
|
|
}, true);
|
|
});
|
|
|
|
test('rect.toString()', function() {
|
|
var string = new Rectangle(10, 20, 30, 40).toString();
|
|
equals(string, '{ x: 10, y: 20, width: 30, height: 40 }');
|
|
});
|