blob: 60d1397a50903a85fde1f964fc6e5e3d620edf1a [file] [log] [blame]
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');
});
});
});