| import { NumberFormats, NumberFormatter, NumberFormatterRegistry } from '@superset-ui/core/src'; |
| |
| describe('NumberFormatterRegistry', () => { |
| let registry: NumberFormatterRegistry; |
| beforeEach(() => { |
| registry = new NumberFormatterRegistry(); |
| }); |
| it('has SMART_NUMBER as default formatter out of the box', () => { |
| expect(registry.getDefaultKey()).toBe(NumberFormats.SMART_NUMBER); |
| }); |
| describe('.get(format)', () => { |
| it('creates and returns a new formatter if does not exist', () => { |
| const formatter = registry.get('.2f'); |
| expect(formatter).toBeInstanceOf(NumberFormatter); |
| expect(formatter.format(100)).toEqual('100.00'); |
| }); |
| it('returns an existing formatter if already exists', () => { |
| const formatter = registry.get('.2f'); |
| const formatter2 = registry.get('.2f'); |
| expect(formatter).toBe(formatter2); |
| }); |
| it('falls back to default format if format is not specified', () => { |
| registry.setDefaultKey('.1f'); |
| const formatter = registry.get(); |
| expect(formatter.format(100)).toEqual('100.0'); |
| }); |
| it('falls back to default format if format is null', () => { |
| registry.setDefaultKey('.1f'); |
| // @ts-ignore |
| const formatter = registry.get(null); |
| expect(formatter.format(100)).toEqual('100.0'); |
| }); |
| it('falls back to default format if format is undefined', () => { |
| registry.setDefaultKey('.1f'); |
| const formatter = registry.get(undefined); |
| expect(formatter.format(100)).toEqual('100.0'); |
| }); |
| it('falls back to default format if format is empty string', () => { |
| registry.setDefaultKey('.1f'); |
| const formatter = registry.get(''); |
| expect(formatter.format(100)).toEqual('100.0'); |
| }); |
| it('removes leading and trailing spaces from format', () => { |
| const formatter = registry.get(' .2f'); |
| expect(formatter).toBeInstanceOf(NumberFormatter); |
| expect(formatter.format(100)).toEqual('100.00'); |
| const formatter2 = registry.get('.2f '); |
| expect(formatter2).toBeInstanceOf(NumberFormatter); |
| expect(formatter2.format(100)).toEqual('100.00'); |
| const formatter3 = registry.get(' .2f '); |
| expect(formatter3).toBeInstanceOf(NumberFormatter); |
| expect(formatter3.format(100)).toEqual('100.00'); |
| }); |
| }); |
| describe('.format(format, value)', () => { |
| it('return the value with the specified format', () => { |
| expect(registry.format('.2f', 100)).toEqual('100.00'); |
| expect(registry.format(',d', 100)).toEqual('100'); |
| }); |
| it('falls back to the default formatter if the format is undefined', () => { |
| expect(registry.format(undefined, 1000)).toEqual('1k'); |
| }); |
| }); |
| }); |