UNPKG

ipsased

Version:

UI toolkit monorepo containing a React component library, UI utilities, a drag-and-drop library, and more

219 lines (193 loc) 6.91 kB
import { describe, expect, it } from 'vitest'; import { getCSSValueWithUnit, getMillisecondsFromCSSValue, getUnitFromCSSValue, } from './index.js'; describe('@acusti/css-values', () => { describe('getUnitFromCSSValue', () => { it('returns any valid unit (according to CSS value type) already on the CSS value', () => { expect( getUnitFromCSSValue({ cssValueType: 'angle', defaultUnit: 'deg', value: '1.75turn', }), ).toBe('turn'); expect( getUnitFromCSSValue({ cssValueType: 'length', defaultUnit: 'px', value: '47vw', }), ).toBe('vw'); expect( getUnitFromCSSValue({ cssValueType: 'time', defaultUnit: 'ms', value: ' 1.25s ', }), ).toBe('s'); expect( getUnitFromCSSValue({ cssValueType: 'integer', defaultUnit: '', value: '42', }), ).toBe(''); // Percent is a simpler case because there is only one valid unit // Though passing defaultUnit as an empty string would mean empty unit if no match expect( getUnitFromCSSValue({ cssValueType: 'percent', defaultUnit: '', value: '1.75%', }), ).toBe('%'); }); it('returns the default unit when the given value has no valid unit', () => { expect( getUnitFromCSSValue({ cssValueType: 'angle', defaultUnit: 'deg', value: '1.75%', }), ).toBe('deg'); expect( getUnitFromCSSValue({ cssValueType: 'length', defaultUnit: 'px', value: '47deg', }), ).toBe('px'); expect( getUnitFromCSSValue({ cssValueType: 'time', defaultUnit: 'ms', value: '1.25em', }), ).toBe('ms'); expect( getUnitFromCSSValue({ cssValueType: 'percent', defaultUnit: '%', value: '23px', }), ).toBe('%'); }); it('returns the default unit when the given value is a number', () => { expect( getUnitFromCSSValue({ cssValueType: 'length', defaultUnit: 'vh', value: 10, }), ).toBe('vh'); }); }); describe('getCSSValueWithUnit', () => { it('returns numeric value with the pre-existing unit appended when it matches the CSS value type', () => { expect( getCSSValueWithUnit({ cssValueType: 'angle', defaultUnit: 'deg', value: '1.75turn', }), ).toBe('1.75turn'); expect( getCSSValueWithUnit({ cssValueType: 'length', defaultUnit: 'px', value: ' 47vw ', }), ).toBe('47vw'); expect( getCSSValueWithUnit({ cssValueType: 'time', defaultUnit: 'ms', value: '1.25s', }), ).toBe('1.25s'); expect( getCSSValueWithUnit({ cssValueType: 'percent', defaultUnit: '', value: '23%', }), ).toBe('23%'); }); it('returns the default unit when the given value has no valid unit', () => { expect( getCSSValueWithUnit({ cssValueType: 'angle', defaultUnit: 'deg', value: '1.75%', }), ).toBe('1.75deg'); expect( getCSSValueWithUnit({ cssValueType: 'length', defaultUnit: 'px', value: '47deg', }), ).toBe('47px'); expect( getCSSValueWithUnit({ cssValueType: 'time', defaultUnit: 'ms', value: '250px', }), ).toBe('250ms'); expect( getCSSValueWithUnit({ cssValueType: 'percent', defaultUnit: '%', value: '23px', }), ).toBe('23%'); }); // Also test empty value it('returns the value without unit when the given value is not numeric', () => { // This example is modeled on letter-spacing (defaults to 'px', also accepts 'normal') expect( getCSSValueWithUnit({ cssValueType: 'length', defaultUnit: 'px', value: 'normal', }), ).toBe('normal'); }); it('returns an empty string when trimmed value is empty', () => { expect( getCSSValueWithUnit({ cssValueType: 'length', defaultUnit: 'px', value: '', }), ).toBe(''); expect( getCSSValueWithUnit({ cssValueType: 'length', defaultUnit: 'px', value: ' ', }), ).toBe(''); }); }); describe('getMillisecondsFromCSSValue', () => { it('returns value converted to number of milliseconds for CSS time values', () => { expect(getMillisecondsFromCSSValue('250ms')).toBe(250); expect(getMillisecondsFromCSSValue(' 1.75s ')).toBe(1750); }); it('returns same value that was passed in if value is numeric or 0 if NaN', () => { expect(getMillisecondsFromCSSValue(1263)).toBe(1263); expect(getMillisecondsFromCSSValue(-62.56)).toBe(-62.56); expect(getMillisecondsFromCSSValue(NaN)).toBe(0); }); it('returns 0 for any non-time values', () => { expect(getMillisecondsFromCSSValue('1.75turn')).toBe(0); expect(getMillisecondsFromCSSValue('90%')).toBe(0); expect(getMillisecondsFromCSSValue(' ')).toBe(0); }); }); });