UNPKG

svg-pathdata

Version:

Manipulate SVG path data (path[d] attribute content) simply and efficiently.

41 lines 2.81 kB
import { describe, test, expect } from '@jest/globals'; import { SVGPathData } from '../index.js'; function testNormalizeST(path) { const pathData = new SVGPathData(path).normalizeST(); return pathData.encode(); } describe('normalization of curves', () => { test("should ignore everything which isn't S s T t", () => { expect(testNormalizeST('m20,30c0 0 10 20 15 30q10 20 15 30h10v10a10 10 5 1 0 10 10z')).toEqual('m20 30c0 0 10 20 15 30q10 20 15 30h10v10a10 10 5 1 0 10 10z'); }); test("should take the previous point as the curve parameter if the previous curve isn't of the same type", () => { expect(testNormalizeST('M 10 10 h 100 s 10 20 15 30 t 20 15')).toEqual('M10 10h100c0 0 10 20 15 30q0 0 20 15'); }); test('should mirror the previous control point', () => { expect(testNormalizeST('M 10 10 s 10 20 15 30 S 90 80 100 100')).toEqual('M10 10c0 0 10 20 15 30C30 50 90 80 100 100'); }); test('should handle multiple consecutive smooth cubic curves', () => { expect(testNormalizeST('M 10 10 C 20 20 30 30 40 40 S 60 60 70 70 S 90 90 100 100')).toEqual('M10 10C20 20 30 30 40 40C50 50 60 60 70 70C80 80 90 90 100 100'); }); test('should handle multiple consecutive smooth quadratic curves', () => { expect(testNormalizeST('M 10 10 Q 20 30 30 40 T 50 60 T 70 80')).toEqual('M10 10Q20 30 30 40Q40 50 50 60Q60 70 70 80'); }); test('should handle mixed absolute and relative smooth curves', () => { expect(testNormalizeST('M 10 10 C 20 30 30 40 40 50 s 30 40 40 50')).toEqual('M10 10C20 30 30 40 40 50c10 10 30 40 40 50'); expect(testNormalizeST('M 10 10 Q 20 30 30 40 t 40 50')).toEqual('M10 10Q20 30 30 40q10 10 40 50'); }); test('should correctly reflect control points at inflection points', () => { expect(testNormalizeST('M 10 10 C 40 10 60 40 60 60 S 10 90 10 60')).toEqual('M10 10C40 10 60 40 60 60C60 80 10 90 10 60'); }); test('should handle relative coordinates with large values', () => { expect(testNormalizeST('m 10 10 c 50 0 100 50 100 100 s -50 100 -100 100')).toEqual('m10 10c50 0 100 50 100 100c0 50 -50 100 -100 100'); }); test('should correctly handle reflection in complex paths', () => { expect(testNormalizeST('M 20 20 C 40 40 60 40 80 20 S 120 0 140 20 C 160 40 160 60 140 80 s -40 0 -60 -20')).toEqual('M20 20C40 40 60 40 80 20C100 0 120 0 140 20C160 40 160 60 140 80c-20 20 -40 0 -60 -20'); }); test('should handle smooth curves after non-curve commands', () => { expect(testNormalizeST('M 10 10 L 50 50 S 70 80 90 90')).toEqual('M10 10L50 50C50 50 70 80 90 90'); expect(testNormalizeST('M 10 10 H 50 T 90 50')).toEqual('M10 10H50Q50 10 90 50'); }); }); //# sourceMappingURL=normalize_curves.test.js.map