UNPKG

14.3 kBJavaScriptView Raw
1// Node
2if (typeof module !== 'undefined' && module.exports) {
3 var numeral = require('../src/numeral');
4 var expect = require('chai').expect;
5}
6
7describe('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 // abbreviations
168 [2000000000,'0.0a','2.0b'],
169 [1230974,'0.0a','1.2m'],
170 [1460,'0a','1k'],
171 [-104000,'0 a','-104 k'],
172 // forced abbreviations
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 // Pass Through for Numbers
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 // value, format string, expected w/ floor, expected w/ ceil
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 // floor
433 expect(numeral(tests[i][0]).format(tests[i][1], Math.floor)).to.equal(tests[i][2]);
434
435 // ceil
436 expect(numeral(tests[i][0]).format(tests[i][1], Math.ceil)).to.equal(tests[i][3]);
437 }
438 });
439 });
440 });
441});