Skip to content

Commit 966ecc3

Browse files
committed
Add tests for _findLargestStrokeWidth
1 parent 6782995 commit 966ecc3

File tree

2 files changed

+105
-0
lines changed

2 files changed

+105
-0
lines changed

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
"json": "^9.0.6",
4040
"lodash.defaultsdeep": "4.6.1",
4141
"mkdirp": "^1.0.3",
42+
"mock-require": "^3.0.3",
4243
"rimraf": "^3.0.1",
4344
"tap": "^11.0.1",
4445
"webpack": "^4.8.0",

test/stroke-width.js

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
const test = require('tap').test;
2+
const jsdom = require('jsdom');
3+
const {JSDOM} = jsdom;
4+
5+
const mockRequire = require('mock-require');
6+
// The font inliner uses Webpack loader require syntax, which doesn't work in Node.
7+
mockRequire('../src/font-inliner', () => {});
8+
9+
const SvgRenderer = require('../src/svg-renderer');
10+
11+
const {window} = new JSDOM();
12+
// The SvgRenderer constructor tries to get a canvas' context, which doesn't work in JSDOM
13+
window.HTMLCanvasElement.prototype.getContext = () => {};
14+
global.window = window;
15+
global.document = window.document;
16+
global.DOMParser = window.DOMParser;
17+
const parser = new window.DOMParser();
18+
19+
const renderer = new SvgRenderer();
20+
21+
const parseSVGString = svgString => parser.parseFromString(svgString, 'image/svg+xml').documentElement;
22+
23+
test('stroke-width set to maximum', t => {
24+
const svg = parseSVGString(`
25+
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 256 256" height="256" width="256">
26+
<circle r="128" cy="128" cx="128" fill="red" fill-rule="nonzero" stroke="black" stroke-width="16" />
27+
<circle r="128" cy="128" cx="128" fill="blue" fill-rule="nonzero" stroke="black" stroke-width="32" />
28+
<circle r="128" cy="128" cx="128" fill="green" fill-rule="nonzero" stroke="black" stroke-width="48" />
29+
</svg>
30+
`);
31+
32+
const largestStrokeWidth = renderer._findLargestStrokeWidth(svg);
33+
34+
t.equals(largestStrokeWidth, 48, 'stroke-width is set to largest value');
35+
t.end();
36+
});
37+
38+
39+
test('stroke-width unset', t => {
40+
const svg = parseSVGString(`
41+
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 256 256" height="256" width="256">
42+
<circle r="128" cy="128" cx="128" fill="red" fill-rule="nonzero" stroke="black" />
43+
</svg>
44+
`);
45+
46+
const largestStrokeWidth = renderer._findLargestStrokeWidth(svg);
47+
48+
t.equals(largestStrokeWidth, 1, 'stroke-width is 1 by default');
49+
t.end();
50+
});
51+
52+
test('stroke-width below 1', t => {
53+
const svg = parseSVGString(`
54+
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 256 256" height="256" width="256">
55+
<circle r="128" cy="128" cx="128" fill="red" fill-rule="nonzero" stroke="black" stroke-width="0.5" />
56+
</svg>
57+
`);
58+
59+
const largestStrokeWidth = renderer._findLargestStrokeWidth(svg);
60+
61+
t.equals(largestStrokeWidth, 0.5, 'stroke-width is 0.5');
62+
t.end();
63+
});
64+
65+
test('stroke-width but no stroke', t => {
66+
const svg = parseSVGString(`
67+
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 256 256" height="256" width="256">
68+
<circle r="128" cy="128" cx="128" fill="red" fill-rule="nonzero" stroke="black" stroke-width="16" />
69+
<circle r="128" cy="128" cx="128" fill="white" fill-rule="nonzero" stroke-width="32" />
70+
</svg>
71+
`);
72+
73+
const largestStrokeWidth = renderer._findLargestStrokeWidth(svg);
74+
75+
t.equals(largestStrokeWidth, 16, 'stroke-width is ignored when element has no stroke attribute');
76+
t.end();
77+
});
78+
79+
test('stroke-width set to invalid value', t => {
80+
const svg = parseSVGString(`
81+
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 256 256" height="256" width="256">
82+
<circle r="128" cy="128" cx="128" fill="red" fill-rule="nonzero" stroke="black" stroke-width="wrong" />
83+
</svg>
84+
`);
85+
86+
const largestStrokeWidth = renderer._findLargestStrokeWidth(svg);
87+
88+
t.equals(largestStrokeWidth, 1, 'invalid stroke-width defaults to 1');
89+
t.end();
90+
});
91+
92+
test('stroke-width on the wrong elements', t => {
93+
const svg = parseSVGString(`
94+
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 256 256" height="256" width="256">
95+
<image href="" stroke="black" stroke-width="64" />
96+
<circle r="128" cy="128" cx="128" fill="white" fill-rule="nonzero" stroke="black" stroke-width="16" />
97+
</svg>
98+
`);
99+
100+
const largestStrokeWidth = renderer._findLargestStrokeWidth(svg);
101+
102+
t.equals(largestStrokeWidth, 16, 'stroke-width is ignored when applied to elements that cannot have a stroke');
103+
t.end();
104+
});

0 commit comments

Comments
 (0)