]>
Commit | Line | Data |
---|---|---|
6527f429 DM |
1 | describe('Ext.draw.Point', function () {\r |
2 | var proto = Ext.draw.Point.prototype,\r | |
3 | precision = 12; // first 12 decimal points should match\r | |
4 | \r | |
5 | it('should be isPoint', function() {\r | |
6 | expect(proto.isPoint).toBeTruthy();\r | |
7 | });\r | |
8 | \r | |
9 | it('should default to using degrees', function () {\r | |
10 | expect(proto.angleUnits).toBe('degrees');\r | |
11 | });\r | |
12 | \r | |
13 | describe('constructor', function () {\r | |
14 | it('should take two numbers', function () {\r | |
15 | var p = new Ext.draw.Point(3, 4);\r | |
16 | \r | |
17 | expect(p.x).toEqual(3);\r | |
18 | expect(p.y).toEqual(4);\r | |
19 | });\r | |
20 | it('should take a single number', function () {\r | |
21 | var p = new Ext.draw.Point(3);\r | |
22 | \r | |
23 | expect(p.x).toEqual(3);\r | |
24 | expect(p.y).toEqual(3);\r | |
25 | });\r | |
26 | it('should take an array', function () {\r | |
27 | var p = new Ext.draw.Point([3, 4]);\r | |
28 | \r | |
29 | expect(p.x).toEqual(3);\r | |
30 | expect(p.y).toEqual(4);\r | |
31 | });\r | |
32 | it('should take an object', function () {\r | |
33 | var p = new Ext.draw.Point({\r | |
34 | x: 3,\r | |
35 | y: 4\r | |
36 | });\r | |
37 | \r | |
38 | expect(p.x).toEqual(3);\r | |
39 | expect(p.y).toEqual(4);\r | |
40 | });\r | |
41 | it('should take a point', function () {\r | |
42 | var p = new Ext.draw.Point(new Ext.draw.Point(3, 4));\r | |
43 | \r | |
44 | expect(p.x).toEqual(3);\r | |
45 | expect(p.y).toEqual(4);\r | |
46 | });\r | |
47 | it('should calculate polar coordinates', function () {\r | |
48 | var p = new Ext.draw.Point(5, 5);\r | |
49 | \r | |
50 | expect(p.length).toEqual(Math.sqrt(2 * 5 * 5));\r | |
51 | expect(p.angle).toEqual(45);\r | |
52 | });\r | |
53 | });\r | |
54 | \r | |
55 | describe('set, setX, setY', function () {\r | |
56 | it('should recalculate polar coordinates', function () {\r | |
57 | var p = new Ext.draw.Point(3, 4);\r | |
58 | \r | |
59 | p.setX(0);\r | |
60 | expect(p.length).toEqual(4);\r | |
61 | expect(p.angle).toEqual(90);\r | |
62 | p.setY(0);\r | |
63 | expect(p.length).toEqual(0);\r | |
64 | expect(p.angle).toEqual(0);\r | |
65 | p.set(5, 5);\r | |
66 | expect(p.length).toEqual(Math.sqrt(2 * 5 * 5));\r | |
67 | expect(p.angle).toEqual(45);\r | |
68 | });\r | |
69 | });\r | |
70 | \r | |
71 | describe('setPolar, setLength, setAngle', function () {\r | |
72 | it('should recalculate cartesian coordinates', function () {\r | |
73 | var p = new Ext.draw.Point();\r | |
74 | \r | |
75 | p.setLength(10);\r | |
76 | expect(p.x).toEqual(10);\r | |
77 | expect(p.y).toEqual(0);\r | |
78 | p.setAngle(90);\r | |
79 | expect(p.x).toBeCloseTo(0, precision);\r | |
80 | expect(p.y).toBeCloseTo(10, precision);\r | |
81 | p.setPolar(45, Math.sqrt(2 * 5 * 5));\r | |
82 | expect(p.x).toBeCloseTo(5, precision);\r | |
83 | expect(p.y).toBeCloseTo(5, precision);\r | |
84 | });\r | |
85 | });\r | |
86 | \r | |
87 | describe('clone', function () {\r | |
88 | it('should match original point coordinates but not the point itself', function () {\r | |
89 | var p = new Ext.draw.Point(2, 3),\r | |
90 | clone = p.clone();\r | |
91 | \r | |
92 | expect(clone.x).toEqual(p.x);\r | |
93 | expect(clone.y).toEqual(p.y);\r | |
94 | expect(clone).toNotBe(p);\r | |
95 | });\r | |
96 | });\r | |
97 | \r | |
98 | describe('add', function () {\r | |
99 | it('should return a new point which x/y values are sums of respective ' +\r | |
100 | 'coordinates of this point and the given point', function () {\r | |
101 | var p1 = new Ext.draw.Point(2, 3),\r | |
102 | p2 = new Ext.draw.Point(-4, 5),\r | |
103 | p = p1.add(p2);\r | |
104 | \r | |
105 | expect(p.x).toEqual(-2);\r | |
106 | expect(p.y).toEqual(8);\r | |
107 | expect(p).toNotBe(p1);\r | |
108 | });\r | |
109 | });\r | |
110 | \r | |
111 | describe('sub', function () {\r | |
112 | it('should return a new point which x/y values are the difference between ' +\r | |
113 | 'the respective coordinates of this point (minuend) ' +\r | |
114 | 'and the given point (subtrahend)', function () {\r | |
115 | var p1 = new Ext.draw.Point(2, 3),\r | |
116 | p2 = new Ext.draw.Point(-4, 5),\r | |
117 | p = p1.sub(p2);\r | |
118 | \r | |
119 | expect(p.x).toEqual(6);\r | |
120 | expect(p.y).toEqual(-2);\r | |
121 | expect(p).toNotBe(p1);\r | |
122 | });\r | |
123 | });\r | |
124 | \r | |
125 | describe('mul', function () {\r | |
126 | it('should return a new point which x/y values are the product of multiplication of ' +\r | |
127 | 'coordinates of this point by a specified value', function () {\r | |
128 | var p = new Ext.draw.Point(2, 3),\r | |
129 | mp = p.mul(3);\r | |
130 | \r | |
131 | expect(mp.x).toEqual(6);\r | |
132 | expect(mp.y).toEqual(9);\r | |
133 | expect(mp).toNotBe(p);\r | |
134 | });\r | |
135 | });\r | |
136 | \r | |
137 | describe('div', function () {\r | |
138 | it('should return a new point which x/y values are the product of division of ' +\r | |
139 | 'coordinates of this point by a specified value', function () {\r | |
140 | var p = new Ext.draw.Point(2, 3),\r | |
141 | dp = p.div(2);\r | |
142 | \r | |
143 | expect(dp.x).toEqual(1);\r | |
144 | expect(dp.y).toEqual(1.5);\r | |
145 | expect(dp).toNotBe(p);\r | |
146 | });\r | |
147 | });\r | |
148 | \r | |
149 | describe('dot', function () {\r | |
150 | it('should return a dot product (scalar) of two vectors', function () {\r | |
151 | var p = new Ext.draw.Point(2, 0),\r | |
152 | op = new Ext.draw.Point(0, 3), // vector orthogonal to p\r | |
153 | p1 = new Ext.draw.Point(3, 4),\r | |
154 | dot_p_op = p.dot(op),\r | |
155 | dot_p_p1 = p.dot(p1);\r | |
156 | \r | |
157 | expect(dot_p_op).toEqual(0);\r | |
158 | expect(dot_p_p1).toEqual(6);\r | |
159 | expect(dot_p_p1).toNotBe(p);\r | |
160 | });\r | |
161 | });\r | |
162 | \r | |
163 | describe('equals', function () {\r | |
164 | it('should check if the respective coordinates of this point ' +\r | |
165 | 'and provided point are equal', function () {\r | |
166 | var p1 = new Ext.draw.Point(2, 0),\r | |
167 | p2 = new Ext.draw.Point({x: 2, y: 0}),\r | |
168 | isEqual = p1.equals(p2);\r | |
169 | \r | |
170 | expect(isEqual).toBe(true);\r | |
171 | })\r | |
172 | });\r | |
173 | \r | |
174 | describe('rotate', function () {\r | |
175 | it('should rotate the point (around origin and an arbitrary point) ' +\r | |
176 | 'by a specified angle', function () {\r | |
177 | var p = new Ext.draw.Point(1, 0),\r | |
178 | center = new Ext.draw.Point(0, 1),\r | |
179 | degrees = 45,\r | |
180 | rads = 45 / 180 * Math.PI,\r | |
181 | rp = p.rotate(degrees),\r | |
182 | rcp = p.rotate(degrees, center);\r | |
183 | \r | |
184 | expect(rp.x).toEqual(Math.cos(rads));\r | |
185 | expect(rp.y).toEqual(Math.sin(rads));\r | |
186 | expect(rcp.x).toBeCloseTo(Math.sqrt(2), precision);\r | |
187 | expect(rcp.y).toBeCloseTo(1, precision);\r | |
188 | });\r | |
189 | });\r | |
190 | \r | |
191 | describe('transform', function () {\r | |
192 | it('should transform a point from one coordinate system to another ' +\r | |
193 | 'given a transformation matrix or its elements', function () {\r | |
194 | var p = new Ext.draw.Point(2, 0),\r | |
195 | matrix = new Ext.draw.Matrix(),\r | |
196 | tp;\r | |
197 | \r | |
198 | matrix.translate(1, 1);\r | |
199 | matrix.rotate(Math.PI / 2);\r | |
200 | matrix.scale(2);\r | |
201 | \r | |
202 | tp = p.transform(matrix);\r | |
203 | \r | |
204 | expect(tp.x).toBeCloseTo(1, precision);\r | |
205 | expect(tp.y).toBeCloseTo(5, precision);\r | |
206 | \r | |
207 | tp = p.transform.apply(p, matrix.elements);\r | |
208 | \r | |
209 | expect(tp.x).toBeCloseTo(1, precision);\r | |
210 | expect(tp.y).toBeCloseTo(5, precision);\r | |
211 | });\r | |
212 | });\r | |
213 | \r | |
214 | describe('normalize', function () {\r | |
215 | it('should return a new vector with the length of 1 and the same angle', function () {\r | |
216 | var p = new Ext.draw.Point(5, 5),\r | |
217 | cos = Math.cos(Math.PI / 4),\r | |
218 | np = p.normalize(),\r | |
219 | np5 = p.normalize(5);\r | |
220 | \r | |
221 | expect(np.x).toBeCloseTo(cos, precision);\r | |
222 | expect(np.y).toBeCloseTo(cos, precision);\r | |
223 | expect(np.length).toBeCloseTo(1, precision);\r | |
224 | expect(np.angle).toBeCloseTo(45, precision);\r | |
225 | \r | |
226 | expect(np5.x).toBeCloseTo(5 * cos, precision);\r | |
227 | expect(np5.y).toBeCloseTo(5 * cos, precision);\r | |
228 | expect(np5.length).toBeCloseTo(5, precision);\r | |
229 | expect(np5.angle).toBeCloseTo(45, precision);\r | |
230 | });\r | |
231 | });\r | |
232 | \r | |
233 | describe('getDistanceToLine', function () {\r | |
234 | it('should return a distance from the point to the line (as a vector)', function () {\r | |
235 | var p = new Ext.draw.Point(1, 1),\r | |
236 | p1 = new Ext.draw.Point(1, 2),\r | |
237 | p2 = new Ext.draw.Point(2, 1),\r | |
238 | d1 = p.getDistanceToLine(p1, p2),\r | |
239 | d2 = p.getDistanceToLine(1, 2, 2, 1),\r | |
240 | d = Math.sqrt(2) / 2;\r | |
241 | \r | |
242 | expect(d1.length).toBeCloseTo(d, precision);\r | |
243 | expect(d2.length).toBeCloseTo(d, precision);\r | |
244 | \r | |
245 | });\r | |
246 | });\r | |
247 | }); |