]> git.proxmox.com Git - extjs.git/blame - extjs/packages/charts/test/specs/draw/Point.js
add extjs 6.0.1 sources
[extjs.git] / extjs / packages / charts / test / specs / draw / Point.js
CommitLineData
6527f429
DM
1describe('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});