import { looselyParseAmount, getNumberFormat, setNumberFormat } from './util'; describe('utility functions', () => { test('looseParseAmount works with basic numbers', () => { // Parsing is currently limited to 1,2 decimal places or 5-9. // Ignoring 3 places removes the possibility of improper parse // of amounts without decimal amounts included. expect(looselyParseAmount('3')).toBe(3); expect(looselyParseAmount('3.4')).toBe(3.4); expect(looselyParseAmount('3.45')).toBe(3.45); expect(looselyParseAmount('3.456')).toBe(3456); expect(looselyParseAmount('3.45000')).toBe(3.45); expect(looselyParseAmount('3.450000')).toBe(3.45); expect(looselyParseAmount('3.4500000')).toBe(3.45); expect(looselyParseAmount('3.45000000')).toBe(3.45); expect(looselyParseAmount('3.450000000')).toBe(3.45); }); test('looseParseAmount works with alternate formats', () => { expect(looselyParseAmount('3,45')).toBe(3.45); expect(looselyParseAmount('3,456')).toBe(3456); expect(looselyParseAmount('3,45000')).toBe(3.45); expect(looselyParseAmount('3,450000')).toBe(3.45); expect(looselyParseAmount('3,4500000')).toBe(3.45); expect(looselyParseAmount('3,45000000')).toBe(3.45); expect(looselyParseAmount('3,450000000')).toBe(3.45); }); test('looseParseAmount works with negative numbers', () => { expect(looselyParseAmount('-3')).toBe(-3); expect(looselyParseAmount('-3.45')).toBe(-3.45); expect(looselyParseAmount('-3,45')).toBe(-3.45); }); test('looseParseAmount works with parentheses (negative)', () => { expect(looselyParseAmount('(3.45)')).toBe(-3.45); expect(looselyParseAmount('(3)')).toBe(-3); }); test('looseParseAmount ignores non-numeric characters', () => { // This is strange behavior because it does not work for just // `3_45_23` (it needs a decimal amount). This function should be // thought through more. expect(looselyParseAmount('3_45_23.10')).toBe(34523.1); }); test('number formatting works with comma-dot format', () => { setNumberFormat({ format: 'comma-dot', hideFraction: false }); let formatter = getNumberFormat().formatter; expect(formatter.format(Number('1234.56'))).toBe('1,234.56'); setNumberFormat({ format: 'comma-dot', hideFraction: true }); formatter = getNumberFormat().formatter; expect(formatter.format(Number('1234.56'))).toBe('1,235'); }); test('number formatting works with comma-dot-in format', () => { setNumberFormat({ format: 'comma-dot-in', hideFraction: false }); let formatter = getNumberFormat().formatter; expect(formatter.format(Number('1234567.89'))).toBe('12,34,567.89'); setNumberFormat({ format: 'comma-dot-in', hideFraction: true }); formatter = getNumberFormat().formatter; expect(formatter.format(Number('1234567.89'))).toBe('12,34,568'); }); test('number formatting works with dot-comma format', () => { setNumberFormat({ format: 'dot-comma', hideFraction: false }); let formatter = getNumberFormat().formatter; expect(formatter.format(Number('1234.56'))).toBe('1.234,56'); setNumberFormat({ format: 'dot-comma', hideFraction: true }); formatter = getNumberFormat().formatter; expect(formatter.format(Number('1234.56'))).toBe('1.235'); }); test('number formatting works with space-comma format', () => { setNumberFormat({ format: 'space-comma', hideFraction: false }); let formatter = getNumberFormat().formatter; // grouping separator space char is a non-breaking space, or UTF-16 \xa0 expect(formatter.format(Number('1234.56'))).toBe('1\xa0234,56'); setNumberFormat({ format: 'space-comma', hideFraction: true }); formatter = getNumberFormat().formatter; expect(formatter.format(Number('1234.56'))).toBe('1\xa0235'); }); test('number formatting works with space-dot format', () => { setNumberFormat({ format: 'space-dot', hideFraction: false }); let formatter = getNumberFormat().formatter; // grouping separator space char is a non-breaking space, or UTF-16 \xa0 expect(formatter.format(Number('1234.56'))).toBe('1\xa0234.56'); setNumberFormat({ format: 'space-dot', hideFraction: true }); formatter = getNumberFormat().formatter; expect(formatter.format(Number('1234.56'))).toBe('1\xa0235'); }); });