1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/toolkit/modules/tests/browser/browser_Geometry.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,111 @@ 1.4 +/* This Source Code Form is subject to the terms of the Mozilla Public 1.5 + * License, v. 2.0. If a copy of the MPL was not distributed with this 1.6 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 1.7 + 1.8 +let tempScope = {}; 1.9 +Components.utils.import("resource://gre/modules/Geometry.jsm", tempScope); 1.10 +let Point = tempScope.Point; 1.11 +let Rect = tempScope.Rect; 1.12 + 1.13 +function test() { 1.14 + ok(Rect, "Rect class exists"); 1.15 + for (var fname in tests) { 1.16 + tests[fname](); 1.17 + } 1.18 +} 1.19 + 1.20 +let tests = { 1.21 + testGetDimensions: function() { 1.22 + let r = new Rect(5, 10, 100, 50); 1.23 + ok(r.left == 5, "rect has correct left value"); 1.24 + ok(r.top == 10, "rect has correct top value"); 1.25 + ok(r.right == 105, "rect has correct right value"); 1.26 + ok(r.bottom == 60, "rect has correct bottom value"); 1.27 + ok(r.width == 100, "rect has correct width value"); 1.28 + ok(r.height == 50, "rect has correct height value"); 1.29 + ok(r.x == 5, "rect has correct x value"); 1.30 + ok(r.y == 10, "rect has correct y value"); 1.31 + }, 1.32 + 1.33 + testIsEmpty: function() { 1.34 + let r = new Rect(0, 0, 0, 10); 1.35 + ok(r.isEmpty(), "rect with nonpositive width is empty"); 1.36 + let r = new Rect(0, 0, 10, 0); 1.37 + ok(r.isEmpty(), "rect with nonpositive height is empty"); 1.38 + let r = new Rect(0, 0, 10, 10); 1.39 + ok(!r.isEmpty(), "rect with positive dimensions is not empty"); 1.40 + }, 1.41 + 1.42 + testRestrictTo: function() { 1.43 + let r1 = new Rect(10, 10, 100, 100); 1.44 + let r2 = new Rect(50, 50, 100, 100); 1.45 + r1.restrictTo(r2); 1.46 + ok(r1.equals(new Rect(50, 50, 60, 60)), "intersection is non-empty"); 1.47 + 1.48 + let r1 = new Rect(10, 10, 100, 100); 1.49 + let r2 = new Rect(120, 120, 100, 100); 1.50 + r1.restrictTo(r2); 1.51 + ok(r1.isEmpty(), "intersection is empty"); 1.52 + 1.53 + let r1 = new Rect(10, 10, 100, 100); 1.54 + let r2 = new Rect(0, 0, 0, 0); 1.55 + r1.restrictTo(r2); 1.56 + ok(r1.isEmpty(), "intersection of rect and empty is empty"); 1.57 + 1.58 + let r1 = new Rect(0, 0, 0, 0); 1.59 + let r2 = new Rect(0, 0, 0, 0); 1.60 + r1.restrictTo(r2); 1.61 + ok(r1.isEmpty(), "intersection of empty and empty is empty"); 1.62 + }, 1.63 + 1.64 + testExpandToContain: function() { 1.65 + let r1 = new Rect(10, 10, 100, 100); 1.66 + let r2 = new Rect(50, 50, 100, 100); 1.67 + r1.expandToContain(r2); 1.68 + ok(r1.equals(new Rect(10, 10, 140, 140)), "correct expandToContain on intersecting rectangles"); 1.69 + 1.70 + let r1 = new Rect(10, 10, 100, 100); 1.71 + let r2 = new Rect(120, 120, 100, 100); 1.72 + r1.expandToContain(r2); 1.73 + ok(r1.equals(new Rect(10, 10, 210, 210)), "correct expandToContain on non-intersecting rectangles"); 1.74 + 1.75 + let r1 = new Rect(10, 10, 100, 100); 1.76 + let r2 = new Rect(0, 0, 0, 0); 1.77 + r1.expandToContain(r2); 1.78 + ok(r1.equals(new Rect(10, 10, 100, 100)), "expandToContain of rect and empty is rect"); 1.79 + 1.80 + let r1 = new Rect(10, 10, 0, 0); 1.81 + let r2 = new Rect(0, 0, 0, 0); 1.82 + r1.expandToContain(r2); 1.83 + ok(r1.isEmpty(), "expandToContain of empty and empty is empty"); 1.84 + }, 1.85 + 1.86 + testSubtract: function testSubtract() { 1.87 + function equals(rects1, rects2) { 1.88 + return rects1.length == rects2.length && rects1.every(function(r, i) { 1.89 + return r.equals(rects2[i]); 1.90 + }); 1.91 + } 1.92 + 1.93 + let r1 = new Rect(0, 0, 100, 100); 1.94 + let r2 = new Rect(500, 500, 100, 100); 1.95 + ok(equals(r1.subtract(r2), [r1]), "subtract area outside of region yields same region"); 1.96 + 1.97 + let r1 = new Rect(0, 0, 100, 100); 1.98 + let r2 = new Rect(-10, -10, 50, 120); 1.99 + ok(equals(r1.subtract(r2), [new Rect(40, 0, 60, 100)]), "subtracting vertical bar from edge leaves one rect"); 1.100 + 1.101 + let r1 = new Rect(0, 0, 100, 100); 1.102 + let r2 = new Rect(-10, -10, 120, 50); 1.103 + ok(equals(r1.subtract(r2), [new Rect(0, 40, 100, 60)]), "subtracting horizontal bar from edge leaves one rect"); 1.104 + 1.105 + let r1 = new Rect(0, 0, 100, 100); 1.106 + let r2 = new Rect(40, 40, 20, 20); 1.107 + ok(equals(r1.subtract(r2), [ 1.108 + new Rect(0, 0, 40, 100), 1.109 + new Rect(40, 0, 20, 40), 1.110 + new Rect(40, 60, 20, 40), 1.111 + new Rect(60, 0, 40, 100)]), 1.112 + "subtracting rect in middle leaves union of rects"); 1.113 + }, 1.114 +};