@@ -4,9 +4,15 @@ suite('apply-preserving-inline-style', function() {
4
4
ensureStyleIsPatched ( this . element ) ;
5
5
this . style = this . element . style ;
6
6
document . documentElement . appendChild ( this . element ) ;
7
+ this . svgContainer = document . createElementNS (
8
+ 'http://www.w3.org/2000/svg' , 'svg' ) ;
9
+ document . documentElement . appendChild ( this . svgContainer ) ;
10
+ window . _webAnimationsUpdateSvgTransformAttr = null ;
7
11
} ) ;
8
12
teardown ( function ( ) {
9
13
document . documentElement . removeChild ( this . element ) ;
14
+ document . documentElement . removeChild ( this . svgContainer ) ;
15
+ window . _webAnimationsUpdateSvgTransformAttr = null ;
10
16
} ) ;
11
17
12
18
test ( 'Style is patched' , function ( ) {
@@ -69,4 +75,110 @@ suite('apply-preserving-inline-style', function() {
69
75
this . style . cssText = 'top: 0px' ;
70
76
assert . equal ( this . style . length , 1 ) ;
71
77
} ) ;
78
+ test ( 'Detect SVG transform compatibility' , function ( ) {
79
+ var win = { navigator : { userAgent : '' } } ;
80
+ function agent ( str ) {
81
+ win . _webAnimationsUpdateSvgTransformAttr = null ;
82
+ win . navigator . userAgent = str ;
83
+ }
84
+ // Unknown data: assume that transforms supported.
85
+ assert . equal ( updateSvgTransformAttr ( win ) , false ) ;
86
+ // Chrome: transforms supported.
87
+ agent ( 'Mozilla/5.0 (Linux; Android 5.1.1; Nexus 6 Build/LYZ28E)' +
88
+ ' AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.20' +
89
+ ' Mobile Safari/537.36' ) ;
90
+ assert . equal ( updateSvgTransformAttr ( win ) , false ) ;
91
+ // Safary: transforms supported.
92
+ agent ( 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) ' +
93
+ 'AppleWebKit/537.75.14 (KHTML, like Gecko) Version/7.0.3 ' +
94
+ 'Safari/7046A194A' ) ;
95
+ assert . equal ( updateSvgTransformAttr ( win ) , false ) ;
96
+ // Firefox: transforms supported.
97
+ agent ( 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) ' +
98
+ 'Gecko/20100101 Firefox/40.1' ) ;
99
+ assert . equal ( updateSvgTransformAttr ( win ) , false ) ;
100
+ // IE: transforms are NOT supported.
101
+ agent ( 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 7.0;' +
102
+ ' InfoPath.3; .NET CLR 3.1.40767; Trident/6.0; en-IN)' ) ;
103
+ assert . equal ( updateSvgTransformAttr ( win ) , true ) ;
104
+ // Edge: transforms are NOT supported.
105
+ agent ( 'Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36' +
106
+ ' (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36' +
107
+ ' Edge/12.10136' ) ;
108
+ assert . equal ( updateSvgTransformAttr ( win ) , true ) ;
109
+ } ) ;
110
+ test ( 'Set and clear transform' , function ( ) {
111
+ // This is not an SVG element, so CSS transform support is not consulted.
112
+ window . _webAnimationsUpdateSvgTransformAttr = true ;
113
+ // Set.
114
+ this . element . style . _set ( 'transform' , 'translate(10px, 10px) scale(2)' ) ;
115
+ assert . equal ( getComputedStyle ( this . element ) . transform ,
116
+ 'matrix(2, 0, 0, 2, 10, 10)' ) ;
117
+ assert . equal ( this . element . hasAttribute ( 'transform' ) , false ) ;
118
+ // Clear.
119
+ this . element . style . _clear ( 'transform' ) ;
120
+ assert . equal ( getComputedStyle ( this . element ) . transform , 'none' ) ;
121
+ assert . equal ( this . element . hasAttribute ( 'transform' ) , false ) ;
122
+ } ) ;
123
+ test ( 'Set and clear supported transform on SVG element' , function ( ) {
124
+ window . _webAnimationsUpdateSvgTransformAttr = false ;
125
+ var svgElement = document . createElementNS ( 'http://www.w3.org/2000/svg' , 'rect' ) ;
126
+ ensureStyleIsPatched ( svgElement ) ;
127
+ this . svgContainer . appendChild ( svgElement ) ;
128
+ // Set.
129
+ svgElement . style . _set ( 'transform' , 'translate(10px, 10px) scale(2)' ) ;
130
+ assert . equal ( getComputedStyle ( svgElement ) . transform ,
131
+ 'matrix(2, 0, 0, 2, 10, 10)' ) ;
132
+ assert . equal ( svgElement . hasAttribute ( 'transform' ) , false ) ;
133
+ // Clear.
134
+ svgElement . style . _clear ( 'transform' ) ;
135
+ assert . equal ( getComputedStyle ( svgElement ) . transform , 'none' ) ;
136
+ assert . equal ( svgElement . hasAttribute ( 'transform' ) , false ) ;
137
+ } ) ;
138
+ test ( 'Set and clear NOT supported transform on SVG element' , function ( ) {
139
+ window . _webAnimationsUpdateSvgTransformAttr = true ;
140
+ var svgElement = document . createElementNS ( 'http://www.w3.org/2000/svg' , 'rect' ) ;
141
+ ensureStyleIsPatched ( svgElement ) ;
142
+ this . svgContainer . appendChild ( svgElement ) ;
143
+ // Set.
144
+ svgElement . style . _set ( 'transform' , 'translate(10px, 10px) scale(2)' ) ;
145
+ assert . equal ( getComputedStyle ( svgElement ) . transform ,
146
+ 'matrix(2, 0, 0, 2, 10, 10)' ) ;
147
+ assert . equal ( svgElement . getAttribute ( 'transform' ) ,
148
+ 'matrix(2 0 0 2 10 10)' ) ;
149
+ // Clear.
150
+ svgElement . style . _clear ( 'transform' ) ;
151
+ assert . equal ( getComputedStyle ( svgElement ) . transform , 'none' ) ;
152
+ assert . equal ( svgElement . getAttribute ( 'transform' ) , null ) ;
153
+ } ) ;
154
+ test ( 'Set and clear NOT supported prefixed transform on SVG element' , function ( ) {
155
+ window . _webAnimationsUpdateSvgTransformAttr = true ;
156
+ var svgElement = document . createElementNS ( 'http://www.w3.org/2000/svg' , 'rect' ) ;
157
+ ensureStyleIsPatched ( svgElement ) ;
158
+ this . svgContainer . appendChild ( svgElement ) ;
159
+ // Set.
160
+ svgElement . style . _set ( 'msTransform' , 'translate(10px, 10px) scale(2)' ) ;
161
+ assert . equal ( svgElement . getAttribute ( 'transform' ) ,
162
+ 'matrix(2 0 0 2 10 10)' ) ;
163
+ // Clear.
164
+ svgElement . style . _clear ( 'msTransform' ) ;
165
+ assert . equal ( svgElement . getAttribute ( 'transform' ) , null ) ;
166
+ } ) ;
167
+ test ( 'Restore NOT supported transform on SVG element' , function ( ) {
168
+ window . _webAnimationsUpdateSvgTransformAttr = true ;
169
+ var svgElement = document . createElementNS ( 'http://www.w3.org/2000/svg' , 'rect' ) ;
170
+ svgElement . setAttribute ( 'transform' , 'matrix(2 0 0 2 0 0)' ) ;
171
+ ensureStyleIsPatched ( svgElement ) ;
172
+ this . svgContainer . appendChild ( svgElement ) ;
173
+ // Set.
174
+ svgElement . style . _set ( 'transform' , 'translate(10px, 10px) scale(2)' ) ;
175
+ assert . equal ( getComputedStyle ( svgElement ) . transform ,
176
+ 'matrix(2, 0, 0, 2, 10, 10)' ) ;
177
+ assert . equal ( svgElement . getAttribute ( 'transform' ) ,
178
+ 'matrix(2 0 0 2 10 10)' ) ;
179
+ // Clear.
180
+ svgElement . style . _clear ( 'transform' ) ;
181
+ assert . equal ( getComputedStyle ( svgElement ) . transform , 'none' ) ;
182
+ assert . equal ( svgElement . getAttribute ( 'transform' ) , 'matrix(2 0 0 2 0 0)' ) ;
183
+ } ) ;
72
184
} ) ;
0 commit comments