| import { getMultipleTextDimensions, promiseTimeout } from '@superset-ui/core/src'; |
| import { addDummyFill, removeDummyFill, SAMPLE_TEXT } from './getBBoxDummyFill'; |
| |
| describe('getMultipleTextDimension(input)', () => { |
| describe('returns dimension of the given text', () => { |
| beforeEach(addDummyFill); |
| afterEach(removeDummyFill); |
| |
| it('takes an array of text as argument', () => { |
| expect( |
| getMultipleTextDimensions({ |
| texts: [SAMPLE_TEXT[0], SAMPLE_TEXT[1], ''], |
| }), |
| ).toEqual([ |
| { |
| height: 20, |
| width: 200, |
| }, |
| { |
| height: 20, |
| width: 300, |
| }, |
| { |
| height: 0, |
| width: 0, |
| }, |
| ]); |
| }); |
| it('handles empty text', () => { |
| expect( |
| getMultipleTextDimensions({ |
| texts: ['', ''], |
| }), |
| ).toEqual([ |
| { |
| height: 0, |
| width: 0, |
| }, |
| { |
| height: 0, |
| width: 0, |
| }, |
| ]); |
| }); |
| it('handles duplicate text', () => { |
| expect( |
| getMultipleTextDimensions({ |
| texts: [SAMPLE_TEXT[0], SAMPLE_TEXT[0]], |
| }), |
| ).toEqual([ |
| { |
| height: 20, |
| width: 200, |
| }, |
| { |
| height: 20, |
| width: 200, |
| }, |
| ]); |
| }); |
| it('accepts provided class via className', () => { |
| expect( |
| getMultipleTextDimensions({ |
| texts: [SAMPLE_TEXT[0], SAMPLE_TEXT[1]], |
| className: 'test-class', |
| }), |
| ).toEqual([ |
| { |
| height: 20, |
| width: 100, |
| }, |
| { |
| height: 20, |
| width: 150, |
| }, |
| ]); |
| }); |
| it('accepts provided style.font', () => { |
| expect( |
| getMultipleTextDimensions({ |
| texts: [SAMPLE_TEXT[0], SAMPLE_TEXT[1]], |
| style: { |
| font: 'italic 700 30px Lobster', |
| }, |
| }), |
| ).toEqual([ |
| { |
| height: 30, // 20 * (30/20) [fontSize=30] |
| width: 1125, // 200 * 1.25 [fontFamily=Lobster] * (30/20) [fontSize=30] * 1.5 [fontStyle=italic] * 2 [fontWeight=700] |
| }, |
| { |
| height: 30, |
| width: 1688, // 300 * 1.25 [fontFamily=Lobster] * (30/20) [fontSize=30] * 1.5 [fontStyle=italic] * 2 [fontWeight=700] |
| }, |
| ]); |
| }); |
| it('accepts provided style.fontFamily', () => { |
| expect( |
| getMultipleTextDimensions({ |
| texts: [SAMPLE_TEXT[0], SAMPLE_TEXT[1]], |
| style: { |
| fontFamily: 'Lobster', |
| }, |
| }), |
| ).toEqual([ |
| { |
| height: 20, |
| width: 250, // 200 * 1.25 [fontFamily=Lobster] |
| }, |
| { |
| height: 20, |
| width: 375, // 300 * 1.25 [fontFamily=Lobster] |
| }, |
| ]); |
| }); |
| it('accepts provided style.fontSize', () => { |
| expect( |
| getMultipleTextDimensions({ |
| texts: [SAMPLE_TEXT[0], SAMPLE_TEXT[1]], |
| style: { |
| fontSize: '40px', |
| }, |
| }), |
| ).toEqual([ |
| { |
| height: 40, // 20 [baseHeight] * (40/20) [fontSize=40] |
| width: 400, // 200 [baseWidth] * (40/20) [fontSize=40] |
| }, |
| { |
| height: 40, |
| width: 600, // 300 [baseWidth] * (40/20) [fontSize=40] |
| }, |
| ]); |
| }); |
| it('accepts provided style.fontStyle', () => { |
| expect( |
| getMultipleTextDimensions({ |
| texts: [SAMPLE_TEXT[0], SAMPLE_TEXT[1]], |
| style: { |
| fontStyle: 'italic', |
| }, |
| }), |
| ).toEqual([ |
| { |
| height: 20, |
| width: 300, // 200 [baseWidth] * 1.5 [fontStyle=italic] |
| }, |
| { |
| height: 20, |
| width: 450, // 300 [baseWidth] * 1.5 [fontStyle=italic] |
| }, |
| ]); |
| }); |
| it('accepts provided style.fontWeight', () => { |
| expect( |
| getMultipleTextDimensions({ |
| texts: [SAMPLE_TEXT[0], SAMPLE_TEXT[1]], |
| style: { |
| fontWeight: 700, |
| }, |
| }), |
| ).toEqual([ |
| { |
| height: 20, |
| width: 400, // 200 [baseWidth] * 2 [fontWeight=700] |
| }, |
| { |
| height: 20, |
| width: 600, // 300 [baseWidth] * 2 [fontWeight=700] |
| }, |
| ]); |
| }); |
| it('accepts provided style.letterSpacing', () => { |
| expect( |
| getMultipleTextDimensions({ |
| texts: [SAMPLE_TEXT[0], SAMPLE_TEXT[1]], |
| style: { |
| letterSpacing: '1.1', |
| }, |
| }), |
| ).toEqual([ |
| { |
| height: 20, |
| width: 221, // Ceiling(200 [baseWidth] * 1.1 [letterSpacing=1.1]) |
| }, |
| { |
| height: 20, |
| width: 330, // Ceiling(300 [baseWidth] * 1.1 [letterSpacing=1.1]) |
| }, |
| ]); |
| }); |
| }); |
| it('cleans up DOM', async () => { |
| getMultipleTextDimensions({ |
| texts: [SAMPLE_TEXT[0], SAMPLE_TEXT[1]], |
| }); |
| |
| expect(document.querySelectorAll('svg')).toHaveLength(1); |
| await promiseTimeout(() => {}, 501); |
| expect(document.querySelector('svg')).toBeNull(); |
| }); |
| }); |