2015-11-27 01:25:50 +03:00
|
|
|
/* global module, asyncTest, $, ok, equal, notEqual, start, test, Util, testLog */
|
|
|
|
|
|
|
|
(function() {
|
|
|
|
|
|
|
|
module('Rectangle', {});
|
|
|
|
|
|
|
|
var precision = 0.000000001;
|
|
|
|
|
|
|
|
function assertPointsEquals(pointA, pointB, message) {
|
|
|
|
Util.assessNumericValue(pointA.x, pointB.x, precision, message + " x: ");
|
|
|
|
Util.assessNumericValue(pointA.y, pointB.y, precision, message + " y: ");
|
|
|
|
}
|
|
|
|
|
|
|
|
function assertRectangleEquals(rectA, rectB, message) {
|
|
|
|
Util.assessNumericValue(rectA.x, rectB.x, precision, message + " x: ");
|
|
|
|
Util.assessNumericValue(rectA.y, rectB.y, precision, message + " y: ");
|
|
|
|
Util.assessNumericValue(rectA.width, rectB.width, precision,
|
|
|
|
message + " width: ");
|
|
|
|
Util.assessNumericValue(rectA.height, rectB.height, precision,
|
|
|
|
message + " height: ");
|
|
|
|
Util.assessNumericValue(rectA.degrees, rectB.degrees, precision,
|
|
|
|
message + " degrees: ");
|
|
|
|
}
|
|
|
|
|
|
|
|
test('Constructor', function() {
|
2015-12-01 03:11:41 +03:00
|
|
|
var rect = new OpenSeadragon.Rect(1, 2, 3, 4, 5);
|
2015-11-27 01:25:50 +03:00
|
|
|
strictEqual(rect.x, 1, 'rect.x should be 1');
|
|
|
|
strictEqual(rect.y, 2, 'rect.y should be 2');
|
|
|
|
strictEqual(rect.width, 3, 'rect.width should be 3');
|
|
|
|
strictEqual(rect.height, 4, 'rect.height should be 4');
|
|
|
|
strictEqual(rect.degrees, 5, 'rect.degrees should be 5');
|
|
|
|
|
2015-12-01 03:11:41 +03:00
|
|
|
rect = new OpenSeadragon.Rect();
|
2015-11-27 01:25:50 +03:00
|
|
|
strictEqual(rect.x, 0, 'rect.x should be 0');
|
|
|
|
strictEqual(rect.y, 0, 'rect.y should be 0');
|
|
|
|
strictEqual(rect.width, 0, 'rect.width should be 0');
|
|
|
|
strictEqual(rect.height, 0, 'rect.height should be 0');
|
|
|
|
strictEqual(rect.degrees, 0, 'rect.degrees should be 0');
|
|
|
|
});
|
|
|
|
|
|
|
|
test('getTopLeft', function() {
|
2015-12-01 03:11:41 +03:00
|
|
|
var rect = new OpenSeadragon.Rect(1, 2, 3, 4, 5);
|
2015-11-27 01:25:50 +03:00
|
|
|
var expected = new OpenSeadragon.Point(1, 2);
|
|
|
|
ok(expected.equals(rect.getTopLeft()), "Incorrect top left point.");
|
|
|
|
});
|
|
|
|
|
|
|
|
test('getTopRight', function() {
|
2015-12-01 03:11:41 +03:00
|
|
|
var rect = new OpenSeadragon.Rect(0, 0, 1, 3);
|
2015-11-27 01:25:50 +03:00
|
|
|
var expected = new OpenSeadragon.Point(1, 0);
|
|
|
|
ok(expected.equals(rect.getTopRight()), "Incorrect top right point.");
|
|
|
|
|
|
|
|
rect.degrees = 45;
|
|
|
|
expected = new OpenSeadragon.Point(1 / Math.sqrt(2), 1 / Math.sqrt(2));
|
|
|
|
assertPointsEquals(expected, rect.getTopRight(),
|
|
|
|
"Incorrect top right point with rotation.");
|
|
|
|
});
|
|
|
|
|
|
|
|
test('getBottomLeft', function() {
|
2015-12-01 03:11:41 +03:00
|
|
|
var rect = new OpenSeadragon.Rect(0, 0, 3, 1);
|
2015-11-27 01:25:50 +03:00
|
|
|
var expected = new OpenSeadragon.Point(0, 1);
|
|
|
|
ok(expected.equals(rect.getBottomLeft()), "Incorrect bottom left point.");
|
|
|
|
|
|
|
|
rect.degrees = 45;
|
|
|
|
expected = new OpenSeadragon.Point(-1 / Math.sqrt(2), 1 / Math.sqrt(2));
|
|
|
|
assertPointsEquals(expected, rect.getBottomLeft(),
|
|
|
|
"Incorrect bottom left point with rotation.");
|
|
|
|
});
|
|
|
|
|
|
|
|
test('getBottomRight', function() {
|
2015-12-01 03:11:41 +03:00
|
|
|
var rect = new OpenSeadragon.Rect(0, 0, 1, 1);
|
2015-11-27 01:25:50 +03:00
|
|
|
var expected = new OpenSeadragon.Point(1, 1);
|
|
|
|
ok(expected.equals(rect.getBottomRight()), "Incorrect bottom right point.");
|
|
|
|
|
|
|
|
rect.degrees = 45;
|
|
|
|
expected = new OpenSeadragon.Point(0, Math.sqrt(2));
|
|
|
|
assertPointsEquals(expected, rect.getBottomRight(),
|
|
|
|
"Incorrect bottom right point with 45 rotation.");
|
|
|
|
|
|
|
|
rect.degrees = 90;
|
|
|
|
expected = new OpenSeadragon.Point(-1, 1);
|
|
|
|
assertPointsEquals(expected, rect.getBottomRight(),
|
|
|
|
"Incorrect bottom right point with 90 rotation.");
|
|
|
|
|
|
|
|
rect.degrees = 135;
|
|
|
|
expected = new OpenSeadragon.Point(-Math.sqrt(2), 0);
|
|
|
|
assertPointsEquals(expected, rect.getBottomRight(),
|
|
|
|
"Incorrect bottom right point with 135 rotation.");
|
|
|
|
});
|
|
|
|
|
|
|
|
test('getCenter', function() {
|
2015-12-01 03:11:41 +03:00
|
|
|
var rect = new OpenSeadragon.Rect(0, 0, 1, 1);
|
2015-11-27 01:25:50 +03:00
|
|
|
var expected = new OpenSeadragon.Point(0.5, 0.5);
|
|
|
|
ok(expected.equals(rect.getCenter()), "Incorrect center point.");
|
|
|
|
|
|
|
|
rect.degrees = 45;
|
|
|
|
expected = new OpenSeadragon.Point(0, 0.5 * Math.sqrt(2));
|
|
|
|
assertPointsEquals(expected, rect.getCenter(),
|
|
|
|
"Incorrect bottom right point with 45 rotation.");
|
|
|
|
|
|
|
|
rect.degrees = 90;
|
|
|
|
expected = new OpenSeadragon.Point(-0.5, 0.5);
|
|
|
|
assertPointsEquals(expected, rect.getCenter(),
|
|
|
|
"Incorrect bottom right point with 90 rotation.");
|
|
|
|
|
|
|
|
rect.degrees = 135;
|
|
|
|
expected = new OpenSeadragon.Point(-0.5 * Math.sqrt(2), 0);
|
|
|
|
assertPointsEquals(expected, rect.getCenter(),
|
|
|
|
"Incorrect bottom right point with 135 rotation.");
|
|
|
|
});
|
|
|
|
|
|
|
|
test('rotate', function() {
|
2015-12-01 03:11:41 +03:00
|
|
|
var rect = new OpenSeadragon.Rect(0, 0, 2, 1);
|
2015-11-27 01:25:50 +03:00
|
|
|
|
2015-12-01 03:11:41 +03:00
|
|
|
var expected = new OpenSeadragon.Rect(
|
|
|
|
1 - 1 / (2 * Math.sqrt(2)),
|
|
|
|
0.5 - 3 / (2 * Math.sqrt(2)),
|
|
|
|
2,
|
|
|
|
1,
|
|
|
|
45);
|
2015-11-27 01:25:50 +03:00
|
|
|
var actual = rect.rotate(45);
|
|
|
|
assertRectangleEquals(expected, actual,
|
|
|
|
"Incorrect rectangle after rotation of 45deg around center.");
|
|
|
|
|
2015-12-01 03:11:41 +03:00
|
|
|
expected = new OpenSeadragon.Rect(0, 0, 2, 1, 33);
|
2015-11-27 01:25:50 +03:00
|
|
|
actual = rect.rotate(33, rect.getTopLeft());
|
|
|
|
assertRectangleEquals(expected, actual,
|
|
|
|
"Incorrect rectangle after rotation of 33deg around topLeft.");
|
|
|
|
|
2015-12-01 03:11:41 +03:00
|
|
|
expected = new OpenSeadragon.Rect(0, 0, 2, 1, 101);
|
2015-11-27 01:25:50 +03:00
|
|
|
actual = rect.rotate(101, rect.getTopLeft());
|
|
|
|
assertRectangleEquals(expected, actual,
|
|
|
|
"Incorrect rectangle after rotation of 187deg around topLeft.");
|
|
|
|
|
2015-12-01 03:11:41 +03:00
|
|
|
expected = new OpenSeadragon.Rect(0, 0, 2, 1, 187);
|
2015-11-27 01:25:50 +03:00
|
|
|
actual = rect.rotate(187, rect.getTopLeft());
|
|
|
|
assertRectangleEquals(expected, actual,
|
|
|
|
"Incorrect rectangle after rotation of 187deg around topLeft.");
|
|
|
|
|
2015-12-01 03:11:41 +03:00
|
|
|
expected = new OpenSeadragon.Rect(0, 0, 2, 1, 300);
|
2015-11-27 01:25:50 +03:00
|
|
|
actual = rect.rotate(300, rect.getTopLeft());
|
|
|
|
assertRectangleEquals(expected, actual,
|
|
|
|
"Incorrect rectangle after rotation of 300deg around topLeft.");
|
|
|
|
});
|
|
|
|
|
|
|
|
test('getBoundingBox', function() {
|
2015-12-01 03:11:41 +03:00
|
|
|
var rect = new OpenSeadragon.Rect(0, 0, 2, 3);
|
2015-11-27 01:25:50 +03:00
|
|
|
|
|
|
|
var bb = rect.getBoundingBox();
|
|
|
|
ok(rect.equals(bb), "Bounding box of horizontal rectangle should be " +
|
|
|
|
"identical to rectangle.");
|
|
|
|
|
|
|
|
rect.degrees = 90;
|
2015-12-01 03:11:41 +03:00
|
|
|
var expected = new OpenSeadragon.Rect(-3, 0, 3, 2);
|
2015-11-27 01:25:50 +03:00
|
|
|
assertRectangleEquals(expected, rect.getBoundingBox(),
|
|
|
|
"Bounding box of rect rotated 90deg.");
|
|
|
|
|
|
|
|
rect.degrees = 180;
|
2015-12-01 03:11:41 +03:00
|
|
|
var expected = new OpenSeadragon.Rect(-2, -3, 2, 3);
|
2015-11-27 01:25:50 +03:00
|
|
|
assertRectangleEquals(expected, rect.getBoundingBox(),
|
|
|
|
"Bounding box of rect rotated 180deg.");
|
|
|
|
|
|
|
|
rect.degrees = 270;
|
2015-12-01 03:11:41 +03:00
|
|
|
var expected = new OpenSeadragon.Rect(0, -2, 3, 2);
|
2015-11-27 01:25:50 +03:00
|
|
|
assertRectangleEquals(expected, rect.getBoundingBox(),
|
|
|
|
"Bounding box of rect rotated 270deg.");
|
|
|
|
});
|
|
|
|
|
|
|
|
})();
|