describe('PathKit\'s Effects', function() { // Note, don't try to print the PathKit object - it can cause Karma/Jasmine to lock up. var PathKit = null; const LoadPathKit = new Promise(function(resolve, reject) { if (PathKit) { resolve(); } else { PathKitInit({ locateFile: (file) => '/pathkit/'+file, }).then((_PathKit) => { PathKit = _PathKit; resolve(); }); } }); // see https://fiddle.skia.org/c/@discrete_path function drawStar(X=128, Y=128, R=116) { let p = PathKit.NewPath(); p.moveTo(X + R, Y); for (let i = 1; i < 8; i++) { let a = 2.6927937 * i; p.lineTo(X + R * Math.cos(a), Y + R * Math.sin(a)); } p.closePath(); return p; } it('effects_dash', function(done) { function setup(ctx) { ctx.path = drawStar(); } function test(ctx) { let path = ctx.path.copy().dash(10, 3, 1); path.delete(); } function teardown(ctx) { ctx.path.delete(); } LoadPathKit.then(() => { benchmarkAndReport('effects_dash', setup, test, teardown).then(() => { done(); }).catch(reportError(done)); }); }); it('effects_trim', function(done) { function setup(ctx) { ctx.path = drawStar(); } function test(ctx) { let path = ctx.path.copy().trim(0.25, .8); path.delete(); } function teardown(ctx) { ctx.path.delete(); } LoadPathKit.then(() => { benchmarkAndReport('effects_trim', setup, test, teardown).then(() => { done(); }).catch(reportError(done)); }); }); it('effects_trim_complement', function(done) { function setup(ctx) { ctx.path = drawStar(); } function test(ctx) { let path = ctx.path.copy().trim(0.25, .8, true); path.delete(); } function teardown(ctx) { ctx.path.delete(); } LoadPathKit.then(() => { benchmarkAndReport('effects_trim_complement', setup, test, teardown).then(() => { done(); }).catch(reportError(done)); }); }); it('effects_transform', function(done) { function setup(ctx) { ctx.path = drawStar(); } function test(ctx) { let path = ctx.path.copy().transform(3, 0, 0, 0, 3, 0, 0, 0, 1); path.delete(); } function teardown(ctx) { ctx.path.delete(); } LoadPathKit.then(() => { benchmarkAndReport('effects_transform', setup, test, teardown).then(() => { done(); }).catch(reportError(done)); }); }); it('effects_stroke', function(done) { function setup(ctx) { ctx.path = drawStar(); } function test(ctx) { let path = ctx.path.copy().stroke({ width: 15, join: PathKit.StrokeJoin.BEVEL, cap: PathKit.StrokeCap.BUTT, miter_limit: 2, }); path.delete(); } function teardown(ctx) { ctx.path.delete(); } LoadPathKit.then(() => { benchmarkAndReport('effects_stroke', setup, test, teardown).then(() => { done(); }).catch(reportError(done)); }); }); });