| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475 |
- // Node
- if (typeof module !== 'undefined' && module.exports) {
- var numeral = require('../numeral');
- var expect = require('chai').expect;
- }
- describe('Numeral', function() {
- afterEach(function() {
- numeral.reset();
- });
- describe('Default', function() {
- it('should set a default format', function() {
- numeral.defaultFormat('0,0');
- expect(numeral(10000).format()).to.equal('10,000');
- });
- });
- describe('Types', function() {
- it('should return a value as correct type', function() {
- var tests = [
- [1234.56,'number'],
- ['1234.56','number'],
- [0,'number'],
- [NaN,'object'],
- [null,'object']
- ],
- i;
- for (i = 0; i < tests.length; i++) {
- expect(typeof numeral(tests[i][0]).value()).to.equal(tests[i][1]);
- }
- });
- });
- describe('Value', function() {
- it('should return a value', function() {
- var tests = [
- [1000, 1000],
- [0.5, 0.5],
- [null, null],
- ['1,000', 1000],
- ['not a number', null]
- ],
- num;
- for (var i = 0; i < tests.length; i++) {
- num = numeral(tests[i][0]);
- expect(num.value()).to.equal(tests[i][1]);
- }
- });
- });
- describe('Set', function() {
- it('should set a value', function() {
- var tests = [
- [1000,1000],
- [-0.25,-0.25]
- ],
- num;
- for (var i = 0; i < tests.length; i++) {
- num = numeral().set(tests[i][0]);
- expect(num.value()).to.equal(tests[i][1]);
- }
- });
- });
- describe('Custom Zero', function() {
- it('should change zero value', function() {
- var tests = [
- [0,null,'0','0'],
- [0,'N/A','0','N/A'],
- [0,'','','']
- ];
- for (var i = 0; i < tests.length; i++) {
- numeral.zeroFormat(tests[i][1]);
- expect(numeral(tests[i][0]).format(tests[i][2])).to.equal(tests[i][3]);
- }
- });
- });
- describe('Custom Null', function() {
- it('should change null value', function() {
- var tests = [
- [null,null,'0','0'],
- [null,'N/A','0','N/A'],
- [null,'','','']
- ];
- for (var i = 0; i < tests.length; i++) {
- numeral.nullFormat(tests[i][1]);
- expect(numeral(tests[i][0]).format(tests[i][2])).to.equal(tests[i][3]);
- }
- });
- });
- describe('Clone', function() {
- it('should clone', function() {
- var a = numeral(1000),
- b = numeral(a),
- c = a.clone(),
- aVal = a.value(),
- aSet = a.set(2000).value(),
- bVal = b.value(),
- cVal = c.add(10).value();
- expect(aVal).to.equal(1000);
- expect(aSet).to.equal(2000);
- expect(bVal).to.equal(1000);
- expect(cVal).to.equal(1010);
- });
- });
- describe('isNumeral', function() {
- it('should return boolean', function() {
- var tests = [
- [numeral(),true],
- [1,false]
- ];
- for (var i = 0; i < tests.length; i++) {
- expect(numeral.isNumeral(tests[i][0])).to.equal(tests[i][1]);
- }
- });
- });
- describe('Format', function() {
- it('should format to a number', function() {
- var tests = [
- [0, null, '0'],
- [0, '0.00', '0.00'],
- [null, null, '0'],
- [NaN, '0.0', '0.0'],
- [1.23,'0,0','1'],
- [10000,'0,0.0000','10,000.0000'],
- [10000.23,'0,0','10,000'],
- [-10000,'0,0.0','-10,000.0'],
- [10000.1234,'0.000','10000.123'],
- [10000,'0[.]00','10000'],
- [10000.1,'0[.]00','10000.10'],
- [10000.123,'0[.]00','10000.12'],
- [10000.456,'0[.]00','10000.46'],
- [10000.001,'0[.]00','10000'],
- [10000.45,'0[.]00[0]','10000.45'],
- [10000.456,'0[.]00[0]','10000.456'],
- [10000,'(0,0.0000)','10,000.0000'],
- [-10000,'(0,0.0000)','(10,000.0000)'],
- [-12300,'+0,0.0000','-12,300.0000'],
- [1230,'+0,0','+1,230'],
- [1230,'-0,0','1,230'],
- [-1230,'-0,0','-1,230'],
- [-1230.4,'0,0.0+','1,230.4-'],
- [-1230.4,'0,0.0-','1,230.4-'],
- [1230.4,'0,0.0-','1,230.4'],
- [100.78, '0', '101'],
- [100.28, '0', '100'],
- [1.932,'0.0','1.9'],
- [1.9687,'0','2'],
- [1.9687,'0.0','2.0'],
- [-0.23,'.00','-.23'],
- [-0.23,'(.00)','(.23)'],
- [0.23,'0.00000','0.23000'],
- [0.67,'0.0[0000]','0.67'],
- [3162.63,'0.0[00000000000000]','3162.63'],
- [1.99,'0.[0]','2'],
- [1.0501,'0.00[0]','1.05'],
- [1.005,'0.00','1.01'],
- // leading zero
- [0, '00.0', '00.0'],
- [0.23, '000.[00]', '000.23'],
- [4, '000', '004'],
- [10, '00000', '00010'],
- [1000, '000,0', '1,000'],
- [1000, '00000,0', '01,000'],
- [1000, '0000000,0', '0,001,000'],
- // abbreviations
- [2000000000,'0.0a','2.0b'],
- [1230974,'0.0a','1.2m'],
- [1460,'0a','1k'],
- [-104000,'0 a','-104 k'],
- [999950,'0.0a','1.0m'],
- [999999999,'0a','1b'],
- // forced abbreviations
- [-5444333222111, '0,0 ak', '-5,444,333,222 k'],
- [5444333222111, '0,0 am', '5,444,333 m'],
- [-5444333222111, '0,0 ab', '-5,444 b'],
- [-5444333222111, '0,0 at', '-5 t'],
- [123456, '0.0[0] ak', '123.46 k'],
- [150,'0.0 ak','0.2 k']
- ],
- i,
- n,
- output;
- for (i = 0; i < tests.length; i++) {
- n = numeral(tests[i][0]);
- output = n.format(tests[i][1]);
- expect(output).to.equal(tests[i][2]);
- expect(typeof output).to.equal('string');
- }
- });
- });
- describe('Unformat', function() {
- before(function() {
- numeral.zeroFormat('N/A');
- numeral.nullFormat('N/A');
- });
- after(function() {
- numeral.reset();
- });
- it('should unformat a number', function() {
- var tests = [
- ['10,000.123', 10000.123],
- ['(0.12345)', -0.12345],
- ['((--0.12345))', 0.12345],
- ['1.23t', 1230000000000],
- ['N/A', 0],
- ['', null],
- // Pass Through for Numbers
- [0, 0],
- [1, 1],
- [1.1, 1.1],
- [-0, 0],
- [-1, -1],
- [-1.1, -1.1]
- ];
- for (var i = 0; i < tests.length; i++) {
- expect(numeral(tests[i][0]).value()).to.equal(tests[i][1]);
- }
- });
- });
- describe('Validate', function() {
- var locale = 'en';
- describe('Numbers', function() {
- it('should validate numbers', function() {
- var tests = [
- ['1000', true],
- ['1,000', true],
- ['10,0,0', true],
- ['10.123', true],
- ['1,000.123', true],
- ['1000,123.123', true],
- ['1000 ', true],
- [' 1000 ', true],
- [' 1000', true],
- [' 1000,100.123', true],
- ['1.0,00', false],
- ['1.0.00', false],
- ['1 000', false],
- ['1.000,123', false],
- ['1000.', false],
- ['1000,', false],
- ['10..00', false],
- ['10,,00', false],
- ['10, 00', false]
- ];
- for (var i = 0; i < tests.length; i++) {
- expect(numeral.validate(tests[i][0], locale)).to.equal(tests[i][1]);
- }
- });
- });
- describe('Currency', function() {
- it('should validate currency', function() {
- var tests = [
- ['$1000', true],
- ['$1,000', true],
- ['$10,0,0', true],
- ['$10.123', true],
- ['$1,000.123', true],
- ['$1000 ', true],
- [' $1000 ', true],
- [' $1000', true],
- [' $1000,100.123', true],
- ['$100.123k', true],
- ['$100.123m', true],
- ['$100.123b', true],
- ['$100.123t', true],
- ['100,456.123k', true],
- [' 100,456.123t ', true],
- ['$1,00.123k', true],
- ['%100', false],
- [' %1.0.00', false],
- [' ^1 000 ', false],
- ['^1.000 ', false],
- ['$ 1000.', false],
- ['%1000', false],
- ['100,456.123z', false],
- ['$100$', false],
- ['$100,213.456l', false],
- ['aa100,213.456l', false],
- ['$100,213.456kk', false]
- ];
- for (var i = 0; i < tests.length; i++) {
- expect(numeral.validate(tests[i][0], locale)).to.equal(tests[i][1]);
- }
- });
- });
- });
- describe('Manipulate', function() {
- describe('Add', function() {
- it('should add', function() {
- var tests = [
- [1000,10,1010],
- [0.5,3,3.5],
- [-100,200,100],
- [0.1,0.2,0.3],
- [0.28,0.01,0.29],
- [0.289999,0.000001,0.29],
- [0.29,0.01,0.3]
- ],
- num;
- for (var i = 0; i < tests.length; i++) {
- num = numeral(tests[i][0]);
- num.add(tests[i][1]);
- expect(num.value()).to.equal(tests[i][2]);
- }
- });
- });
- describe('Subtract', function() {
- it('should subtract', function() {
- var tests = [
- [1000,10,990],
- [0.5,3,-2.5],
- [-100,200,-300],
- [0.3,0.1,0.2],
- [0.28,0.01,0.27],
- [0.29,0.01,0.28]
- ],
- num;
- for (var i = 0; i < tests.length; i++) {
- num = numeral(tests[i][0]);
- num.subtract(tests[i][1]);
- expect(num.value()).to.equal(tests[i][2]);
- }
- });
- });
- describe('Add', function() {
- it('should add', function() {
- });
- });
- describe('Multiply', function() {
- it('should multiply', function() {
- var tests = [
- [1000,10,10000],
- [0.5,3,1.5],
- [-100,200,-20000],
- [0.1,0.2,0.02],
- [0.28,0.01,0.0028],
- [0.29,0.01,0.0029],
- [0.00000231,10000000,23.1]
- ],
- num;
- for (var i = 0; i < tests.length; i++) {
- num = numeral(tests[i][0]);
- num.multiply(tests[i][1]);
- expect(num.value()).to.equal(tests[i][2]);
- }
- });
- });
- describe('Divide', function() {
- it('should divide', function() {
- var tests = [
- [1000,10,100],
- [0.5,3,0.16666666666666666],
- [-100,200,-0.5],
- [5.3,0.1,53],
- [0.28,0.01,28],
- [0.29,0.01,29]
- ],
- num;
- for (var i = 0; i < tests.length; i++) {
- num = numeral(tests[i][0]);
- num.divide(tests[i][1]);
- expect(num.value()).to.equal(tests[i][2]);
- }
- });
- });
- describe('Difference', function() {
- it('should find a difference', function() {
- var tests = [
- [1000,10,990],
- [0.5,3,2.5],
- [-100,200,300],
- [0.3,0.2,0.1],
- [0.28,0.01,0.27],
- [0.29,0.01,0.28]
- ],
- num;
- for (var i = 0; i < tests.length; i++) {
- num = numeral(tests[i][0]);
- expect(num.difference(tests[i][1])).to.equal(tests[i][2]);
- }
- });
- });
- describe('Rounding', function() {
- it('should format with rounding', function() {
- var tests = [
- // value, format string, expected w/ floor, expected w/ ceil
- [2280002, '0.00a', '2.28m', '2.29m'],
- [10000.23,'0,0','10,000', '10,001'],
- [1000.234,'0,0.00','1,000.23', '1,000.24'],
- [0.97487823,'0.000','0.974','0.975'],
- [-0.433,'0.0','-0.5', '-0.4']
- ],
- i;
- for (i = 0; i < tests.length; i++) {
- // floor
- expect(numeral(tests[i][0]).format(tests[i][1], Math.floor)).to.equal(tests[i][2]);
- // ceil
- expect(numeral(tests[i][0]).format(tests[i][1], Math.ceil)).to.equal(tests[i][3]);
- }
- });
- });
- });
- describe('Utilities', function() {
- describe('Insert', function() {
- it('should insert into string', function() {
- var tests = [
- ['1000', '+', 0, '+1000'],
- ['1000', '-', 4, '1000-']
- ],
- i;
- for (i = 0; i < tests.length; i++) {
- expect(numeral._.insert(tests[i][0], tests[i][1], tests[i][2])).to.equal(tests[i][3]);
- }
- });
- });
- });
- });
|