svg-path-properties
Version:
Calculate the length for an SVG path, to use it with node or a Canvas element
108 lines (93 loc) • 3.24 kB
text/typescript
import test from "tape";
import SVGPathProperties from "../src/svg-path-properties";
test("Testing the getParts with simple path", function (test) {
var properties = new SVGPathProperties("m10,0l10,0");
var parts = properties.getParts();
test.equal(parts.length, 1, "A one part path must give one element array");
test.equal("start" in parts[0], true, "Elements must have all properties");
test.equal("end" in parts[0], true, "Elements must have all properties");
test.equal("length" in parts[0], true, "Elements must have all properties");
test.equal(
"getPointAtLength" in parts[0],
true,
"Elements must have all properties"
);
test.equal(
"getTangentAtLength" in parts[0],
true,
"Elements must have all properties"
);
test.equal(
"getPropertiesAtLength" in parts[0],
true,
"Elements must have all properties"
);
properties = new SVGPathProperties("m10,0l10,0l10,0");
parts = properties.getParts();
test.deepEqual(parts[0].start, { x: 10, y: 0 }, "testing start points");
test.deepEqual(parts[1].start, { x: 20, y: 0 }, "testing start points");
test.deepEqual(parts[0].end, { x: 20, y: 0 }, "testing end points");
test.deepEqual(parts[1].end, { x: 30, y: 0 }, "testing end points");
test.equal(parts[0].length, 10, "testing lengths");
test.equal(parts[1].length, 10, "testing lengths");
//Testing functions
test.deepEqual(
parts[0].getPointAtLength(5),
{ x: 15, y: 0 },
"testing getPointAtLength"
);
test.deepEqual(
parts[1].getPointAtLength(5),
{ x: 25, y: 0 },
"testing getPointAtLength"
);
test.deepEqual(
parts[0].getTangentAtLength(5),
{ x: 1, y: 0 },
"testing getTangentAtLength"
);
test.deepEqual(
parts[1].getTangentAtLength(5),
{ x: 1, y: 0 },
"testing getTangentAtLength"
);
test.deepEqual(
parts[0].getPropertiesAtLength(5),
{ tangentX: 1, tangentY: 0, x: 15, y: 0 },
"testing getPropertiesAtLength"
);
test.deepEqual(
parts[1].getPropertiesAtLength(5),
{ tangentX: 1, tangentY: 0, x: 25, y: 0 },
"testing getPropertiesAtLength"
);
test.end();
});
test("Testing the getParts with simple path", function (test) {
var properties = new SVGPathProperties(
"M100,200 C100,100 250,100 250,200 S400,300 400,200"
);
var parts = properties.getParts();
test.equal(parts.length, 2, "Correct number of parts");
test.deepEqual(
parts[0].getPointAtLength(5),
properties.getPointAtLength(5),
"First part must have equal distances"
);
test.deepEqual(
parts[1].getPointAtLength(5),
properties.getPointAtLength(parts[0]["length"] + 5),
"Second part must have equal distances"
);
test.end();
});
test("Issue 15", function (test) {
var def = "M0,0 c 0.025,-0.052 0.081,-0.1387 0.2031,-0.2598 0,0 0,0 0,0";
var properties = new SVGPathProperties(def);
properties.getParts(); //The above path used to hang the programd
def =
"M0,0 c 0.025,-0.052 0.081,-0.1387 0.2031,-0.2598 0,0 0,0 0,0 c 0.1865,-0.31055 0.3632,-0.71289 0.5371,-1.22266 0.1963,-0.40625 0.3261,-0.78516 0.3857,-1.13184 0,-0.008 0,-0.0156 0,-0.0225";
properties = new SVGPathProperties(def);
properties.getParts();
test.end();
});