]> gitweb.factorcode.org Git - factor.git/blob - extra/svg/svg-tests.factor
Fixes #2966
[factor.git] / extra / svg / svg-tests.factor
1 ! (c)2009 Joe Groff, see BSD license
2 USING: accessors literals math math.affine-transforms
3 math.functions math.trig multiline sequences svg tools.test xml
4 xml.traversal ;
5 IN: svg.tests
6
7 ${ { 1.0 2.25 } { -3.0 4.0 } { 5.5 0.5 } <affine-transform> } [
8     "matrix ( 1 +2.25 -3  , 0.4e+1  ,5.5, 5e-1 )" svg-transform>affine-transform
9 ] unit-test
10
11 ${ { 1.0 0.0 } { 0.0 1.0 } { 5.0 10.0 } <affine-transform> } [
12     "translate(5.0, 1e1 )" svg-transform>affine-transform
13 ] unit-test
14
15 ${ { 1.0 0.0 } { 0.0 1.0 } { 5.0 10.0 } <affine-transform> } [
16     "translate( 5.0  1e+1)" svg-transform>affine-transform
17 ] unit-test
18
19 ${ { 2.0 0.0 } { 0.0 2.0 } { 0.0 0.0 } <affine-transform> } [
20     "scale(2.0)" svg-transform>affine-transform
21 ] unit-test
22
23 ${ { 2.0 0.0 } { 0.0 4.0 } { 0.0 0.0 } <affine-transform> } [
24     "scale(2.0 4.0)" svg-transform>affine-transform
25 ] unit-test
26
27 ${ { 2.0 0.0 } { 0.0 4.0 } { 0.0 0.0 } <affine-transform> } [
28     "scale(2.0 4.0)" svg-transform>affine-transform
29 ] unit-test
30
31 { t } [
32     "skewX(45)" svg-transform>affine-transform
33     { 1.0 0.0 } { 1.0 1.0 } { 0.0 0.0 } <affine-transform> 0.001 a~
34 ] unit-test
35
36 { t } [
37     "skewY(-4.5e1)" svg-transform>affine-transform
38     { 1.0 -1.0 } { 0.0 1.0 } { 0.0 0.0 } <affine-transform> 0.001 a~
39 ] unit-test
40
41 { t } [
42     "rotate(30)" svg-transform>affine-transform
43     { $[ 0.75 sqrt ] 0.5            }
44     { -0.5           $[ 0.75 sqrt ] }
45     {  0.0           0.0            } <affine-transform>
46     0.001 a~
47 ] unit-test
48
49 { t } [
50     "rotate(30 1.0,2.0)" svg-transform>affine-transform
51     { $[  30 deg>rad cos ] $[ 30 deg>rad sin ] }
52     { $[ -30 deg>rad sin ] $[ 30 deg>rad cos ] } {
53         $[ 1.0 30 deg>rad cos 1.0 * - 30 deg>rad sin 2.0 * + ]
54         $[ 2.0 30 deg>rad cos 2.0 * - 30 deg>rad sin 1.0 * - ]
55     } <affine-transform> 0.001 a~
56 ] unit-test
57
58 ${
59     { $[  30 deg>rad cos ] $[ 30 deg>rad sin ] }
60     { $[ -30 deg>rad sin ] $[ 30 deg>rad cos ] }
61     { 1.0 2.0 } <affine-transform>
62 } [
63     "translate(1 2) rotate(30)" svg-transform>affine-transform
64 ] unit-test
65
66 { {
67     T{ moveto f { 1.0  1.0 } f }
68     T{ lineto f { 3.0 -1.0 } f }
69
70     T{ lineto f { 2.0  2.0 } t }
71     T{ lineto f { 2.0 -2.0 } t }
72     T{ lineto f { 2.0  2.0 } t }
73
74     T{ vertical-lineto f -9.0 t }
75     T{ vertical-lineto f  1.0 t }
76     T{ horizontal-lineto f 9.0 f }
77     T{ horizontal-lineto f 8.0 f }
78
79     T{ closepath }
80
81     T{ moveto f { 0.0 0.0 } f }
82
83     T{ curveto f { -4.0 0.0 } { -8.0 4.0 } { -8.0 8.0 } f }
84     T{ curveto f { -8.0 4.0 } { -12.0 8.0 } { -16.0 8.0 } f }
85
86     T{ smooth-curveto f { 0.0 2.0 } { 2.0 0.0 } t }
87
88     T{ quadratic-bezier-curveto f { -2.0 0.0 } { 0.0 -2.0 } f }
89     T{ quadratic-bezier-curveto f { -3.0 0.0 } { 0.0  3.0 } f }
90
91     T{ smooth-quadratic-bezier-curveto f { 1.0 2.0 } t }
92     T{ smooth-quadratic-bezier-curveto f { 3.0 4.0 } t }
93
94     T{ elliptical-arc f { 5.0 6.0 } 7.0 t f { 8.0 9.0 } f }
95 } } [
96     "
97     M 1.0,+1 3,-10e-1  l 2 2, 2 -2, 2 2   v -9 1 H 9 8  z 
98     M 0 0  C -4.0 0.0 -8.0 4.0 -8.0 8.0  -8.0 4.0 -12.0 8.0 -16.0 8.0
99     s 0.0,2.0 2.0,0.0
100     Q -2 0 0 -2 -3. 0 0 3
101     t 1 2 3 4
102     A 5 6 7 1 0 8 9
103     " svg-path>array
104 ] unit-test
105
106 STRING: test-svg-string
107 <svg xmlns="http://www.w3.org/2000/svg">
108         <path transform="translate(1 2)" d="M -1 -1 l 2 2" />
109 </svg>
110 ;
111
112 : test-svg-path ( -- obj )
113     test-svg-string string>xml body>> children-tags first ;
114
115 { { T{ moveto f { -1.0 -1.0 } f } T{ lineto f { 2.0 2.0 } t } } }
116 [ test-svg-path tag-d ] unit-test
117
118 { T{ affine-transform f { 1.0 0.0 } { 0.0 1.0 } { 1.0 2.0 } } }
119 [ test-svg-path tag-transform ] unit-test