summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/css/geometry/DOMRect-002.html
blob: a5f0f88428f467d9211db58a2e3f2a9a628bd101 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
<!DOCTYPE html>
<html>
<head>
    <title>Geometry Interfaces: DOMRect and DOMRectReadOnly interface tests</title>
    <link rel="author" title="Hwanseung Lee" href="mailto:hs1217.lee@samsung.com" />
    <link rel="help" href="https://drafts.fxtf.org/geometry-1/#DOMRect">
    <script src="/resources/testharness.js"></script>
    <script src="/resources/testharnessreport.js"></script>
</head>
<body>
    <div id="log"></div>
    <script>
        testConstructor("DOMRect");
        testConstructor("DOMRectReadOnly");
        test(function() {
            var r = new DOMRect();
            r.top = 5;
            assert_equals(r.top, 0, "top");
            r.right = 5;
            assert_equals(r.right, 0, "right");
            r.bottom = 5;
            assert_equals(r.bottom, 0, "bottom");
            r.left = 5;
            assert_equals(r.left, 0, "left");
        }, 'DOMRect: set top/right/bottom/left');

        test(function() {
            var r = new DOMRect();
            r.x = 5;
            assert_equals(r.x, 5, "Expected value for x is 5");
            assert_equals(r.left, 5, "Expected value for left is 5");
            assert_equals(r.right, 5, "Expected value for right is 5");
            r.y = 5;
            assert_equals(r.y, 5, "Expected value for y is 5");
            assert_equals(r.top, 5, "Expected value for top is 5");
            assert_equals(r.bottom, 5, "Expected value for bottom is 5");
            r.width = 5;
            assert_equals(r.width, 5, "Expected value for width is 5");
            assert_equals(r.left, 5, "Expected value for left is 5");
            assert_equals(r.right, 10, "Expected value for right is 10");
            r.height = 5;
            assert_equals(r.height, 5, "Expected value for height is 5");
            assert_equals(r.top, 5, "Expected value for top is 5");
            assert_equals(r.bottom, 10, "Expected value for bottom is 10");
        }, 'DOMRect: set x/y/width/height');

        test(function() {
            var r = new DOMRectReadOnly();
            r.top = 5;
            assert_equals(r.top, 0, "top after setting top");
            assert_equals(r.y, 0, "y after setting top");
            assert_equals(r.bottom, 0, "bottom after setting top");
            r.right = 5;
            assert_equals(r.right, 0, "right after setting right");
            assert_equals(r.x, 0, "x after setting right");
            assert_equals(r.left, 0, "left after setting right");
            r.bottom = 5;
            assert_equals(r.bottom, 0, "bottom after setting bottom");
            assert_equals(r.y, 0, "y after setting bottom");
            assert_equals(r.top, 0, "top after setting bottom");
            r.left = 5;
            assert_equals(r.left, 0, "left after setting left");
            assert_equals(r.x, 0, "x after setting left");
            assert_equals(r.right, 0, "right after setting left");
        }, 'DOMRectReadOnly: set top/right/bottom/left');

        test(function() {
            var r = new DOMRectReadOnly();
            r.x = 5;
            assert_equals(r.x, 0, "x after setting x");
            assert_equals(r.left, 0, "left after setting x");
            assert_equals(r.right, 0, "right after setting x");
            r.y = 5;
            assert_equals(r.y, 0, "y after setting y");
            assert_equals(r.top, 0, "top after setting y");
            assert_equals(r.bottom, 0, "bottom after setting y");
            r.width = 5;
            assert_equals(r.width, 0, "width after setting width");
            assert_equals(r.x, 0, "x after setting width");
            assert_equals(r.right, 0, "right after setting width");
            r.height = 5;
            assert_equals(r.height, 0, "height after setting height");
            assert_equals(r.y, 0, "y after setting height");
            assert_equals(r.bottom, 0, "bottom after setting height");
        }, 'DOMRectReadOnly: set x/y/width/height');

        test(function() {
            var actual = DOMRect.fromRect({x: 1, y: 2, width: 3, height: 4});
            var expected = new DOMRect(1, 2, 3, 4);
            checkDOMRect(actual, expected);
            assert_true(actual instanceof DOMRectReadOnly, "actual instanceof DOMRectReadOnly");
            assert_true(actual instanceof DOMRect, "actual instanceof DOMRect");
        }, 'DOMRect.fromRect');

        test(function() {
            var actual = DOMRectReadOnly.fromRect({x: 1, y: 2, width: 3, height: 4});
            var expected = new DOMRectReadOnly(1, 2, 3, 4);
            checkDOMRect(actual, expected);
            assert_true(actual instanceof DOMRectReadOnly, "actual instanceof DOMRectReadOnly");
            assert_false(actual instanceof DOMRect, "actual instanceof DOMRect");
        }, 'DOMRectReadOnly.fromRect');

        function testConstructor(constructorString) {
            var constructor = self[constructorString];
            test(function() {
                checkDOMRect(new constructor(),
                    { x: 0, y: 0, width: 0, height: 0, top: 0, right: 0, bottom: 0, left: 0 });
            }, constructorString + ' constructor without parameter');
            test(function() {
                checkDOMRect(new constructor(1),
                    { x: 1, y: 0, width: 0, height: 0, top: 0, right: 1, bottom: 0, left: 1 });
            }, constructorString + ' constructor with one parameter');
            test(function() {
                checkDOMRect(new constructor(1, 2),
                    { x: 1, y: 2, width: 0, height: 0, top: 2, right: 1, bottom: 2, left: 1 });
            }, constructorString + ' constructor with two parameters');
            test(function() {
                checkDOMRect(new constructor(1, 2, 3),
                    { x: 1, y: 2, width: 3, height: 0, top: 2, right: 4, bottom: 2, left: 1 });
            }, constructorString + ' constructor with three parameters');
            test(function() {
                checkDOMRect(new constructor(1, 2, 3, 4),
                    { x: 1, y: 2, width: 3, height: 4, top: 2, right: 4, bottom: 6, left: 1 });
            }, constructorString + ' constructor with four parameters');
            test(function() {
                checkDOMRect(new constructor(1, 2, 3, 4, 5),
                    { x: 1, y: 2, width: 3, height: 4, top: 2, right: 4, bottom: 6, left: 1 });
            }, constructorString + ' constructor with five parameters');
            test(function() {
                checkDOMRect(new constructor(2, 2, -4, 4),
                    { x: 2, y: 2, width: -4, height: 4, top: 2, right: 2, bottom: 6, left: -2 });
            }, constructorString + ' constructor with negative width');
            test(function() {
                checkDOMRect(new constructor(2, 2, 4, -4),
                    { x: 2, y: 2, width: 4, height: -4, top: -2, right: 6, bottom: 2, left: 2 });
            }, constructorString + ' constructor with negative height');
            test(function() {
                checkDOMRect(new constructor(2, 2, -4, -4),
                    { x: 2, y: 2, width: -4, height: -4, top: -2, right: 2, bottom: 2, left: -2 });
            }, constructorString + ' constructor with negative width and height');
            test(function() {
                checkDOMRect(new constructor(0, 0, undefined, 4),
                    { x: 0, y: 0, width: 0, height: 4, top: 0, right: 0, bottom: 4, left: 0 });
            }, constructorString + ' constructor with undefined');
            test(function() {
                checkDOMRect(new constructor(NaN, Number.NEGATIVE_INFINITY, Number.POSITIVE_INFINITY, null),
                    { x: NaN, y: -Infinity, width: Infinity, height: 0, top: -Infinity, right: NaN, bottom: -Infinity, left: NaN });
            }, constructorString + ' constructor with NaN and infinity and null');
            test(function() {
                checkDOMRect(new constructor("1", "2", "3", "4"),
                    { x: 1, y: 2, width: 3, height: 4, top: 2, right: 4, bottom: 6, left: 1 });
            }, constructorString + ' constructor with number string');
            test(function() {
                checkDOMRect(new constructor("a", "b", "c", "d"),
                    { x: NaN, y: NaN, width: NaN, height: NaN, top: NaN, right: NaN, bottom: NaN, left: NaN });
            }, constructorString + ' constructor with character string');
        }

        function checkDOMRect(r, exp) {
            assert_equals(r.x, exp.x, "x");
            assert_equals(r.y, exp.y, "y");
            assert_equals(r.width, exp.width, "width");
            assert_equals(r.height, exp.height, "height");
            assert_equals(r.top, exp.top, "top");
            assert_equals(r.left, exp.left, "left");
            assert_equals(r.bottom, exp.bottom, "bottom");
            assert_equals(r.right, exp.right, "right");
        }
    </script>
</body>
</html>