1 |
|
2 | if (typeof module !== 'undefined' && module.exports) {
|
3 | var numeral = require('../src/numeral');
|
4 | var expect = require('chai').expect;
|
5 | }
|
6 |
|
7 | describe('Numeral', function() {
|
8 | afterEach(function() {
|
9 | numeral.reset();
|
10 | });
|
11 |
|
12 | describe('Default', function() {
|
13 | it('should set a default format', function() {
|
14 | numeral.defaultFormat('0,0');
|
15 |
|
16 | expect(numeral(10000).format()).to.equal('10,000');
|
17 | });
|
18 | });
|
19 |
|
20 | describe('Types', function() {
|
21 | it('should return a value as correct type', function() {
|
22 | var tests = [
|
23 | [1234.56,'number'],
|
24 | ['1234.56','number'],
|
25 | [0,'number'],
|
26 | [NaN,'object'],
|
27 | [null,'object']
|
28 | ],
|
29 | i;
|
30 |
|
31 | for (i = 0; i < tests.length; i++) {
|
32 | expect(typeof numeral(tests[i][0]).value()).to.equal(tests[i][1]);
|
33 | }
|
34 | });
|
35 | });
|
36 |
|
37 | describe('Value', function() {
|
38 | it('should return a value', function() {
|
39 | var tests = [
|
40 | [1000, 1000],
|
41 | [0.5, 0.5],
|
42 | [null, null],
|
43 | ['1,000', 1000],
|
44 | ['not a number', null]
|
45 | ],
|
46 | num;
|
47 |
|
48 | for (var i = 0; i < tests.length; i++) {
|
49 | num = numeral(tests[i][0]);
|
50 |
|
51 | expect(num.value()).to.equal(tests[i][1]);
|
52 | }
|
53 | });
|
54 | });
|
55 |
|
56 | describe('Set', function() {
|
57 | it('should set a value', function() {
|
58 | var tests = [
|
59 | [1000,1000],
|
60 | [-0.25,-0.25]
|
61 | ],
|
62 | num;
|
63 |
|
64 | for (var i = 0; i < tests.length; i++) {
|
65 | num = numeral().set(tests[i][0]);
|
66 |
|
67 | expect(num.value()).to.equal(tests[i][1]);
|
68 | }
|
69 | });
|
70 | });
|
71 |
|
72 | describe('Custom Zero', function() {
|
73 | it('should change zero value', function() {
|
74 | var tests = [
|
75 | [0,null,'0','0'],
|
76 | [0,'N/A','0','N/A'],
|
77 | [0,'','','']
|
78 | ];
|
79 |
|
80 | for (var i = 0; i < tests.length; i++) {
|
81 | numeral.zeroFormat(tests[i][1]);
|
82 |
|
83 | expect(numeral(tests[i][0]).format(tests[i][2])).to.equal(tests[i][3]);
|
84 | }
|
85 | });
|
86 | });
|
87 |
|
88 | describe('Custom Null', function() {
|
89 | it('should change null value', function() {
|
90 | var tests = [
|
91 | [null,null,'0','0'],
|
92 | [null,'N/A','0','N/A'],
|
93 | [null,'','','']
|
94 | ];
|
95 |
|
96 | for (var i = 0; i < tests.length; i++) {
|
97 | numeral.nullFormat(tests[i][1]);
|
98 |
|
99 | expect(numeral(tests[i][0]).format(tests[i][2])).to.equal(tests[i][3]);
|
100 | }
|
101 | });
|
102 | });
|
103 |
|
104 | describe('Clone', function() {
|
105 | it('should clone', function() {
|
106 | var a = numeral(1000),
|
107 | b = numeral(a),
|
108 | c = a.clone(),
|
109 | aVal = a.value(),
|
110 | aSet = a.set(2000).value(),
|
111 | bVal = b.value(),
|
112 | cVal = c.add(10).value();
|
113 |
|
114 | expect(aVal).to.equal(1000);
|
115 | expect(aSet).to.equal(2000);
|
116 | expect(bVal).to.equal(1000);
|
117 | expect(cVal).to.equal(1010);
|
118 | });
|
119 | });
|
120 |
|
121 | describe('isNumeral', function() {
|
122 | it('should return boolean', function() {
|
123 | var tests = [
|
124 | [numeral(),true],
|
125 | [1,false]
|
126 | ];
|
127 |
|
128 | for (var i = 0; i < tests.length; i++) {
|
129 | expect(numeral.isNumeral(tests[i][0])).to.equal(tests[i][1]);
|
130 | }
|
131 | });
|
132 | });
|
133 |
|
134 | describe('Format', function() {
|
135 | it('should format to a number', function() {
|
136 | var tests = [
|
137 | [0, null, '0'],
|
138 | [0, '0.00', '0.00'],
|
139 | [null, null, '0'],
|
140 | [NaN, '0.0', '0.0'],
|
141 | [10000,'0,0.0000','10,000.0000'],
|
142 | [10000.23,'0,0','10,000'],
|
143 | [-10000,'0,0.0','-10,000.0'],
|
144 | [10000.1234,'0.000','10000.123'],
|
145 | [10000,'0[.]00','10000'],
|
146 | [10000.1,'0[.]00','10000.10'],
|
147 | [10000.123,'0[.]00','10000.12'],
|
148 | [10000.456,'0[.]00','10000.46'],
|
149 | [10000.001,'0[.]00','10000'],
|
150 | [10000.45,'0[.]00[0]','10000.45'],
|
151 | [10000.456,'0[.]00[0]','10000.456'],
|
152 | [-10000,'(0,0.0000)','(10,000.0000)'],
|
153 | [-12300,'+0,0.0000','-12,300.0000'],
|
154 | [1230,'+0,0','+1,230'],
|
155 | [100.78, '0', '101'],
|
156 | [100.28, '0', '100'],
|
157 | [1.932,'0.0','1.9'],
|
158 | [1.9687,'0','2'],
|
159 | [1.9687,'0.0','2.0'],
|
160 | [-0.23,'.00','-.23'],
|
161 | [-0.23,'(.00)','(.23)'],
|
162 | [0.23,'0.00000','0.23000'],
|
163 | [0.67,'0.0[0000]','0.67'],
|
164 | [3162.63,'0.0[00000000000000]','3162.63'],
|
165 | [1.99,'0.[0]','2'],
|
166 | [1.0501,'0.00[0]','1.05'],
|
167 |
|
168 | [2000000000,'0.0a','2.0b'],
|
169 | [1230974,'0.0a','1.2m'],
|
170 | [1460,'0a','1k'],
|
171 | [-104000,'0 a','-104 k'],
|
172 |
|
173 | [-5444333222111, '0,0 ak', '-5,444,333,222 k'],
|
174 | [5444333222111, '0,0 am', '5,444,333 m'],
|
175 | [-5444333222111, '0,0 ab', '-5,444 b'],
|
176 | [-5444333222111, '0,0 at', '-5 t'],
|
177 | [123456, '0.0[0] ak', '123.46 k'],
|
178 | [150,'0.0 ak','0.2 k']
|
179 | ],
|
180 | i,
|
181 | n,
|
182 | output;
|
183 |
|
184 | for (i = 0; i < tests.length; i++) {
|
185 | n = numeral(tests[i][0]);
|
186 | output = n.format(tests[i][1]);
|
187 |
|
188 | expect(output).to.equal(tests[i][2]);
|
189 |
|
190 | expect(typeof output).to.equal('string');
|
191 | }
|
192 | });
|
193 | });
|
194 |
|
195 | describe('Unformat', function() {
|
196 | before(function() {
|
197 | numeral.zeroFormat('N/A');
|
198 | numeral.nullFormat('N/A');
|
199 | });
|
200 |
|
201 | after(function() {
|
202 | numeral.reset();
|
203 | });
|
204 |
|
205 | it('should unformat a number', function() {
|
206 | var tests = [
|
207 | ['10,000.123', 10000.123],
|
208 | ['(0.12345)', -0.12345],
|
209 | ['((--0.12345))', 0.12345],
|
210 | ['1.23t', 1230000000000],
|
211 | ['N/A', 0],
|
212 | ['', null],
|
213 |
|
214 | [0, 0],
|
215 | [1, 1],
|
216 | [1.1, 1.1],
|
217 | [-0, 0],
|
218 | [-1, -1],
|
219 | [-1.1, -1.1]
|
220 | ];
|
221 |
|
222 | for (var i = 0; i < tests.length; i++) {
|
223 | expect(numeral(tests[i][0]).value()).to.equal(tests[i][1]);
|
224 | }
|
225 | });
|
226 | });
|
227 |
|
228 | describe('Validate', function() {
|
229 | var locale = 'en';
|
230 |
|
231 | describe('Numbers', function() {
|
232 | it('should validate numbers', function() {
|
233 | var tests = [
|
234 | ['1000', true],
|
235 | ['1,000', true],
|
236 | ['10,0,0', true],
|
237 | ['10.123', true],
|
238 | ['1,000.123', true],
|
239 | ['1000,123.123', true],
|
240 | ['1000 ', true],
|
241 | [' 1000 ', true],
|
242 | [' 1000', true],
|
243 | [' 1000,100.123', true],
|
244 | ['1.0,00', false],
|
245 | ['1.0.00', false],
|
246 | ['1 000', false],
|
247 | ['1.000,123', false],
|
248 | ['1000.', false],
|
249 | ['1000,', false],
|
250 | ['10..00', false],
|
251 | ['10,,00', false],
|
252 | ['10, 00', false]
|
253 | ];
|
254 |
|
255 | for (var i = 0; i < tests.length; i++) {
|
256 | expect(numeral.validate(tests[i][0], locale)).to.equal(tests[i][1]);
|
257 | }
|
258 | });
|
259 | });
|
260 |
|
261 | describe('Currency', function() {
|
262 | it('should validate currency', function() {
|
263 | var tests = [
|
264 | ['$1000', true],
|
265 | ['$1,000', true],
|
266 | ['$10,0,0', true],
|
267 | ['$10.123', true],
|
268 | ['$1,000.123', true],
|
269 | ['$1000 ', true],
|
270 | [' $1000 ', true],
|
271 | [' $1000', true],
|
272 | [' $1000,100.123', true],
|
273 | ['$100.123k', true],
|
274 | ['$100.123m', true],
|
275 | ['$100.123b', true],
|
276 | ['$100.123t', true],
|
277 | ['100,456.123k', true],
|
278 | [' 100,456.123t ', true],
|
279 | ['$1,00.123k', true],
|
280 | ['%100', false],
|
281 | [' %1.0.00', false],
|
282 | [' ^1 000 ', false],
|
283 | ['^1.000 ', false],
|
284 | ['$ 1000.', false],
|
285 | ['%1000', false],
|
286 | ['100,456.123z', false],
|
287 | ['$100$', false],
|
288 | ['$100,213.456l', false],
|
289 | ['aa100,213.456l', false],
|
290 | ['$100,213.456kk', false]
|
291 | ];
|
292 |
|
293 | for (var i = 0; i < tests.length; i++) {
|
294 | expect(numeral.validate(tests[i][0], locale)).to.equal(tests[i][1]);
|
295 | }
|
296 | });
|
297 | });
|
298 | });
|
299 |
|
300 | describe('Manipulate', function() {
|
301 |
|
302 | describe('Add', function() {
|
303 | it('should add', function() {
|
304 | var tests = [
|
305 | [1000,10,1010],
|
306 | [0.5,3,3.5],
|
307 | [-100,200,100],
|
308 | [0.1,0.2,0.3],
|
309 | [0.28,0.01,0.29],
|
310 | [0.289999,0.000001,0.29],
|
311 | [0.29,0.01,0.3]
|
312 | ],
|
313 | num;
|
314 |
|
315 | for (var i = 0; i < tests.length; i++) {
|
316 | num = numeral(tests[i][0]);
|
317 |
|
318 | num.add(tests[i][1]);
|
319 |
|
320 | expect(num.value()).to.equal(tests[i][2]);
|
321 | }
|
322 | });
|
323 | });
|
324 |
|
325 | describe('Subtract', function() {
|
326 | it('should subtract', function() {
|
327 | var tests = [
|
328 | [1000,10,990],
|
329 | [0.5,3,-2.5],
|
330 | [-100,200,-300],
|
331 | [0.3,0.1,0.2],
|
332 | [0.28,0.01,0.27],
|
333 | [0.29,0.01,0.28]
|
334 | ],
|
335 | num;
|
336 |
|
337 | for (var i = 0; i < tests.length; i++) {
|
338 | num = numeral(tests[i][0]);
|
339 |
|
340 | num.subtract(tests[i][1]);
|
341 |
|
342 | expect(num.value()).to.equal(tests[i][2]);
|
343 | }
|
344 | });
|
345 | });
|
346 |
|
347 |
|
348 | describe('Add', function() {
|
349 | it('should add', function() {
|
350 | });
|
351 | });
|
352 |
|
353 |
|
354 | describe('Multiply', function() {
|
355 | it('should multiply', function() {
|
356 | var tests = [
|
357 | [1000,10,10000],
|
358 | [0.5,3,1.5],
|
359 | [-100,200,-20000],
|
360 | [0.1,0.2,0.02],
|
361 | [0.28,0.01,0.0028],
|
362 | [0.29,0.01,0.0029],
|
363 | [0.00000231,10000000,23.1]
|
364 | ],
|
365 | num;
|
366 |
|
367 | for (var i = 0; i < tests.length; i++) {
|
368 | num = numeral(tests[i][0]);
|
369 |
|
370 | num.multiply(tests[i][1]);
|
371 |
|
372 | expect(num.value()).to.equal(tests[i][2]);
|
373 | }
|
374 | });
|
375 | });
|
376 |
|
377 | describe('Divide', function() {
|
378 | it('should divide', function() {
|
379 | var tests = [
|
380 | [1000,10,100],
|
381 | [0.5,3,0.16666666666666666],
|
382 | [-100,200,-0.5],
|
383 | [5.3,0.1,53],
|
384 | [0.28,0.01,28],
|
385 | [0.29,0.01,29]
|
386 | ],
|
387 | num;
|
388 |
|
389 | for (var i = 0; i < tests.length; i++) {
|
390 | num = numeral(tests[i][0]);
|
391 |
|
392 | num.divide(tests[i][1]);
|
393 |
|
394 | expect(num.value()).to.equal(tests[i][2]);
|
395 | }
|
396 | });
|
397 | });
|
398 |
|
399 | describe('Difference', function() {
|
400 | it('should find a difference', function() {
|
401 | var tests = [
|
402 | [1000,10,990],
|
403 | [0.5,3,2.5],
|
404 | [-100,200,300],
|
405 | [0.3,0.2,0.1],
|
406 | [0.28,0.01,0.27],
|
407 | [0.29,0.01,0.28]
|
408 | ],
|
409 | num;
|
410 |
|
411 | for (var i = 0; i < tests.length; i++) {
|
412 | num = numeral(tests[i][0]);
|
413 |
|
414 | expect(num.difference(tests[i][1])).to.equal(tests[i][2]);
|
415 | }
|
416 | });
|
417 | });
|
418 |
|
419 | describe('Rounding', function() {
|
420 | it('should format with rounding', function() {
|
421 | var tests = [
|
422 |
|
423 | [2280002, '0.00a', '2.28m', '2.29m'],
|
424 | [10000.23,'0,0','10,000', '10,001'],
|
425 | [1000.234,'0,0.00','1,000.23', '1,000.24'],
|
426 | [0.97487823,'0.000','0.974','0.975'],
|
427 | [-0.433,'0.0','-0.5', '-0.4']
|
428 | ],
|
429 | i;
|
430 |
|
431 | for (i = 0; i < tests.length; i++) {
|
432 |
|
433 | expect(numeral(tests[i][0]).format(tests[i][1], Math.floor)).to.equal(tests[i][2]);
|
434 |
|
435 |
|
436 | expect(numeral(tests[i][0]).format(tests[i][1], Math.ceil)).to.equal(tests[i][3]);
|
437 | }
|
438 | });
|
439 | });
|
440 | });
|
441 | });
|