UNPKG

linear-gradient-parser

Version:

Parses a SVG linear gradient string / parsed JSON into css background image property

96 lines (75 loc) 3.52 kB
import { simpleGradient } from '../../test/stub'; import { hexToRgb } from '../'; import getGradientStops from '.'; const parser = new DOMParser(); describe('utils / getGradientStops', () => { let gradient, stops; beforeEach(() => { const doc = parser.parseFromString(simpleGradient.string, 'image/svg+xml'); gradient = doc.querySelector('linearGradient'); stops = getGradientStops(gradient); }); describe('General', () => { it('Returns proper amount of stops', () => { expect(stops.length).toEqual(simpleGradient.stops.length); }); it.each( simpleGradient.stops.map((stop, index) => ({ ...stop, index })) )('Should return proper stop properties', (gradientStop) => { const resultStop = stops[gradientStop.index]; const { r, g, b, a } = hexToRgb(gradientStop.color, gradientStop.opacity); const expectedColor = gradientStop.opacity ? `rgba(${r}, ${g}, ${b}, ${a})` : `rgb(${r}, ${g}, ${b})`; expect(resultStop.color).toEqual(expectedColor); expect(resultStop.offset).toEqual(gradientStop.offset * 100); }); }); describe('When stop has percentage offset', () => { const gradientString = `<linearGradient xmlns="http://www.w3.org/2000/svg"> <stop offset="0%" stop-color="#ffffff"> </stop> <stop offset="50%" stop-color="#ffffff"> </stop> <stop offset="100%" stop-color="#ffffff"> </stop> </linearGradient>`; let gradient; beforeEach(() => { const doc = parser.parseFromString(gradientString, 'image/svg+xml'); gradient = doc.querySelector('linearGradient'); stops = getGradientStops(gradient); }); it.each([0, 50, 100])('Returns offset (%p) as number', (offset) => { const stopsOffset = stops.map((stop) => stop.offset); expect(stopsOffset.includes(offset)).toBeTruthy(); }); }); describe('When stop has numeric offset', () => { const gradientString = `<linearGradient xmlns="http://www.w3.org/2000/svg"> <stop offset="0" stop-color="#ffffff"> </stop> <stop offset="0.5" stop-color="#ffffff"> </stop> <stop offset="1" stop-color="#ffffff"> </stop> </linearGradient>`; let gradient; beforeEach(() => { const doc = parser.parseFromString(gradientString, 'image/svg+xml'); gradient = doc.querySelector('linearGradient'); stops = getGradientStops(gradient); }); it.each([0, 50, 100])('Returns offset (%p) as number', (offset) => { const stopsOffset = stops.map((stop) => stop.offset); expect(stopsOffset.includes(offset)).toBeTruthy(); }); }); describe('When stop colors are in style', () => { const gradientString = `<linearGradient xmlns="http://www.w3.org/2000/svg"> <stop offset="1" style='stop-color: #ffffff'> </stop> </linearGradient>`; let gradient; beforeEach(() => { const doc = parser.parseFromString(gradientString, 'image/svg+xml'); gradient = doc.querySelector('linearGradient'); stops = getGradientStops(gradient); }); it('Returns hex color', () => { expect(stops[0].color).toEqual('rgb(255, 255, 255)'); }); }); });