11
11
12
12
'use strict' ;
13
13
14
- import type { FilterPrimitive } from '../processFilter' ;
14
+ import type { FilterPrimitive } from '../StyleSheetTypes' ;
15
+
16
+ import processColor from '../processColor' ;
15
17
16
18
const processFilter = require ( '../processFilter' ) . default ;
17
19
@@ -38,33 +40,38 @@ describe('processFilter', () => {
38
40
} ,
39
41
] ) ;
40
42
41
- testNumericFilter ( 'hueRotate ' , 0 , [ { hueRotate : 0 } ] ) ;
42
- testUnitFilter ( 'hueRotate ' , 90 , 'deg' , [ { hueRotate : 90 } ] ) ;
43
- testUnitFilter ( 'hueRotate ' , 1.5708 , 'rad' , [
44
- { hueRotate : ( 180 * 1.5708 ) / Math . PI } ,
43
+ testNumericFilter ( 'hue-rotate ' , 0 , [ { 'hue-rotate' : 0 } ] ) ;
44
+ testUnitFilter ( 'hue-rotate ' , 90 , 'deg' , [ { 'hue-rotate' : 90 } ] ) ;
45
+ testUnitFilter ( 'hue-rotate ' , 1.5708 , 'rad' , [
46
+ { 'hue-rotate' : ( 180 * 1.5708 ) / Math . PI } ,
45
47
] ) ;
46
- testUnitFilter ( 'hueRotate ' , - 90 , 'deg' , [ { hueRotate : - 90 } ] ) ;
47
- testUnitFilter ( 'hueRotate ' , 1.5 , 'grad' , [ ] ) ;
48
- testNumericFilter ( 'hueRotate ' , 90 , [ ] ) ;
49
- testUnitFilter ( 'hueRotate ' , 50 , '%' , [ ] ) ;
48
+ testUnitFilter ( 'hue-rotate ' , - 90 , 'deg' , [ { 'hue-rotate' : - 90 } ] ) ;
49
+ testUnitFilter ( 'hue-rotate ' , 1.5 , 'grad' , [ ] ) ;
50
+ testNumericFilter ( 'hue-rotate ' , 90 , [ ] ) ;
51
+ testUnitFilter ( 'hue-rotate ' , 50 , '%' , [ ] ) ;
50
52
51
53
it ( 'multiple filters' , ( ) => {
52
54
expect (
53
55
processFilter ( [
54
56
{ brightness : 0.5 } ,
55
57
{ opacity : 0.5 } ,
56
58
{ blur : 5 } ,
57
- { hueRotate : '90deg' } ,
59
+ { 'hue-rotate' : '90deg' } ,
58
60
] ) ,
59
- ) . toEqual ( [ { brightness : 0.5 } , { opacity : 0.5 } , { blur : 5 } , { hueRotate : 90 } ] ) ;
61
+ ) . toEqual ( [
62
+ { brightness : 0.5 } ,
63
+ { opacity : 0.5 } ,
64
+ { blur : 5 } ,
65
+ { 'hue-rotate' : 90 } ,
66
+ ] ) ;
60
67
} ) ;
61
68
it ( 'multiple filters one invalid' , ( ) => {
62
69
expect (
63
70
processFilter ( [
64
71
{ brightness : 0.5 } ,
65
72
{ opacity : 0.5 } ,
66
73
{ blur : 5 } ,
67
- { hueRotate : '90foo' } ,
74
+ { 'hue-rotate' : '90foo' } ,
68
75
] ) ,
69
76
) . toEqual ( [ ] ) ;
70
77
} ) ;
@@ -83,6 +90,20 @@ describe('processFilter', () => {
83
90
{ brightness : 0.5 } ,
84
91
] ) ;
85
92
} ) ;
93
+
94
+ it ( 'should parse mixed case filters' , ( ) => {
95
+ expect (
96
+ processFilter (
97
+ 'brIGhTneSs(0.5) hUE-rOTatE(90deg) briGhtNess(0.5) Brightness(0.5)' ,
98
+ ) ,
99
+ ) . toEqual ( [
100
+ { brightness : 0.5 } ,
101
+ { 'hue-rotate' : 90 } ,
102
+ { brightness : 0.5 } ,
103
+ { brightness : 0.5 } ,
104
+ ] ) ;
105
+ } ) ;
106
+
86
107
it ( 'empty' , ( ) => {
87
108
expect ( processFilter ( [ ] ) ) . toEqual ( [ ] ) ;
88
109
} ) ;
@@ -96,12 +117,17 @@ describe('processFilter', () => {
96
117
} ) ;
97
118
it ( 'string multiple filters' , ( ) => {
98
119
expect (
99
- processFilter ( 'brightness(0.5) opacity(0.5) blur(5) hueRotate(90deg)' ) ,
100
- ) . toEqual ( [ { brightness : 0.5 } , { opacity : 0.5 } , { blur : 5 } , { hueRotate : 90 } ] ) ;
120
+ processFilter ( 'brightness(0.5) opacity(0.5) blur(5) hue-rotate(90deg)' ) ,
121
+ ) . toEqual ( [
122
+ { brightness : 0.5 } ,
123
+ { opacity : 0.5 } ,
124
+ { blur : 5 } ,
125
+ { 'hue-rotate' : 90 } ,
126
+ ] ) ;
101
127
} ) ;
102
128
it ( 'string multiple filters one invalid' , ( ) => {
103
129
expect (
104
- processFilter ( 'brightness(0.5) opacity(0.5) blur(5) hueRotate (90foo)' ) ,
130
+ processFilter ( 'brightness(0.5) opacity(0.5) blur(5) hue-rotate (90foo)' ) ,
105
131
) . toEqual ( [ ] ) ;
106
132
} ) ;
107
133
it ( 'string multiple same filters' , ( ) => {
@@ -131,6 +157,8 @@ describe('processFilter', () => {
131
157
// $FlowExpectedError[incompatible-call]
132
158
expect ( processFilter ( 'brightness(.5)' ) ) . toEqual ( [ { brightness : 0.5 } ] ) ;
133
159
} ) ;
160
+
161
+ testDropShadow ( ) ;
134
162
} ) ;
135
163
136
164
function testStandardFilter ( filter : string ) : void {
@@ -191,8 +219,8 @@ function createFilterPrimitive(
191
219
return { contrast : value } ;
192
220
case 'grayscale' :
193
221
return { grayscale : value } ;
194
- case 'hueRotate ' :
195
- return { hueRotate : value } ;
222
+ case 'hue-rotate ' :
223
+ return { 'hue-rotate' : value } ;
196
224
case 'invert' :
197
225
return { invert : value } ;
198
226
case 'opacity' :
@@ -205,3 +233,172 @@ function createFilterPrimitive(
205
233
throw new Error ( 'Invalid filter: ' + filter ) ;
206
234
}
207
235
}
236
+
237
+ function testDropShadow ( ) {
238
+ it ( 'should parse string drop-shadow' , ( ) => {
239
+ expect ( processFilter ( 'drop-shadow(4px 4 10px red)' ) ) . toEqual ( [
240
+ {
241
+ 'drop-shadow' : {
242
+ offsetX : 4 ,
243
+ offsetY : 4 ,
244
+ color : processColor ( 'red' ) ,
245
+ standardDeviation : 10 ,
246
+ } ,
247
+ } ,
248
+ ] ) ;
249
+ } ) ;
250
+
251
+ it ( 'should parse string negative offsets drop-shadow' , ( ) => {
252
+ expect ( processFilter ( 'drop-shadow(-4 -4)' ) ) . toEqual ( [
253
+ {
254
+ 'drop-shadow' : {
255
+ offsetX : - 4 ,
256
+ offsetY : - 4 ,
257
+ } ,
258
+ } ,
259
+ ] ) ;
260
+ } ) ;
261
+
262
+ it ( 'should parse string multiple drop-shadows' , ( ) => {
263
+ expect (
264
+ processFilter ( 'drop-shadow(4 4) drop-shadow(4 4) drop-shadow(4 4)' ) ,
265
+ ) . toEqual ( [
266
+ {
267
+ 'drop-shadow' : {
268
+ offsetX : 4 ,
269
+ offsetY : 4 ,
270
+ } ,
271
+ } ,
272
+ {
273
+ 'drop-shadow' : {
274
+ offsetX : 4 ,
275
+ offsetY : 4 ,
276
+ } ,
277
+ } ,
278
+ {
279
+ 'drop-shadow' : {
280
+ offsetX : 4 ,
281
+ offsetY : 4 ,
282
+ } ,
283
+ } ,
284
+ ] ) ;
285
+ } ) ;
286
+
287
+ it ( 'should parse string drop-shadow with random whitespaces' , ( ) => {
288
+ expect (
289
+ processFilter ( ' drop-shadow(4px 4 10px red) ' ) ,
290
+ ) . toEqual ( [
291
+ {
292
+ 'drop-shadow' : {
293
+ offsetX : 4 ,
294
+ offsetY : 4 ,
295
+ color : processColor ( 'red' ) ,
296
+ standardDeviation : 10 ,
297
+ } ,
298
+ } ,
299
+ ] ) ;
300
+ } ) ;
301
+
302
+ it ( 'should parse string drop-shadow with multiple filters' , ( ) => {
303
+ expect (
304
+ processFilter (
305
+ 'drop-shadow(4px 4 10px red) brightness(0.5) brightness(0.5)' ,
306
+ ) ,
307
+ ) . toEqual ( [
308
+ {
309
+ 'drop-shadow' : {
310
+ offsetX : 4 ,
311
+ offsetY : 4 ,
312
+ color : processColor ( 'red' ) ,
313
+ standardDeviation : 10 ,
314
+ } ,
315
+ } ,
316
+ { brightness : 0.5 } ,
317
+ { brightness : 0.5 } ,
318
+ ] ) ;
319
+ } ) ;
320
+
321
+ it ( 'should parse string drop-shadow with color' , ( ) => {
322
+ expect ( processFilter ( 'drop-shadow(50 50 purple)' ) ) . toEqual ( [
323
+ {
324
+ 'drop-shadow' : {
325
+ offsetX : 50 ,
326
+ offsetY : 50 ,
327
+ color : processColor ( 'purple' ) ,
328
+ } ,
329
+ } ,
330
+ ] ) ;
331
+ } ) ;
332
+
333
+ it ( 'should parse string with mixed case drop-shadow' , ( ) => {
334
+ expect ( processFilter ( 'DroP-sHaDOw(50 50 purple)' ) ) . toEqual ( [
335
+ {
336
+ 'drop-shadow' : {
337
+ offsetX : 50 ,
338
+ offsetY : 50 ,
339
+ color : processColor ( 'purple' ) ,
340
+ } ,
341
+ } ,
342
+ ] ) ;
343
+ } ) ;
344
+
345
+ it ( 'should parse object drop-shadow' , ( ) => {
346
+ expect (
347
+ processFilter ( [
348
+ {
349
+ 'drop-shadow' : {
350
+ offsetX : 4 ,
351
+ offsetY : 4 ,
352
+ color : '#FFFFFF' ,
353
+ standardDeviation : '10' ,
354
+ } ,
355
+ } ,
356
+ ] ) ,
357
+ ) . toEqual ( [
358
+ {
359
+ 'drop-shadow' : {
360
+ offsetX : 4 ,
361
+ offsetY : 4 ,
362
+ standardDeviation : 10 ,
363
+ color : processColor ( '#FFFFFF' ) ,
364
+ } ,
365
+ } ,
366
+ ] ) ;
367
+ } ) ;
368
+
369
+ it ( 'should fail to parse string comma separated drop-shadow' , ( ) => {
370
+ expect ( processFilter ( 'drop-shadow(4px, 4, 10px, red)' ) ) . toEqual ( [ ] ) ;
371
+ } ) ;
372
+
373
+ it ( 'should fail to parse other symbols after args comma separated drop-shadow' , ( ) => {
374
+ expect ( processFilter ( 'drop-shadow(4& 4* 10$ red)' ) ) . toEqual ( [ ] ) ;
375
+ } ) ;
376
+
377
+ it ( 'should fail on color between lengths string drop-shadow' , ( ) => {
378
+ expect ( processFilter ( 'drop-shadow(10 red 10 10' ) ) . toEqual ( [ ] ) ;
379
+ } ) ;
380
+
381
+ it ( 'should fail on color between offset & blur string drop-shadow' , ( ) => {
382
+ expect ( processFilter ( 'drop-shadow(10 10 red 10' ) ) . toEqual ( [ ] ) ;
383
+ } ) ;
384
+
385
+ it ( 'should fail on negative blue' , ( ) => {
386
+ expect ( processFilter ( 'drop-shadow(10 10 -10' ) ) . toEqual ( [ ] ) ;
387
+ } ) ;
388
+
389
+ it ( 'should fail on invalid object drop-shadow' , ( ) => {
390
+ expect (
391
+ // $FlowExpectedError[incompatible-call]
392
+ processFilter ( [
393
+ { 'drop-shadow' : { offsetX : 4 , offsetY : 5 , invalid : 'invalid arg' } } ,
394
+ ] ) ,
395
+ ) . toEqual ( [ ] ) ;
396
+ } ) ;
397
+
398
+ it ( 'should fail on invalid argument for drop-shadow object' , ( ) => {
399
+ expect (
400
+ // $FlowExpectedError[incompatible-call]
401
+ processFilter ( [ { 'drop-shadow' : 8 } ] ) ,
402
+ ) . toEqual ( [ ] ) ;
403
+ } ) ;
404
+ }
0 commit comments