import { BigNumber } from 'bignumber.js'; import { formatBalance, formatPercentageNumber, formatReadableNumber, formatShortNumber, formatTokenAmountNumber, } from '../formatter'; describe('formatBalance', () => { it('format zero', () => { expect(formatBalance(0, 0)).toBe('0'); expect(formatBalance(new BigNumber(0), 0)).toBe('0'); expect(formatBalance('0', 0)).toBe('0'); }); it('format non-numeric', () => { expect(formatBalance(undefined, undefined)).toBe('NaN'); expect(formatBalance(null, null)).toBe('NaN'); expect(formatBalance('abc', null)).toBe('NaN'); }); it('normal input', () => { expect(formatBalance(20, 3)).toBe('20.000'); }); }); describe('formatReadableNumber', () => { it('abnormal input', () => { expect( formatReadableNumber({ input: '', }), ).toBe('-'); expect( formatReadableNumber({ input: undefined, }), ).toBe('-'); expect( formatReadableNumber({ input: 'abc', }), ).toBe('-'); }); it('normal input', () => { expect( formatReadableNumber({ input: 123, }), ).toBe('123'); expect( formatReadableNumber({ input: 123.8888, showDecimals: 2, }), ).toBe('123.88'); expect( formatReadableNumber({ input: 123.8888, showIntegerOnly: true, }), ).toBe('123'); expect( formatReadableNumber({ input: 123.8888, showDecimalsOnly: true, }), ).toBe('0.8888'); expect( formatReadableNumber({ input: 0.00000123, }), ).toBe('0.0000012'); expect( formatReadableNumber({ input: 0.000000123, }), ).toBe('0.00000012'); expect( formatReadableNumber({ input: 0.000000123, showPrecisionDecimals: 4, }), ).toBe('1.23e-7'); expect( formatReadableNumber({ input: 0.0000000123, }), ).toBe('1.2e-8'); expect( formatReadableNumber({ input: 0.00000000000000000123, }), ).toBe('1.2e-18'); expect( formatReadableNumber({ input: 0.00000000000000000123, showIntegerOnly: true, }), ).toBe('0'); expect( formatReadableNumber({ input: 0.00000000000000000123, showDecimalsOnly: true, }), ).toBe('0.0000000000000000012'); expect( formatReadableNumber({ input: 0.00000000000000000123, showPrecisionDecimals: 20, }), ).toBe('1.23e-18'); expect( formatReadableNumber({ input: '132231123123.888', }), ).toBe('132,231,123,123.888'); expect( formatReadableNumber({ input: '132231123123.888', noGroupSeparator: true, }), ).toBe('132231123123.888'); }); }); describe('formatPercentageNumber', () => { it('abnormal input', () => { expect( formatPercentageNumber({ input: 'abc', }), ).toBe('-%'); expect( formatPercentageNumber({ input: undefined, }), ).toBe('-'); }); it('normal input', () => { expect( formatPercentageNumber({ input: 12.888, }), ).toBe('1,288.8%'); expect( formatPercentageNumber({ input: 0.0000000000000012, }), ).toBe('1.2e-13%'); expect( formatPercentageNumber({ input: 1.23, }), ).toBe('123%'); }); }); describe('formatTokenAmountNumber', () => { it('abnormal input', () => { expect( formatTokenAmountNumber({ input: '', }), ).toBe('-'); expect( formatTokenAmountNumber({ input: undefined, }), ).toBe('-'); expect( formatTokenAmountNumber({ input: 'abc', }), ).toBe('-'); }); it('normal input', () => { expect( formatTokenAmountNumber({ input: 123, }), ).toBe('123'); expect( formatTokenAmountNumber({ input: 123.8888, decimals: 2, }), ).toBe('123.88'); expect( formatTokenAmountNumber({ input: 0.00000000000000000123, }), ).toBe('1.2e-18'); expect( formatTokenAmountNumber({ input: 0.00000000000000000123, showPrecisionDecimals: 20, }), ).toBe('1.23e-18'); expect( formatTokenAmountNumber({ input: '132231123123.888', }), ).toBe('132,231,123,123'); expect( formatTokenAmountNumber({ input: '132231123123', noGroupSeparator: true, }), ).toBe('132231123123'); }); }); describe('formatShortNumber', () => { it('abnormal input', () => { expect(formatShortNumber(new BigNumber(undefined))).toBe('-'); expect(formatShortNumber(new BigNumber(0))).toBe('0'); }); it('normal input', () => { expect(formatShortNumber(new BigNumber(0.000000123))).toBe('1.23e-7'); // toExponential expect(formatShortNumber(new BigNumber(1900))).toBe('1.9K'); expect(formatShortNumber(new BigNumber(19800000))).toBe('19.8M'); expect(formatShortNumber(new BigNumber(198000000000))).toBe('198,000M'); }); });