fabric
Version:
Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.
48 lines (40 loc) • 1.91 kB
text/typescript
import { Path } from '../shapes/Path';
import { Rect } from '../shapes/Rect';
import { loadSVGFromString } from './loadSVGFromString';
describe('loadSVGFromString', () => {
it('returns successful parse of svg with use tag containing bad reference', async () => {
// in this case, ignore bad use but still load rest of svg
const str = `<svg viewBox="0 0 128 128" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<rect width="10" height="10" />
<use href="#missing" x="50" y="50" ></use>
</svg>`;
const parsedSvg = await loadSVGFromString(str);
expect(parsedSvg.objects[0]).not.toBeNull();
if (parsedSvg.objects[0] !== null) {
expect(parsedSvg.objects[0].isType('Rect')).toBe(true);
}
});
it('returns successful parse of svg with use tag containing bad clip-path', async () => {
// in this case, load svg but ignore clip-path attribute in <use>
const str = `<svg viewBox="0 0 128 128" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
<path id="heart" d="M10,30 A20,20,0,0,1,50,30 A20,20,0,0,1,90,30 Q90,60,50,90 Q10,60,10,30 Z" />
</defs>
<use clip-path="url(#myClip)" href="#heart" fill="red" />
</svg>`;
const parsedSvg = await loadSVGFromString(str);
if (parsedSvg.objects[0] !== null) {
expect(parsedSvg.objects[0] instanceof Path).toBe(true);
}
});
it('returns successful parse of svg with id starting with number', async () => {
const str = `<svg viewBox="0 0 128 128" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<rect id="123xyz" width="10" height="10" />
</svg>`;
const parsedSvg = await loadSVGFromString(str);
expect(
parsedSvg.objects[0] instanceof Rect &&
(parsedSvg.objects[0] as Rect & { id: string }).id,
).toBe('123xyz');
});
});