1*c8dee2aaSAndroid Build Coastguard Workerdescribe('PathKit\'s Path Behavior', function() { 2*c8dee2aaSAndroid Build Coastguard Worker function drawPath() { 3*c8dee2aaSAndroid Build Coastguard Worker let path = PathKit.NewPath(); 4*c8dee2aaSAndroid Build Coastguard Worker path.moveTo(20, 5); 5*c8dee2aaSAndroid Build Coastguard Worker path.lineTo(30, 20); 6*c8dee2aaSAndroid Build Coastguard Worker path.lineTo(40, 10); 7*c8dee2aaSAndroid Build Coastguard Worker path.lineTo(50, 20); 8*c8dee2aaSAndroid Build Coastguard Worker path.lineTo(60, 0); 9*c8dee2aaSAndroid Build Coastguard Worker path.lineTo(20, 5); 10*c8dee2aaSAndroid Build Coastguard Worker 11*c8dee2aaSAndroid Build Coastguard Worker path.moveTo(20, 80); 12*c8dee2aaSAndroid Build Coastguard Worker path.bezierCurveTo(90, 10, 160, 150, 190, 10); 13*c8dee2aaSAndroid Build Coastguard Worker 14*c8dee2aaSAndroid Build Coastguard Worker path.moveTo(36, 148); 15*c8dee2aaSAndroid Build Coastguard Worker path.quadraticCurveTo(66, 188, 120, 136); 16*c8dee2aaSAndroid Build Coastguard Worker path.lineTo(36, 148); 17*c8dee2aaSAndroid Build Coastguard Worker 18*c8dee2aaSAndroid Build Coastguard Worker path.rect(5, 170, 20, 20); 19*c8dee2aaSAndroid Build Coastguard Worker 20*c8dee2aaSAndroid Build Coastguard Worker path.moveTo(150, 180); 21*c8dee2aaSAndroid Build Coastguard Worker path.arcTo(150, 100, 50, 200, 20); 22*c8dee2aaSAndroid Build Coastguard Worker path.lineTo(160, 160); 23*c8dee2aaSAndroid Build Coastguard Worker 24*c8dee2aaSAndroid Build Coastguard Worker path.moveTo(20, 120); 25*c8dee2aaSAndroid Build Coastguard Worker path.arc(20, 120, 18, 0, 1.75 * Math.PI); 26*c8dee2aaSAndroid Build Coastguard Worker path.lineTo(20, 120); 27*c8dee2aaSAndroid Build Coastguard Worker 28*c8dee2aaSAndroid Build Coastguard Worker let secondPath = PathKit.NewPath(); 29*c8dee2aaSAndroid Build Coastguard Worker secondPath.ellipse(130, 25, 30, 10, -1*Math.PI/8, Math.PI/6, 1.5*Math.PI, false); 30*c8dee2aaSAndroid Build Coastguard Worker 31*c8dee2aaSAndroid Build Coastguard Worker path.addPath(secondPath); 32*c8dee2aaSAndroid Build Coastguard Worker 33*c8dee2aaSAndroid Build Coastguard Worker let m = document.createElementNS('http://www.w3.org/2000/svg', 'svg').createSVGMatrix(); 34*c8dee2aaSAndroid Build Coastguard Worker m.a = 1; m.b = 0; 35*c8dee2aaSAndroid Build Coastguard Worker m.c = 0; m.d = 1; 36*c8dee2aaSAndroid Build Coastguard Worker m.e = 0; m.f = 20.5; 37*c8dee2aaSAndroid Build Coastguard Worker 38*c8dee2aaSAndroid Build Coastguard Worker path.addPath(secondPath, m); 39*c8dee2aaSAndroid Build Coastguard Worker secondPath.delete(); 40*c8dee2aaSAndroid Build Coastguard Worker return path; 41*c8dee2aaSAndroid Build Coastguard Worker } 42*c8dee2aaSAndroid Build Coastguard Worker 43*c8dee2aaSAndroid Build Coastguard Worker it('path_path2dapi', function(done) { 44*c8dee2aaSAndroid Build Coastguard Worker function setup(ctx) { } 45*c8dee2aaSAndroid Build Coastguard Worker 46*c8dee2aaSAndroid Build Coastguard Worker function test(ctx) { 47*c8dee2aaSAndroid Build Coastguard Worker path = drawPath(); 48*c8dee2aaSAndroid Build Coastguard Worker path.delete(); 49*c8dee2aaSAndroid Build Coastguard Worker } 50*c8dee2aaSAndroid Build Coastguard Worker 51*c8dee2aaSAndroid Build Coastguard Worker function teardown(ctx) { } 52*c8dee2aaSAndroid Build Coastguard Worker 53*c8dee2aaSAndroid Build Coastguard Worker LoadPathKit.then(() => { 54*c8dee2aaSAndroid Build Coastguard Worker benchmarkAndReport('path_path2dapi', setup, test, teardown).then(() => { 55*c8dee2aaSAndroid Build Coastguard Worker done(); 56*c8dee2aaSAndroid Build Coastguard Worker }).catch(reportError(done)); 57*c8dee2aaSAndroid Build Coastguard Worker }); 58*c8dee2aaSAndroid Build Coastguard Worker }); 59*c8dee2aaSAndroid Build Coastguard Worker 60*c8dee2aaSAndroid Build Coastguard Worker describe('import options', function() { 61*c8dee2aaSAndroid Build Coastguard Worker it('path_copy', function(done) { 62*c8dee2aaSAndroid Build Coastguard Worker function setup(ctx) { 63*c8dee2aaSAndroid Build Coastguard Worker ctx.path = PathKit.FromSVGString('M 205,5 L 795,5 L 595,295 L 5,295 L 205,5 z'); 64*c8dee2aaSAndroid Build Coastguard Worker } 65*c8dee2aaSAndroid Build Coastguard Worker 66*c8dee2aaSAndroid Build Coastguard Worker function test(ctx) { 67*c8dee2aaSAndroid Build Coastguard Worker let p = ctx.path.copy(); 68*c8dee2aaSAndroid Build Coastguard Worker p.delete(); 69*c8dee2aaSAndroid Build Coastguard Worker } 70*c8dee2aaSAndroid Build Coastguard Worker 71*c8dee2aaSAndroid Build Coastguard Worker function teardown(ctx) { 72*c8dee2aaSAndroid Build Coastguard Worker ctx.path.delete(); 73*c8dee2aaSAndroid Build Coastguard Worker } 74*c8dee2aaSAndroid Build Coastguard Worker 75*c8dee2aaSAndroid Build Coastguard Worker LoadPathKit.then(() => { 76*c8dee2aaSAndroid Build Coastguard Worker benchmarkAndReport('path_copy', setup, test, teardown).then(() => { 77*c8dee2aaSAndroid Build Coastguard Worker done(); 78*c8dee2aaSAndroid Build Coastguard Worker }).catch(reportError(done)); 79*c8dee2aaSAndroid Build Coastguard Worker }); 80*c8dee2aaSAndroid Build Coastguard Worker }); 81*c8dee2aaSAndroid Build Coastguard Worker 82*c8dee2aaSAndroid Build Coastguard Worker it('path_from_api_calls', function(done) { 83*c8dee2aaSAndroid Build Coastguard Worker function setup(ctx) { } 84*c8dee2aaSAndroid Build Coastguard Worker 85*c8dee2aaSAndroid Build Coastguard Worker function test(ctx) { 86*c8dee2aaSAndroid Build Coastguard Worker let p = PathKit.NewPath() 87*c8dee2aaSAndroid Build Coastguard Worker .moveTo(205, 5) 88*c8dee2aaSAndroid Build Coastguard Worker .lineTo(795, 5) 89*c8dee2aaSAndroid Build Coastguard Worker .lineTo(595, 295) 90*c8dee2aaSAndroid Build Coastguard Worker .lineTo(5, 295) 91*c8dee2aaSAndroid Build Coastguard Worker .lineTo(205, 5) 92*c8dee2aaSAndroid Build Coastguard Worker .close(); 93*c8dee2aaSAndroid Build Coastguard Worker p.delete(); 94*c8dee2aaSAndroid Build Coastguard Worker } 95*c8dee2aaSAndroid Build Coastguard Worker 96*c8dee2aaSAndroid Build Coastguard Worker function teardown(ctx) { } 97*c8dee2aaSAndroid Build Coastguard Worker 98*c8dee2aaSAndroid Build Coastguard Worker LoadPathKit.then(() => { 99*c8dee2aaSAndroid Build Coastguard Worker benchmarkAndReport('path_from_api_calls', setup, test, teardown).then(() => { 100*c8dee2aaSAndroid Build Coastguard Worker done(); 101*c8dee2aaSAndroid Build Coastguard Worker }).catch(reportError(done)); 102*c8dee2aaSAndroid Build Coastguard Worker }); 103*c8dee2aaSAndroid Build Coastguard Worker }); 104*c8dee2aaSAndroid Build Coastguard Worker 105*c8dee2aaSAndroid Build Coastguard Worker it('path_fromCmds', function(done) { 106*c8dee2aaSAndroid Build Coastguard Worker function setup(ctx) { } 107*c8dee2aaSAndroid Build Coastguard Worker 108*c8dee2aaSAndroid Build Coastguard Worker function test(ctx) { 109*c8dee2aaSAndroid Build Coastguard Worker let p = PathKit.FromCmds( 110*c8dee2aaSAndroid Build Coastguard Worker [[PathKit.MOVE_VERB, 205, 5], 111*c8dee2aaSAndroid Build Coastguard Worker [PathKit.LINE_VERB, 795, 5], 112*c8dee2aaSAndroid Build Coastguard Worker [PathKit.LINE_VERB, 595, 295], 113*c8dee2aaSAndroid Build Coastguard Worker [PathKit.LINE_VERB, 5, 295], 114*c8dee2aaSAndroid Build Coastguard Worker [PathKit.LINE_VERB, 205, 5], 115*c8dee2aaSAndroid Build Coastguard Worker [PathKit.CLOSE_VERB]]); 116*c8dee2aaSAndroid Build Coastguard Worker p.delete(); 117*c8dee2aaSAndroid Build Coastguard Worker } 118*c8dee2aaSAndroid Build Coastguard Worker 119*c8dee2aaSAndroid Build Coastguard Worker function teardown(ctx) { } 120*c8dee2aaSAndroid Build Coastguard Worker 121*c8dee2aaSAndroid Build Coastguard Worker LoadPathKit.then(() => { 122*c8dee2aaSAndroid Build Coastguard Worker benchmarkAndReport('path_fromCmds', setup, test, teardown).then(() => { 123*c8dee2aaSAndroid Build Coastguard Worker done(); 124*c8dee2aaSAndroid Build Coastguard Worker }).catch(reportError(done)); 125*c8dee2aaSAndroid Build Coastguard Worker }); 126*c8dee2aaSAndroid Build Coastguard Worker }); 127*c8dee2aaSAndroid Build Coastguard Worker 128*c8dee2aaSAndroid Build Coastguard Worker it('path_fromSVGString', function(done) { 129*c8dee2aaSAndroid Build Coastguard Worker function setup(ctx) {} 130*c8dee2aaSAndroid Build Coastguard Worker 131*c8dee2aaSAndroid Build Coastguard Worker function test(ctx) { 132*c8dee2aaSAndroid Build Coastguard Worker // https://upload.wikimedia.org/wikipedia/commons/e/e7/Simple_parallelogram.svg 133*c8dee2aaSAndroid Build Coastguard Worker let p = PathKit.FromSVGString('M 205,5 L 795,5 L 595,295 L 5,295 L 205,5 z'); 134*c8dee2aaSAndroid Build Coastguard Worker p.delete(); 135*c8dee2aaSAndroid Build Coastguard Worker } 136*c8dee2aaSAndroid Build Coastguard Worker 137*c8dee2aaSAndroid Build Coastguard Worker function teardown(ctx) { } 138*c8dee2aaSAndroid Build Coastguard Worker 139*c8dee2aaSAndroid Build Coastguard Worker LoadPathKit.then(() => { 140*c8dee2aaSAndroid Build Coastguard Worker benchmarkAndReport('path_fromSVGString', setup, test, teardown).then(() => { 141*c8dee2aaSAndroid Build Coastguard Worker done(); 142*c8dee2aaSAndroid Build Coastguard Worker }).catch(reportError(done)); 143*c8dee2aaSAndroid Build Coastguard Worker }); 144*c8dee2aaSAndroid Build Coastguard Worker }); 145*c8dee2aaSAndroid Build Coastguard Worker }); 146*c8dee2aaSAndroid Build Coastguard Worker 147*c8dee2aaSAndroid Build Coastguard Worker describe('export options', function() { 148*c8dee2aaSAndroid Build Coastguard Worker it('path_toCmds', function(done) { 149*c8dee2aaSAndroid Build Coastguard Worker function setup(ctx) { 150*c8dee2aaSAndroid Build Coastguard Worker ctx.path = drawPath(); 151*c8dee2aaSAndroid Build Coastguard Worker } 152*c8dee2aaSAndroid Build Coastguard Worker 153*c8dee2aaSAndroid Build Coastguard Worker function test(ctx) { 154*c8dee2aaSAndroid Build Coastguard Worker ctx.path.toCmds(); 155*c8dee2aaSAndroid Build Coastguard Worker } 156*c8dee2aaSAndroid Build Coastguard Worker 157*c8dee2aaSAndroid Build Coastguard Worker function teardown(ctx) { 158*c8dee2aaSAndroid Build Coastguard Worker ctx.path.delete(); 159*c8dee2aaSAndroid Build Coastguard Worker } 160*c8dee2aaSAndroid Build Coastguard Worker 161*c8dee2aaSAndroid Build Coastguard Worker LoadPathKit.then(() => { 162*c8dee2aaSAndroid Build Coastguard Worker benchmarkAndReport('path_toCmds', setup, test, teardown).then(() => { 163*c8dee2aaSAndroid Build Coastguard Worker done(); 164*c8dee2aaSAndroid Build Coastguard Worker }).catch(reportError(done)); 165*c8dee2aaSAndroid Build Coastguard Worker }); 166*c8dee2aaSAndroid Build Coastguard Worker }); 167*c8dee2aaSAndroid Build Coastguard Worker 168*c8dee2aaSAndroid Build Coastguard Worker it('path_toPath2D', function(done) { 169*c8dee2aaSAndroid Build Coastguard Worker function setup(ctx) { 170*c8dee2aaSAndroid Build Coastguard Worker ctx.path = drawPath(); 171*c8dee2aaSAndroid Build Coastguard Worker } 172*c8dee2aaSAndroid Build Coastguard Worker 173*c8dee2aaSAndroid Build Coastguard Worker function test(ctx) { 174*c8dee2aaSAndroid Build Coastguard Worker ctx.path.toPath2D(); 175*c8dee2aaSAndroid Build Coastguard Worker } 176*c8dee2aaSAndroid Build Coastguard Worker 177*c8dee2aaSAndroid Build Coastguard Worker function teardown(ctx) { 178*c8dee2aaSAndroid Build Coastguard Worker ctx.path.delete(); 179*c8dee2aaSAndroid Build Coastguard Worker } 180*c8dee2aaSAndroid Build Coastguard Worker 181*c8dee2aaSAndroid Build Coastguard Worker LoadPathKit.then(() => { 182*c8dee2aaSAndroid Build Coastguard Worker benchmarkAndReport('path_toPath2D', setup, test, teardown).then(() => { 183*c8dee2aaSAndroid Build Coastguard Worker done(); 184*c8dee2aaSAndroid Build Coastguard Worker }).catch(reportError(done)); 185*c8dee2aaSAndroid Build Coastguard Worker }); 186*c8dee2aaSAndroid Build Coastguard Worker }); 187*c8dee2aaSAndroid Build Coastguard Worker 188*c8dee2aaSAndroid Build Coastguard Worker it('path_toSVGString', function(done) { 189*c8dee2aaSAndroid Build Coastguard Worker function setup(ctx) { 190*c8dee2aaSAndroid Build Coastguard Worker ctx.path = drawPath(); 191*c8dee2aaSAndroid Build Coastguard Worker } 192*c8dee2aaSAndroid Build Coastguard Worker 193*c8dee2aaSAndroid Build Coastguard Worker function test(ctx) { 194*c8dee2aaSAndroid Build Coastguard Worker ctx.path.toSVGString(); 195*c8dee2aaSAndroid Build Coastguard Worker } 196*c8dee2aaSAndroid Build Coastguard Worker 197*c8dee2aaSAndroid Build Coastguard Worker function teardown(ctx) { 198*c8dee2aaSAndroid Build Coastguard Worker ctx.path.delete(); 199*c8dee2aaSAndroid Build Coastguard Worker } 200*c8dee2aaSAndroid Build Coastguard Worker 201*c8dee2aaSAndroid Build Coastguard Worker LoadPathKit.then(() => { 202*c8dee2aaSAndroid Build Coastguard Worker benchmarkAndReport('path_toSVGString', setup, test, teardown).then(() => { 203*c8dee2aaSAndroid Build Coastguard Worker done(); 204*c8dee2aaSAndroid Build Coastguard Worker }).catch(reportError(done)); 205*c8dee2aaSAndroid Build Coastguard Worker }); 206*c8dee2aaSAndroid Build Coastguard Worker }); 207*c8dee2aaSAndroid Build Coastguard Worker }); 208*c8dee2aaSAndroid Build Coastguard Worker 209*c8dee2aaSAndroid Build Coastguard Worker describe('matrix options', function() { 210*c8dee2aaSAndroid Build Coastguard Worker function drawTriangle() { 211*c8dee2aaSAndroid Build Coastguard Worker let path = PathKit.NewPath(); 212*c8dee2aaSAndroid Build Coastguard Worker path.moveTo(0, 0); 213*c8dee2aaSAndroid Build Coastguard Worker path.lineTo(10, 0); 214*c8dee2aaSAndroid Build Coastguard Worker path.lineTo(10, 10); 215*c8dee2aaSAndroid Build Coastguard Worker path.close(); 216*c8dee2aaSAndroid Build Coastguard Worker return path; 217*c8dee2aaSAndroid Build Coastguard Worker } 218*c8dee2aaSAndroid Build Coastguard Worker 219*c8dee2aaSAndroid Build Coastguard Worker it('path_add_path_svgmatrix', function(done) { 220*c8dee2aaSAndroid Build Coastguard Worker function setup(ctx) { 221*c8dee2aaSAndroid Build Coastguard Worker ctx.path = drawTriangle(); 222*c8dee2aaSAndroid Build Coastguard Worker } 223*c8dee2aaSAndroid Build Coastguard Worker 224*c8dee2aaSAndroid Build Coastguard Worker function test(ctx) { 225*c8dee2aaSAndroid Build Coastguard Worker let path = PathKit.NewPath(); 226*c8dee2aaSAndroid Build Coastguard Worker let m = document.createElementNS('http://www.w3.org/2000/svg', 'svg').createSVGMatrix(); 227*c8dee2aaSAndroid Build Coastguard Worker m.a = 1; m.b = 0; 228*c8dee2aaSAndroid Build Coastguard Worker m.c = 0; m.d = 1; 229*c8dee2aaSAndroid Build Coastguard Worker m.e = 0; m.f = 20.5; 230*c8dee2aaSAndroid Build Coastguard Worker path.addPath(ctx.path, m); 231*c8dee2aaSAndroid Build Coastguard Worker path.delete(); 232*c8dee2aaSAndroid Build Coastguard Worker } 233*c8dee2aaSAndroid Build Coastguard Worker 234*c8dee2aaSAndroid Build Coastguard Worker function teardown(ctx) { 235*c8dee2aaSAndroid Build Coastguard Worker ctx.path.delete(); 236*c8dee2aaSAndroid Build Coastguard Worker } 237*c8dee2aaSAndroid Build Coastguard Worker 238*c8dee2aaSAndroid Build Coastguard Worker LoadPathKit.then(() => { 239*c8dee2aaSAndroid Build Coastguard Worker benchmarkAndReport('path_add_path_svgmatrix', setup, test, teardown).then(() => { 240*c8dee2aaSAndroid Build Coastguard Worker done(); 241*c8dee2aaSAndroid Build Coastguard Worker }).catch(reportError(done)); 242*c8dee2aaSAndroid Build Coastguard Worker }); 243*c8dee2aaSAndroid Build Coastguard Worker }); 244*c8dee2aaSAndroid Build Coastguard Worker 245*c8dee2aaSAndroid Build Coastguard Worker it('path_add_path_svgmatrix_reuse', function(done) { 246*c8dee2aaSAndroid Build Coastguard Worker function setup(ctx) { 247*c8dee2aaSAndroid Build Coastguard Worker ctx.path = drawTriangle(); 248*c8dee2aaSAndroid Build Coastguard Worker let m = document.createElementNS('http://www.w3.org/2000/svg', 'svg').createSVGMatrix(); 249*c8dee2aaSAndroid Build Coastguard Worker ctx.matrix = m; 250*c8dee2aaSAndroid Build Coastguard Worker } 251*c8dee2aaSAndroid Build Coastguard Worker 252*c8dee2aaSAndroid Build Coastguard Worker function test(ctx) { 253*c8dee2aaSAndroid Build Coastguard Worker let path = PathKit.NewPath(); 254*c8dee2aaSAndroid Build Coastguard Worker let m = ctx.matrix 255*c8dee2aaSAndroid Build Coastguard Worker m.a = 1; m.b = 0; 256*c8dee2aaSAndroid Build Coastguard Worker m.c = 0; m.d = 1; 257*c8dee2aaSAndroid Build Coastguard Worker m.e = 0; m.f = 20.5; 258*c8dee2aaSAndroid Build Coastguard Worker path.addPath(ctx.path, m); 259*c8dee2aaSAndroid Build Coastguard Worker path.delete(); 260*c8dee2aaSAndroid Build Coastguard Worker } 261*c8dee2aaSAndroid Build Coastguard Worker 262*c8dee2aaSAndroid Build Coastguard Worker function teardown(ctx) { 263*c8dee2aaSAndroid Build Coastguard Worker ctx.path.delete(); 264*c8dee2aaSAndroid Build Coastguard Worker } 265*c8dee2aaSAndroid Build Coastguard Worker 266*c8dee2aaSAndroid Build Coastguard Worker LoadPathKit.then(() => { 267*c8dee2aaSAndroid Build Coastguard Worker benchmarkAndReport('path_add_path_svgmatrix_reuse', setup, test, teardown).then(() => { 268*c8dee2aaSAndroid Build Coastguard Worker done(); 269*c8dee2aaSAndroid Build Coastguard Worker }).catch(reportError(done)); 270*c8dee2aaSAndroid Build Coastguard Worker }); 271*c8dee2aaSAndroid Build Coastguard Worker }); 272*c8dee2aaSAndroid Build Coastguard Worker 273*c8dee2aaSAndroid Build Coastguard Worker it('path_add_path_svgmatrix_bare', function(done) { 274*c8dee2aaSAndroid Build Coastguard Worker function setup(ctx) { 275*c8dee2aaSAndroid Build Coastguard Worker ctx.path = drawTriangle(); 276*c8dee2aaSAndroid Build Coastguard Worker } 277*c8dee2aaSAndroid Build Coastguard Worker 278*c8dee2aaSAndroid Build Coastguard Worker function test(ctx) { 279*c8dee2aaSAndroid Build Coastguard Worker let path = PathKit.NewPath(); 280*c8dee2aaSAndroid Build Coastguard Worker path.addPath(ctx.path, 1, 0, 0, 1, 0, 20.5); 281*c8dee2aaSAndroid Build Coastguard Worker path.delete(); 282*c8dee2aaSAndroid Build Coastguard Worker } 283*c8dee2aaSAndroid Build Coastguard Worker 284*c8dee2aaSAndroid Build Coastguard Worker function teardown(ctx) { 285*c8dee2aaSAndroid Build Coastguard Worker ctx.path.delete(); 286*c8dee2aaSAndroid Build Coastguard Worker } 287*c8dee2aaSAndroid Build Coastguard Worker 288*c8dee2aaSAndroid Build Coastguard Worker LoadPathKit.then(() => { 289*c8dee2aaSAndroid Build Coastguard Worker benchmarkAndReport('path_add_path_svgmatrix_bare', setup, test, teardown).then(() => { 290*c8dee2aaSAndroid Build Coastguard Worker done(); 291*c8dee2aaSAndroid Build Coastguard Worker }).catch(reportError(done)); 292*c8dee2aaSAndroid Build Coastguard Worker }); 293*c8dee2aaSAndroid Build Coastguard Worker }); 294*c8dee2aaSAndroid Build Coastguard Worker }); 295*c8dee2aaSAndroid Build Coastguard Worker 296*c8dee2aaSAndroid Build Coastguard Worker});