processing 0.5.34 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/ChangeLog.md +18 -0
- data/Gemfile +1 -0
- data/Gemfile.lock +2 -0
- data/Rakefile +5 -5
- data/VERSION +1 -1
- data/lib/processing/all.rb +4 -1
- data/lib/processing/context.rb +0 -1
- data/lib/processing/graphics_context.rb +209 -41
- data/lib/processing/image.rb +0 -5
- data/lib/processing/shape.rb +119 -26
- data/lib/processing/svg.rb +248 -0
- data/processing.gemspec +4 -4
- data/test/{p5.rb → browser.rb} +37 -3
- data/test/helper.rb +40 -7
- data/test/test_color.rb +94 -0
- data/test/test_graphics_context.rb +26 -59
- data/test/test_shape.rb +129 -6
- data/test/test_svg.rb +257 -0
- metadata +17 -12
data/test/test_color.rb
ADDED
@@ -0,0 +1,94 @@
|
|
1
|
+
require_relative 'helper'
|
2
|
+
|
3
|
+
|
4
|
+
class TestColor < Test::Unit::TestCase
|
5
|
+
|
6
|
+
P = Processing
|
7
|
+
G = P::Graphics
|
8
|
+
|
9
|
+
def test_rgb_color()
|
10
|
+
g = graphics
|
11
|
+
|
12
|
+
g.colorMode G::RGB, 255
|
13
|
+
c = g.color 10, 20, 30, 40
|
14
|
+
assert_equal 0x280a141e, c
|
15
|
+
assert_equal [10, 20, 30, 40], [g.red(c), g.green(c), g.blue(c), g.alpha(c)]
|
16
|
+
|
17
|
+
g.colorMode G::RGB, 1.0
|
18
|
+
c = g.color 0.1, 0.2, 0.3, 0.4
|
19
|
+
assert_equal 0x6619334c, c
|
20
|
+
assert_in_delta 0.1, g.red(c), 1 / 256.0
|
21
|
+
assert_in_delta 0.2, g.green(c), 1 / 256.0
|
22
|
+
assert_in_delta 0.3, g.blue(c), 1 / 256.0
|
23
|
+
assert_in_delta 0.4, g.alpha(c), 1 / 256.0
|
24
|
+
|
25
|
+
g.colorMode G::RGB, 0.5
|
26
|
+
c = g.color 0.1, 0.2, 0.3, 0.4
|
27
|
+
assert_equal 0xcc336699, c
|
28
|
+
assert_in_delta 0.1, g.red(c), 1 / 256.0
|
29
|
+
assert_in_delta 0.2, g.green(c), 1 / 256.0
|
30
|
+
assert_in_delta 0.3, g.blue(c), 1 / 256.0
|
31
|
+
assert_in_delta 0.4, g.alpha(c), 1 / 256.0
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_hsb_color()
|
35
|
+
g = graphics
|
36
|
+
|
37
|
+
g.colorMode G::HSB, 1.0
|
38
|
+
c = g.color 0.1, 0.2, 0.3, 0.4
|
39
|
+
assert_in_delta 0.1, g.hue(c), 1 / 256.0
|
40
|
+
assert_in_delta 0.2, g.saturation(c), 1 / 256.0
|
41
|
+
assert_in_delta 0.3, g.brightness(c), 1 / 256.0
|
42
|
+
assert_in_delta 0.4, g.alpha(c), 1 / 256.0
|
43
|
+
|
44
|
+
g.colorMode G::HSB, 0.5
|
45
|
+
c = g.color 0.1, 0.2, 0.3, 0.4
|
46
|
+
assert_in_delta 0.1, g.hue(c), 1 / 256.0
|
47
|
+
assert_in_delta 0.2, g.saturation(c), 1 / 256.0
|
48
|
+
assert_in_delta 0.3, g.brightness(c), 1 / 256.0
|
49
|
+
assert_in_delta 0.4, g.alpha(c), 1 / 256.0
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_parse_color()
|
53
|
+
g = graphics
|
54
|
+
|
55
|
+
assert_equal 0xff010203, g.color('#010203')
|
56
|
+
assert_equal 0x04010203, g.color('#01020304')
|
57
|
+
assert_equal 0xff112233, g.color('#123')
|
58
|
+
assert_equal 0x44112233, g.color('#1234')
|
59
|
+
assert_equal 0xff0000ff, g.color('blue')
|
60
|
+
assert_equal 0x040000ff, g.color('blue', 4)
|
61
|
+
end
|
62
|
+
|
63
|
+
def test_color_codes()
|
64
|
+
g = graphics
|
65
|
+
|
66
|
+
assert_equal 0xffff0000, g.color(:red)
|
67
|
+
assert_equal 0xff008000, g.color(:GREEN)
|
68
|
+
assert_equal 0xff0000ff, g.color('blue')
|
69
|
+
|
70
|
+
assert_raise(ArgumentError) {g.color :unknown}
|
71
|
+
end
|
72
|
+
|
73
|
+
def test_default_background_color()
|
74
|
+
assert_p5_draw '', default_header: '', threshold: THRESHOLD_TO_BE_FIXED
|
75
|
+
end
|
76
|
+
|
77
|
+
def test_default_fill_color()
|
78
|
+
assert_p5_draw <<~END, default_header: nil
|
79
|
+
background 100
|
80
|
+
noStroke
|
81
|
+
rect 100, 100, 500, 500
|
82
|
+
END
|
83
|
+
end
|
84
|
+
|
85
|
+
def test_default_stroke_color()
|
86
|
+
assert_p5_draw <<~END, default_header: nil
|
87
|
+
background 100
|
88
|
+
noFill
|
89
|
+
strokeWeight 50
|
90
|
+
line 100, 100, 500, 500
|
91
|
+
END
|
92
|
+
end
|
93
|
+
|
94
|
+
end# TestColor
|
@@ -6,51 +6,6 @@ class TestGraphicsContext < Test::Unit::TestCase
|
|
6
6
|
P = Processing
|
7
7
|
G = P::Graphics
|
8
8
|
|
9
|
-
THRESHOLD_TO_BE_FIXED = 0.0
|
10
|
-
|
11
|
-
def test_rgb_color()
|
12
|
-
g = graphics
|
13
|
-
|
14
|
-
g.colorMode G::RGB, 255
|
15
|
-
c = g.color 10, 20, 30, 40
|
16
|
-
assert_equal 0x280a141e, c
|
17
|
-
assert_equal [10, 20, 30, 40], [g.red(c), g.green(c), g.blue(c), g.alpha(c)]
|
18
|
-
|
19
|
-
g.colorMode G::RGB, 1.0
|
20
|
-
c = g.color 0.1, 0.2, 0.3, 0.4
|
21
|
-
assert_equal 0x6619334c, c
|
22
|
-
assert_in_delta 0.1, g.red(c), 1 / 256.0
|
23
|
-
assert_in_delta 0.2, g.green(c), 1 / 256.0
|
24
|
-
assert_in_delta 0.3, g.blue(c), 1 / 256.0
|
25
|
-
assert_in_delta 0.4, g.alpha(c), 1 / 256.0
|
26
|
-
|
27
|
-
g.colorMode G::RGB, 0.5
|
28
|
-
c = g.color 0.1, 0.2, 0.3, 0.4
|
29
|
-
assert_equal 0xcc336699, c
|
30
|
-
assert_in_delta 0.1, g.red(c), 1 / 256.0
|
31
|
-
assert_in_delta 0.2, g.green(c), 1 / 256.0
|
32
|
-
assert_in_delta 0.3, g.blue(c), 1 / 256.0
|
33
|
-
assert_in_delta 0.4, g.alpha(c), 1 / 256.0
|
34
|
-
end
|
35
|
-
|
36
|
-
def test_hsb_color()
|
37
|
-
g = graphics
|
38
|
-
|
39
|
-
g.colorMode G::HSB, 1.0
|
40
|
-
c = g.color 0.1, 0.2, 0.3, 0.4
|
41
|
-
assert_in_delta 0.1, g.hue(c), 1 / 256.0
|
42
|
-
assert_in_delta 0.2, g.saturation(c), 1 / 256.0
|
43
|
-
assert_in_delta 0.3, g.brightness(c), 1 / 256.0
|
44
|
-
assert_in_delta 0.4, g.alpha(c), 1 / 256.0
|
45
|
-
|
46
|
-
g.colorMode G::HSB, 0.5
|
47
|
-
c = g.color 0.1, 0.2, 0.3, 0.4
|
48
|
-
assert_in_delta 0.1, g.hue(c), 1 / 256.0
|
49
|
-
assert_in_delta 0.2, g.saturation(c), 1 / 256.0
|
50
|
-
assert_in_delta 0.3, g.brightness(c), 1 / 256.0
|
51
|
-
assert_in_delta 0.4, g.alpha(c), 1 / 256.0
|
52
|
-
end
|
53
|
-
|
54
9
|
def test_colorMode()
|
55
10
|
g = graphics
|
56
11
|
assert_equal G::RGB, g.colorMode
|
@@ -81,25 +36,37 @@ class TestGraphicsContext < Test::Unit::TestCase
|
|
81
36
|
assert_raise {g.blendMode LEFT}
|
82
37
|
end
|
83
38
|
|
84
|
-
def
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
def test_default_fill_color()
|
89
|
-
assert_p5_draw <<~END, default_header: nil
|
90
|
-
background 100
|
91
|
-
noStroke
|
92
|
-
rect 100, 100, 500, 500
|
39
|
+
def test_strokeCap()
|
40
|
+
header = <<~END
|
41
|
+
noFill
|
42
|
+
strokeWeight 200
|
93
43
|
END
|
44
|
+
footer = <<~END
|
45
|
+
line 200, 200, 800, 800
|
46
|
+
END
|
47
|
+
assert_p5_draw header, '', footer
|
48
|
+
assert_p5_draw header, 'strokeCap ROUND', footer
|
49
|
+
assert_p5_draw header, 'strokeCap SQUARE', footer
|
50
|
+
assert_p5_draw header, 'strokeCap PROJECT', footer
|
94
51
|
end
|
95
52
|
|
96
|
-
def
|
97
|
-
|
98
|
-
background 100
|
53
|
+
def test_strokeJoin()
|
54
|
+
header = <<~END
|
99
55
|
noFill
|
100
|
-
strokeWeight
|
101
|
-
|
56
|
+
strokeWeight 200
|
57
|
+
strokeCap SQUARE
|
58
|
+
END
|
59
|
+
footer = <<~END
|
60
|
+
beginShape
|
61
|
+
vertex 200, 200
|
62
|
+
vertex 800, 500
|
63
|
+
vertex 200, 800
|
64
|
+
endShape
|
102
65
|
END
|
66
|
+
assert_p5_draw header, '', footer
|
67
|
+
assert_p5_draw header, 'strokeJoin MITER', footer
|
68
|
+
assert_p5_draw header, 'strokeJoin BEVEL', footer, threshold: THRESHOLD_TO_BE_FIXED
|
69
|
+
assert_p5_draw header, 'strokeJoin ROUND', footer
|
103
70
|
end
|
104
71
|
|
105
72
|
def test_textFont()
|
data/test/test_shape.rb
CHANGED
@@ -366,14 +366,33 @@ class TestShape < Test::Unit::TestCase
|
|
366
366
|
|
367
367
|
def test_fill()
|
368
368
|
assert_equal_draw <<~HEADER, <<~EXPECTED, <<~ACTUAL
|
369
|
+
noFill
|
369
370
|
noStroke
|
370
371
|
HEADER
|
371
|
-
fill 0,
|
372
|
+
fill 0, 0, 255
|
372
373
|
rect 100, 100, 500, 400
|
373
374
|
EXPECTED
|
374
375
|
s = createShape
|
375
376
|
s.beginShape
|
376
|
-
s.fill 0,
|
377
|
+
s.fill 0, 0, 255
|
378
|
+
s.vertex 100, 100
|
379
|
+
s.vertex 600, 100
|
380
|
+
s.vertex 600, 500
|
381
|
+
s.vertex 100, 500
|
382
|
+
s.endShape
|
383
|
+
shape s
|
384
|
+
ACTUAL
|
385
|
+
|
386
|
+
assert_equal_draw <<~HEADER, <<~EXPECTED, <<~ACTUAL
|
387
|
+
noFill
|
388
|
+
noStroke
|
389
|
+
HEADER
|
390
|
+
fill 0, 0, 255
|
391
|
+
rect 100, 100, 500, 400
|
392
|
+
EXPECTED
|
393
|
+
fill 0, 0, 255
|
394
|
+
s = createShape
|
395
|
+
s.beginShape
|
377
396
|
s.vertex 100, 100
|
378
397
|
s.vertex 600, 100
|
379
398
|
s.vertex 600, 500
|
@@ -383,11 +402,50 @@ class TestShape < Test::Unit::TestCase
|
|
383
402
|
ACTUAL
|
384
403
|
end
|
385
404
|
|
405
|
+
def test_stroke()
|
406
|
+
assert_equal_draw <<~HEADER, <<~EXPECTED, <<~ACTUAL
|
407
|
+
noFill
|
408
|
+
noStroke
|
409
|
+
HEADER
|
410
|
+
stroke 0, 0, 255
|
411
|
+
rect 100, 100, 500, 400
|
412
|
+
EXPECTED
|
413
|
+
s = createShape
|
414
|
+
s.beginShape
|
415
|
+
s.stroke 0, 0, 255
|
416
|
+
s.vertex 100, 100
|
417
|
+
s.vertex 600, 100
|
418
|
+
s.vertex 600, 500
|
419
|
+
s.vertex 100, 500
|
420
|
+
s.endShape CLOSE
|
421
|
+
shape s
|
422
|
+
ACTUAL
|
423
|
+
|
424
|
+
assert_equal_draw <<~HEADER, <<~EXPECTED, <<~ACTUAL
|
425
|
+
noFill
|
426
|
+
noStroke
|
427
|
+
HEADER
|
428
|
+
stroke 0, 0, 255
|
429
|
+
rect 100, 100, 500, 400
|
430
|
+
EXPECTED
|
431
|
+
stroke 0, 0, 255
|
432
|
+
s = createShape
|
433
|
+
s.beginShape
|
434
|
+
s.vertex 100, 100
|
435
|
+
s.vertex 600, 100
|
436
|
+
s.vertex 600, 500
|
437
|
+
s.vertex 100, 500
|
438
|
+
s.endShape CLOSE
|
439
|
+
shape s
|
440
|
+
ACTUAL
|
441
|
+
end
|
442
|
+
|
386
443
|
def test_setFill()
|
387
444
|
assert_equal_draw <<~HEADER, <<~EXPECTED, <<~ACTUAL
|
445
|
+
noFill
|
388
446
|
noStroke
|
389
447
|
HEADER
|
390
|
-
fill 0,
|
448
|
+
fill 0, 0, 255
|
391
449
|
rect 100, 100, 500, 400
|
392
450
|
EXPECTED
|
393
451
|
s = createShape
|
@@ -397,18 +455,83 @@ class TestShape < Test::Unit::TestCase
|
|
397
455
|
s.vertex 600, 500
|
398
456
|
s.vertex 100, 500
|
399
457
|
s.endShape
|
400
|
-
s.setFill 0,
|
458
|
+
s.setFill 0, 0, 255
|
459
|
+
shape s
|
460
|
+
ACTUAL
|
461
|
+
|
462
|
+
assert_equal_draw <<~HEADER, <<~EXPECTED, <<~ACTUAL
|
463
|
+
noFill
|
464
|
+
noStroke
|
465
|
+
HEADER
|
466
|
+
fill 0, 0, 255
|
467
|
+
ellipse 300, 400, 500, 400
|
468
|
+
EXPECTED
|
469
|
+
s = createShape ELLIPSE, 300, 400, 500, 400
|
470
|
+
s.setFill 0, 0, 255
|
471
|
+
shape s
|
472
|
+
ACTUAL
|
473
|
+
end
|
474
|
+
|
475
|
+
def test_setStroke()
|
476
|
+
assert_equal_draw <<~HEADER, <<~EXPECTED, <<~ACTUAL
|
477
|
+
noFill
|
478
|
+
noStroke
|
479
|
+
HEADER
|
480
|
+
stroke 0, 0, 255
|
481
|
+
rect 100, 100, 500, 400
|
482
|
+
EXPECTED
|
483
|
+
s = createShape
|
484
|
+
s.beginShape
|
485
|
+
s.vertex 100, 100
|
486
|
+
s.vertex 600, 100
|
487
|
+
s.vertex 600, 500
|
488
|
+
s.vertex 100, 500
|
489
|
+
s.endShape CLOSE
|
490
|
+
s.setStroke 0, 0, 255
|
401
491
|
shape s
|
402
492
|
ACTUAL
|
403
493
|
|
404
494
|
assert_equal_draw <<~HEADER, <<~EXPECTED, <<~ACTUAL
|
495
|
+
noFill
|
405
496
|
noStroke
|
406
497
|
HEADER
|
407
|
-
|
498
|
+
stroke 0, 0, 255
|
499
|
+
ellipse 300, 400, 500, 400
|
500
|
+
EXPECTED
|
501
|
+
s = createShape ELLIPSE, 300, 400, 500, 400
|
502
|
+
s.setStroke 0, 0, 255
|
503
|
+
shape s
|
504
|
+
ACTUAL
|
505
|
+
end
|
506
|
+
|
507
|
+
def test_setStrokeWeight()
|
508
|
+
assert_equal_draw <<~HEADER, <<~EXPECTED, <<~ACTUAL
|
509
|
+
noFill
|
510
|
+
strokeWeight 1
|
511
|
+
HEADER
|
512
|
+
strokeWeight 100
|
513
|
+
rect 100, 100, 500, 400
|
514
|
+
EXPECTED
|
515
|
+
s = createShape
|
516
|
+
s.beginShape
|
517
|
+
s.vertex 100, 100
|
518
|
+
s.vertex 600, 100
|
519
|
+
s.vertex 600, 500
|
520
|
+
s.vertex 100, 500
|
521
|
+
s.endShape CLOSE
|
522
|
+
s.setStrokeWeight 100
|
523
|
+
shape s
|
524
|
+
ACTUAL
|
525
|
+
|
526
|
+
assert_equal_draw <<~HEADER, <<~EXPECTED, <<~ACTUAL
|
527
|
+
noFill
|
528
|
+
strokeWeight 1
|
529
|
+
HEADER
|
530
|
+
strokeWeight 100
|
408
531
|
ellipse 300, 400, 500, 400
|
409
532
|
EXPECTED
|
410
533
|
s = createShape ELLIPSE, 300, 400, 500, 400
|
411
|
-
s.
|
534
|
+
s.setStrokeWeight 100
|
412
535
|
shape s
|
413
536
|
ACTUAL
|
414
537
|
end
|
data/test/test_svg.rb
ADDED
@@ -0,0 +1,257 @@
|
|
1
|
+
require_relative 'helper'
|
2
|
+
|
3
|
+
|
4
|
+
class TestSVG < Test::Unit::TestCase
|
5
|
+
|
6
|
+
def test_color_code()
|
7
|
+
assert_svg_draw '<rect width="500" height="600" fill="#ffaa55"/>'
|
8
|
+
assert_svg_draw '<rect width="500" height="600" fill="#ffaa5599"/>'
|
9
|
+
assert_svg_draw '<rect width="500" height="600" fill="#fa5"/>'
|
10
|
+
assert_svg_draw '<rect width="500" height="600" fill="#fa59"/>'
|
11
|
+
assert_svg_draw '<rect width="500" height="600" fill="red"/>'
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_fill()
|
15
|
+
assert_svg_draw '<rect width="500" height="600" fill="green"/>'
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_stroke_and_width()
|
19
|
+
assert_svg_draw <<~END
|
20
|
+
<line x1="200" y1="300" x2="500" y2="600"
|
21
|
+
stroke="green" stroke-width="200"/>
|
22
|
+
END
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_strokeCap()
|
26
|
+
assert_svg_draw <<~END
|
27
|
+
<line x1="200" y1="300" x2="500" y2="600"
|
28
|
+
stroke="green" stroke-width="200" stroke-linecap="butt"/>
|
29
|
+
END
|
30
|
+
assert_svg_draw <<~END
|
31
|
+
<line x1="200" y1="300" x2="500" y2="600"
|
32
|
+
stroke="green" stroke-width="200" stroke-linecap="round"/>
|
33
|
+
END
|
34
|
+
assert_svg_draw <<~END
|
35
|
+
<line x1="200" y1="300" x2="500" y2="600"
|
36
|
+
stroke="green" stroke-width="200" stroke-linecap="square"/>
|
37
|
+
END
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_strokeJoin()
|
41
|
+
assert_svg_draw <<~END
|
42
|
+
<path d="M 200,300 L 500,600 L 300,800"
|
43
|
+
stroke="green" stroke-width="200" stroke-linejoin="miter"/>
|
44
|
+
END
|
45
|
+
assert_svg_draw <<~END
|
46
|
+
<path d="M 200,300 L 500,600 L 300,800"
|
47
|
+
stroke="green" stroke-width="200" stroke-linejoin="miter-clip"/>
|
48
|
+
END
|
49
|
+
assert_svg_draw <<~END
|
50
|
+
<path d="M 200,300 L 500,600 L 300,800"
|
51
|
+
stroke="green" stroke-width="200" stroke-linejoin="round"/>
|
52
|
+
END
|
53
|
+
assert_svg_draw <<~END
|
54
|
+
<path d="M 200,300 L 500,600 L 300,800"
|
55
|
+
stroke="green" stroke-width="200" stroke-linejoin="bevel"/>
|
56
|
+
END
|
57
|
+
assert_svg_draw <<~END
|
58
|
+
<path d="M 200,300 L 500,600 L 300,800"
|
59
|
+
stroke="green" stroke-width="200" stroke-linejoin="arcs"/>
|
60
|
+
END
|
61
|
+
end
|
62
|
+
|
63
|
+
def test_line()
|
64
|
+
assert_svg_draw <<~END
|
65
|
+
<line x1="200" y1="300" x2="500" y2="600" stroke="black" stroke-width="300"/>
|
66
|
+
END
|
67
|
+
end
|
68
|
+
|
69
|
+
def test_rect()
|
70
|
+
assert_svg_draw '<rect width="500" height="600"/>'
|
71
|
+
assert_svg_draw '<rect width="500" height="600" x="100" y="200"/>'
|
72
|
+
assert_svg_draw '<rect width="500" height="600" x="100" y="200" rx="100" ry="100"/>'
|
73
|
+
|
74
|
+
assert_svg_draw <<~END, threshold: THRESHOLD_TO_BE_FIXED
|
75
|
+
<rect width="500" height="600" x="100" y="200" rx="100" ry="200"/>
|
76
|
+
END
|
77
|
+
assert_svg_draw <<~END, threshold: THRESHOLD_TO_BE_FIXED
|
78
|
+
<rect width="500" height="600" x="100" y="200" rx="200" ry="100"/>
|
79
|
+
END
|
80
|
+
end
|
81
|
+
|
82
|
+
def test_circle()
|
83
|
+
assert_svg_draw '<circle cx="500" cy="600" r="200"/>'
|
84
|
+
end
|
85
|
+
|
86
|
+
def test_ellipse()
|
87
|
+
assert_svg_draw '<ellipse cx="500" cy="600" rx="200" ry="300"/>'
|
88
|
+
end
|
89
|
+
|
90
|
+
def test_polyline()
|
91
|
+
assert_svg_draw <<~END
|
92
|
+
<polyline points="200,300 500,400 600,700 300,800" stroke="black" stroke-width="300"/>
|
93
|
+
END
|
94
|
+
assert_svg_draw <<~END
|
95
|
+
<polyline points="200,300 500,400 600,700 300,800" stroke="black" stroke-width="300"
|
96
|
+
fill="none"/>
|
97
|
+
END
|
98
|
+
end
|
99
|
+
|
100
|
+
def test_polygon()
|
101
|
+
assert_svg_draw <<~END
|
102
|
+
<polygon points="200,300 500,400 600,700 300,800" stroke="black" stroke-width="200"/>
|
103
|
+
END
|
104
|
+
assert_svg_draw <<~END
|
105
|
+
<polygon points="200,300 500,400 600,700 300,800" stroke="black" stroke-width="200"
|
106
|
+
fill="none"/>
|
107
|
+
END
|
108
|
+
end
|
109
|
+
|
110
|
+
def test_path_Mm()
|
111
|
+
assert_svg_draw path_xml "M 200,300 L 500,400"
|
112
|
+
assert_svg_draw path_xml "m 200,300 L 500,400"
|
113
|
+
assert_svg_draw path_xml "M 200,300 L 500,400 M 600,700 L 300,800"
|
114
|
+
assert_svg_draw path_xml "M 200,300 L 500,400 m 100,300 L 300,800"
|
115
|
+
assert_svg_draw path_xml "M 200,300 500,400 600,700 300,800"
|
116
|
+
assert_svg_draw path_xml "m 200,300 300,100 100,300 -300,100"
|
117
|
+
end
|
118
|
+
|
119
|
+
def test_path_Ll()
|
120
|
+
assert_svg_draw path_xml "M 200,300 L 500,400 L 600,700 L 300,800"
|
121
|
+
assert_svg_draw path_xml "M 200,300 L 500,400 600,700 300,800"
|
122
|
+
assert_svg_draw path_xml "M 200,300 l 300,100 l 100,300 l -300,100"
|
123
|
+
assert_svg_draw path_xml "M 200,300 l 300,100 100,300 -300,100"
|
124
|
+
end
|
125
|
+
|
126
|
+
def test_path_Hh()
|
127
|
+
assert_svg_draw path_xml "M 200,300 H 500 H 800"
|
128
|
+
assert_svg_draw path_xml "M 200,300 H 500 800"
|
129
|
+
assert_svg_draw path_xml "M 200,300 h 300 h 300"
|
130
|
+
assert_svg_draw path_xml "M 200,300 h 300 300"
|
131
|
+
end
|
132
|
+
|
133
|
+
def test_path_Vv()
|
134
|
+
assert_svg_draw path_xml "M 200,300 V 500 V 800"
|
135
|
+
assert_svg_draw path_xml "M 200,300 V 500 800"
|
136
|
+
assert_svg_draw path_xml "M 200,300 v 200 h 300"
|
137
|
+
assert_svg_draw path_xml "M 200,300 h 200 300"
|
138
|
+
end
|
139
|
+
|
140
|
+
def test_path_Qq()
|
141
|
+
assert_svg_draw path_xml "M 200,100 Q 800,300 300,400 Q 400,800 800,800"
|
142
|
+
assert_svg_draw path_xml "M 200,100 Q 800,300 300,400 400,800 800,800"
|
143
|
+
assert_svg_draw path_xml "M 200,100 q 600,200 100,300 q 100,400 500,400"
|
144
|
+
assert_svg_draw path_xml "M 200,100 q 600,200 100,300 100,400 500,400"
|
145
|
+
end
|
146
|
+
|
147
|
+
def test_path_Tt()
|
148
|
+
assert_svg_draw path_xml "M 200,100 T 300,400 T 800,800"
|
149
|
+
assert_svg_draw path_xml "M 200,100 T 300,400 800,800"
|
150
|
+
assert_svg_draw path_xml "M 200,100 t 100,300 t 500,400"
|
151
|
+
assert_svg_draw path_xml "M 200,100 t 100,300 500,400"
|
152
|
+
end
|
153
|
+
|
154
|
+
def test_path_Cc()
|
155
|
+
assert_svg_draw path_xml "M 200,100 C 800,200 300,300 700,400 C 600,800 300,500 200,700"
|
156
|
+
assert_svg_draw path_xml "M 200,100 C 800,200 300,300 700,400 600,800 300,500 200,700"
|
157
|
+
assert_svg_draw path_xml "M 200,100 c 600,100 100,200 500,300 c -100,400 -400,100 -500,300"
|
158
|
+
assert_svg_draw path_xml "M 200,100 c 600,100 100,200 500,300 -100,400 -400,100 -500,300"
|
159
|
+
end
|
160
|
+
|
161
|
+
def test_path_Ss()
|
162
|
+
assert_svg_draw path_xml "M 200,100 S 800,300 500,500 S 800,700 200,900"
|
163
|
+
assert_svg_draw path_xml "M 200,100 S 800,300 500,500 800,700 200,900"
|
164
|
+
assert_svg_draw path_xml "M 200,100 s 600,200 300,400 s 300,200 -300,400"
|
165
|
+
assert_svg_draw path_xml "M 200,100 s 600,200 300,400 300,200 -300,400"
|
166
|
+
end
|
167
|
+
|
168
|
+
def test_path_Aa()
|
169
|
+
assert_svg_draw path_xml(<<~END), threshold: THRESHOLD_TO_BE_FIXED
|
170
|
+
M 200,100 A 300,200 0 0 0 500,400 A 600,500 0 0 0 900,800
|
171
|
+
END
|
172
|
+
assert_svg_draw path_xml(<<~END), threshold: THRESHOLD_TO_BE_FIXED
|
173
|
+
M 200,100 A 300,200 0 0 0 500,400 600,500 0 0 0 900,800
|
174
|
+
END
|
175
|
+
assert_svg_draw path_xml(<<~END), threshold: THRESHOLD_TO_BE_FIXED
|
176
|
+
M 200,100 a 100,100 0 0 0 300,300 a 100,100 0 0 0 400,400
|
177
|
+
END
|
178
|
+
assert_svg_draw path_xml(<<~END), threshold: THRESHOLD_TO_BE_FIXED
|
179
|
+
M 200,100 a 100,100 0 0 0 300,300 100,100 0 0 0 400,400
|
180
|
+
END
|
181
|
+
end
|
182
|
+
|
183
|
+
def test_path_Zz()
|
184
|
+
assert_svg_draw path_xml "M 200,300 L 500,400 L 600,700 L 300,800 Z"
|
185
|
+
assert_svg_draw path_xml "M 200,300 L 500,400 L 600,700 L 300,800 z"
|
186
|
+
end
|
187
|
+
|
188
|
+
def test_group_fill()
|
189
|
+
assert_svg_draw <<~END
|
190
|
+
<g>
|
191
|
+
<rect x="200" y="300" width="500" height="600" fill="green"/>
|
192
|
+
</g>
|
193
|
+
END
|
194
|
+
assert_svg_draw <<~END
|
195
|
+
<g fill="red">
|
196
|
+
<rect x="200" y="300" width="500" height="600"/>
|
197
|
+
</g>
|
198
|
+
END
|
199
|
+
assert_svg_draw <<~END
|
200
|
+
<g fill="red">
|
201
|
+
<rect x="200" y="300" width="500" height="600" fill="green"/>
|
202
|
+
</g>
|
203
|
+
END
|
204
|
+
end
|
205
|
+
|
206
|
+
def test_group_stroke()
|
207
|
+
assert_svg_draw <<~END
|
208
|
+
<g>
|
209
|
+
<line x1="200" y1="300" x2="500" y2="600"
|
210
|
+
stroke-width="200" stroke="green"/>
|
211
|
+
</g>
|
212
|
+
END
|
213
|
+
assert_svg_draw <<~END
|
214
|
+
<g stroke="red">
|
215
|
+
<line x1="200" y1="300" x2="500" y2="600"
|
216
|
+
stroke-width="200"/>
|
217
|
+
</g>
|
218
|
+
END
|
219
|
+
assert_svg_draw <<~END
|
220
|
+
<g stroke="red">
|
221
|
+
<line x1="200" y1="300" x2="500" y2="600"
|
222
|
+
stroke-width="200" stroke="green"/>
|
223
|
+
</g>
|
224
|
+
END
|
225
|
+
end
|
226
|
+
|
227
|
+
def test_group_stroke_width()
|
228
|
+
assert_svg_draw <<~END
|
229
|
+
<g>
|
230
|
+
<line x1="200" y1="300" x2="500" y2="600" stroke="green" stroke-width="200"/>
|
231
|
+
</g>
|
232
|
+
END
|
233
|
+
assert_svg_draw <<~END
|
234
|
+
<g stroke-width="300">
|
235
|
+
<line x1="200" y1="300" x2="500" y2="600" stroke="green" />
|
236
|
+
</g>
|
237
|
+
END
|
238
|
+
assert_svg_draw <<~END
|
239
|
+
<g stroke-width="300">
|
240
|
+
<line x1="200" y1="300" x2="500" y2="600" stroke="green" stroke-width="400"/>
|
241
|
+
</g>
|
242
|
+
END
|
243
|
+
end
|
244
|
+
|
245
|
+
def test_path_data_shorthand()
|
246
|
+
assert_svg_draw path_xml "M200,300L500,400L600,700L300,800"
|
247
|
+
assert_svg_draw path_xml "M 200,300 l 500.99.400 0,200 -200,0.99.300,200"
|
248
|
+
assert_svg_draw path_xml "M 200,800 l 500-200-200-200-300-300"
|
249
|
+
end
|
250
|
+
|
251
|
+
def path_xml(d)
|
252
|
+
<<~END
|
253
|
+
<path fill="none" stroke="black" stroke-width="100" d="#{d}"/>
|
254
|
+
END
|
255
|
+
end
|
256
|
+
|
257
|
+
end# TestSVG
|