@@ -70,26 +70,29 @@ describe('parseLength', () => {
70
70
expect ( parsers . parseLength ( 'calc(1px + 1px)' ) ) . toBe ( 'calc(2px)' ) ;
71
71
} ) ;
72
72
} ) ;
73
- describe ( 'parsePercent ' , ( ) => {
73
+ describe ( 'parsePercentage ' , ( ) => {
74
74
it ( 'returns undefined for invalid values' , ( ) => {
75
75
const invalid = [ 'string' , '1%%' , '1px%' , '#1%' , 'calc(1 * 1px)' ] ;
76
- invalid . forEach ( input => expect ( parsers . parsePercent ( input ) ) . toBeUndefined ( ) ) ;
76
+ invalid . forEach ( input => expect ( parsers . parsePercentage ( input ) ) . toBeUndefined ( ) ) ;
77
77
} ) ;
78
78
it ( 'parses percent with exponent' , ( ) => {
79
- expect ( parsers . parsePercent ( '1e1%' ) ) . toBe ( '10%' ) ;
80
- expect ( parsers . parsePercent ( '1e+1%' ) ) . toBe ( '10%' ) ;
81
- expect ( parsers . parsePercent ( '1e-1%' ) ) . toBe ( '0.1%' ) ;
79
+ expect ( parsers . parsePercentage ( '1e1%' ) ) . toBe ( '10%' ) ;
80
+ expect ( parsers . parsePercentage ( '1e+1%' ) ) . toBe ( '10%' ) ;
81
+ expect ( parsers . parsePercentage ( '1e-1%' ) ) . toBe ( '0.1%' ) ;
82
82
} ) ;
83
83
it ( 'parses percent with missing leading 0' , ( ) => {
84
- expect ( parsers . parsePercent ( '.1%' ) ) . toBe ( '0.1%' ) ;
84
+ expect ( parsers . parsePercentage ( '.1%' ) ) . toBe ( '0.1%' ) ;
85
85
} ) ;
86
86
it ( 'returns percent without trailing 0 in decimals' , ( ) => {
87
- expect ( parsers . parsePercent ( '0.10%' ) ) . toBe ( '0.1%' ) ;
87
+ expect ( parsers . parsePercentage ( '0.10%' ) ) . toBe ( '0.1%' ) ;
88
88
} ) ;
89
89
it ( 'works with calc' , ( ) => {
90
- expect ( parsers . parsePercent ( 'calc(1% + 1%)' ) ) . toBe ( 'calc(2%)' ) ;
90
+ expect ( parsers . parsePercentage ( 'calc(1% + 1%)' ) ) . toBe ( 'calc(2%)' ) ;
91
91
} ) ;
92
92
} ) ;
93
+ describe ( 'parseLengthOrPercentage' , ( ) => {
94
+ it . todo ( 'test' ) ;
95
+ } ) ;
93
96
describe ( 'parseAlpha' , ( ) => {
94
97
it ( 'returns undefined for invalid values' , ( ) => {
95
98
const invalid = [ 'string' , '1%%' , '1px%' , '#1%' , 'calc(1 * 1px)' ] ;
@@ -124,9 +127,6 @@ describe('parseAlpha', () => {
124
127
expect ( parsers . parseAlpha ( 'calc(0.5 + 0.5)' ) ) . toBe ( '1' ) ;
125
128
} ) ;
126
129
} ) ;
127
- describe ( 'parseMeasurement' , ( ) => {
128
- it . todo ( 'test' ) ;
129
- } ) ;
130
130
describe ( 'parseAngle' , ( ) => {
131
131
it ( 'returns undefined for invalid values' , ( ) => {
132
132
const invalid = [ 'string' , '1' , '1degg' , 'a1deg' , 'deg' , 'calc(1 * 1px)' ] ;
@@ -251,12 +251,46 @@ describe('parseCustomIdentifier', () => {
251
251
expect ( parsers . parseCustomIdentifier ( 'myCustomIdentifier' ) ) . toBe ( 'myCustomIdentifier' ) ;
252
252
} ) ;
253
253
} ) ;
254
+ describe ( 'parseImage' , ( ) => {
255
+ it . todo ( 'tests' ) ;
256
+ } ) ;
254
257
describe ( 'parseUrl' , ( ) => {
255
258
it . todo ( 'test' ) ;
256
259
} ) ;
257
260
describe ( 'parseString' , ( ) => {
258
261
it . todo ( 'test' ) ;
259
262
} ) ;
263
+ describe ( 'parsePosition' , ( ) => {
264
+ it ( 'returns undefined for invalid values' , ( ) => {
265
+ const invalid = [
266
+ 'side' ,
267
+ '1' ,
268
+ 'left left' ,
269
+ 'top top' ,
270
+ 'left top center' ,
271
+ 'left top 50%' ,
272
+ '0% 0% 0%' ,
273
+ 'top 50%' ,
274
+ '50% left' ,
275
+ ] ;
276
+ invalid . forEach ( input => expect ( parsers . parsePosition ( input ) ) . toBeUndefined ( ) ) ;
277
+ } ) ;
278
+ it ( 'resolves 0 as 0px' , ( ) => {
279
+ expect ( parsers . parsePosition ( '0 0' ) ) . toBe ( '0px 0px' ) ;
280
+ } ) ;
281
+ it ( 'resolves with center as a default value' , ( ) => {
282
+ expect ( parsers . parsePosition ( '0%' ) ) . toBe ( '0% center' ) ;
283
+ expect ( parsers . parsePosition ( 'left' ) ) . toBe ( 'left center' ) ;
284
+ expect ( parsers . parsePosition ( 'top' ) ) . toBe ( 'center top' ) ;
285
+ expect ( parsers . parsePosition ( 'center' ) ) . toBe ( 'center center' ) ;
286
+ } ) ;
287
+ it ( 'resolves with horizontal position first' , ( ) => {
288
+ expect ( parsers . parsePosition ( 'top left' ) ) . toBe ( 'left top' ) ;
289
+ } ) ;
290
+ it ( 'resolves with lowercased position' , ( ) => {
291
+ expect ( parsers . parsePosition ( 'LEFt 0%' ) ) . toBe ( 'left 0%' ) ;
292
+ } ) ;
293
+ } ) ;
260
294
describe ( 'parseColor' , ( ) => {
261
295
it ( 'returns undefined for invalid values' , ( ) => {
262
296
const invalid = [
@@ -331,6 +365,175 @@ describe('parseColor', () => {
331
365
) ;
332
366
} ) ;
333
367
} ) ;
368
+ describe ( 'parseGradient' , ( ) => {
369
+ it ( 'returns undefined for invalid values' , ( ) => {
370
+ const invalid = [
371
+ 'string' ,
372
+ '1' ,
373
+ 'invalid-gradient(red, cyan)' ,
374
+ 'invalid-conic-gradient(red, cyan)' ,
375
+ 'conic-gradient()' ,
376
+ 'conic-gradient( , red, cyan)' ,
377
+ 'conic-gradient(0, cyan)' ,
378
+ 'conic-gradient(from , red, cyan)' ,
379
+ 'conic-gradient(from 1, red, cyan)' ,
380
+ 'conic-gradient(from 90deg 120deg, red, cyan)' ,
381
+ 'conic-gradient(at , red, cyan)' ,
382
+ 'conic-gradient(at 1, red, cyan)' ,
383
+ 'conic-gradient(at left center center, red, cyan)' ,
384
+ 'conic-gradient(red, 0%, 0%, cyan)' ,
385
+ 'conic-gradient(cyan 0deg)' ,
386
+ 'linear-gradient(0, cyan)' ,
387
+ 'linear-gradient(1, red, cyan)' ,
388
+ 'linear-gradient(90deg 120deg, red, cyan)' ,
389
+ 'linear-gradient(at , red, cyan)' ,
390
+ 'linear-gradient(at 1, red, cyan)' ,
391
+ 'linear-gradient(at left center center, red, cyan)' ,
392
+ 'linear-gradient(red, 0%, 0%, cyan)' ,
393
+ 'linear-gradient(cyan 0%)' ,
394
+ 'radial-gradient(0, cyan)' ,
395
+ 'radial-gradient(1, red, cyan)' ,
396
+ 'radial-gradient(circle 50%, red, cyan)' ,
397
+ 'radial-gradient(circle 100px 120px, red, cyan)' ,
398
+ 'radial-gradient(ellipse 50%, red, cyan)' ,
399
+ 'radial-gradient(50% closest-corner, red, cyan)' ,
400
+ 'radial-gradient(closest-corner 50%, red, cyan)' ,
401
+ 'radial-gradient(at , red, cyan)' ,
402
+ 'radial-gradient(at 1, red, cyan)' ,
403
+ 'radial-gradient(at left center center, red, cyan)' ,
404
+ 'radial-gradient(red, 0%, 0%, cyan)' ,
405
+ 'radial-gradient(cyan 0%)' ,
406
+ ] ;
407
+ invalid . forEach ( input => expect ( parsers . parseGradient ( input ) ) . toBeUndefined ( ) ) ;
408
+ } ) ;
409
+ it ( 'parses a conic gradient' , ( ) => {
410
+ [
411
+ // [input, expected]
412
+ [ 'conic-gradient(red, cyan)' , 'conic-gradient(red, cyan)' ] ,
413
+ [ 'CONIC-gradient(red, cyan)' , 'conic-gradient(red, cyan)' ] ,
414
+ [ 'repeating-conic-gradient(red, cyan)' , 'repeating-conic-gradient(red, cyan)' ] ,
415
+ [ 'conic-gradient(from 0, red, cyan)' , 'conic-gradient(from 0deg, red, cyan)' ] ,
416
+ [ 'conic-gradient(from 2turn, red, cyan)' , 'conic-gradient(from 2turn, red, cyan)' ] ,
417
+ [ 'conic-gradient(at top, red, cyan)' , 'conic-gradient(at center top, red, cyan)' ] ,
418
+ [ 'conic-gradient(at left, red, cyan)' , 'conic-gradient(at left center, red, cyan)' ] ,
419
+ [ 'conic-gradient(at top left, red, cyan)' , 'conic-gradient(at left top, red, cyan)' ] ,
420
+ [ 'conic-gradient(at 0%, red, cyan)' , 'conic-gradient(at 0% center, red, cyan)' ] ,
421
+ [ 'conic-gradient(at -100% 200%, red, cyan)' , 'conic-gradient(at -100% 200%, red, cyan)' ] ,
422
+ [
423
+ 'conic-gradient(from 0deg at left center, red, cyan)' ,
424
+ 'conic-gradient(from 0deg at left center, red, cyan)' ,
425
+ ] ,
426
+ [ 'conic-gradient(red, 50%, cyan)' , 'conic-gradient(red, 50%, cyan)' ] ,
427
+ [ 'conic-gradient(red 0 0, 0, cyan)' , 'conic-gradient(red 0deg, red 0deg, 0deg, cyan)' ] ,
428
+ [
429
+ 'conic-gradient(red 0deg 1turn, 50%, cyan)' ,
430
+ 'conic-gradient(red 0deg, red 1turn, 50%, cyan)' ,
431
+ ] ,
432
+ [
433
+ 'conic-gradient(red -1% 200%, 540deg, cyan)' ,
434
+ 'conic-gradient(red -1%, red 200%, 540deg, cyan)' ,
435
+ ] ,
436
+ [ 'conic-gradient(red 0deg 180deg)' , 'conic-gradient(red 0deg, red 180deg)' ] ,
437
+ ] . forEach ( ( [ input , expected ] ) => expect ( parsers . parseGradient ( input ) ) . toBe ( expected ) ) ;
438
+ } ) ;
439
+ it ( 'parses a linear gradient' , ( ) => {
440
+ [
441
+ // [input, expected]
442
+ [ 'linear-gradient(red, cyan)' , 'linear-gradient(red, cyan)' ] ,
443
+ [ 'repeating-linear-gradient(red, cyan)' , 'repeating-linear-gradient(red, cyan)' ] ,
444
+ [ 'linear-gradient(0, red, cyan)' , 'linear-gradient(0deg, red, cyan)' ] ,
445
+ [ 'linear-gradient(2turn, red, cyan)' , 'linear-gradient(2turn, red, cyan)' ] ,
446
+ [ 'linear-gradient(to top, red, cyan)' , 'linear-gradient(to top, red, cyan)' ] ,
447
+ [ 'linear-gradient(to left, red, cyan)' , 'linear-gradient(to left, red, cyan)' ] ,
448
+ [ 'linear-gradient(to top left, red, cyan)' , 'linear-gradient(to left top, red, cyan)' ] ,
449
+ [ 'linear-gradient(to bottom, red, cyan)' , 'linear-gradient(red, cyan)' ] ,
450
+ [ 'linear-gradient(to left bottom, red, cyan)' , 'linear-gradient(to left bottom, red, cyan)' ] ,
451
+ [ 'linear-gradient(to -100% 200%, red, cyan)' , 'linear-gradient(to -100% 200%, red, cyan)' ] ,
452
+ [ 'linear-gradient(red, 50%, cyan)' , 'linear-gradient(red, 50%, cyan)' ] ,
453
+ [ 'linear-gradient(red 0 0, 0, cyan)' , 'linear-gradient(red 0px, red 0px, 0px, cyan)' ] ,
454
+ [
455
+ 'linear-gradient(red 0px 100%, 50px, cyan)' ,
456
+ 'linear-gradient(red 0px, red 100%, 50px, cyan)' ,
457
+ ] ,
458
+ [
459
+ 'linear-gradient(red -1% 200px, 150%, cyan)' ,
460
+ 'linear-gradient(red -1%, red 200px, 150%, cyan)' ,
461
+ ] ,
462
+ [ 'linear-gradient(red 0% 50%)' , 'linear-gradient(red 0%, red 50%)' ] ,
463
+ ] . forEach ( ( [ input , expected ] ) => expect ( parsers . parseGradient ( input ) ) . toBe ( expected ) ) ;
464
+ } ) ;
465
+ it ( 'parses a radial gradient' , ( ) => {
466
+ [
467
+ // [input, expected]
468
+ [ 'radial-gradient(red, cyan)' , 'radial-gradient(red, cyan)' ] ,
469
+ [ 'repeating-radial-gradient(red, cyan)' , 'repeating-radial-gradient(red, cyan)' ] ,
470
+ [ 'radial-gradient(circle, red, cyan)' , 'radial-gradient(circle, red, cyan)' ] ,
471
+ [ 'radial-gradient(circle 0, red, cyan)' , 'radial-gradient(0px, red, cyan)' ] ,
472
+ [ 'radial-gradient(circle 50px, red, cyan)' , 'radial-gradient(50px, red, cyan)' ] ,
473
+ [ 'radial-gradient(50px circle, red, cyan)' , 'radial-gradient(50px, red, cyan)' ] ,
474
+ [ 'radial-gradient(circle farthest-corner, red, cyan)' , 'radial-gradient(circle, red, cyan)' ] ,
475
+ [ 'radial-gradient(farthest-corner circle, red, cyan)' , 'radial-gradient(circle, red, cyan)' ] ,
476
+ [
477
+ 'radial-gradient(circle farthest-side, red, cyan)' ,
478
+ 'radial-gradient(circle farthest-side, red, cyan)' ,
479
+ ] ,
480
+ [
481
+ 'radial-gradient(farthest-side circle, red, cyan)' ,
482
+ 'radial-gradient(circle farthest-side, red, cyan)' ,
483
+ ] ,
484
+ [ 'radial-gradient(ellipse, red, cyan)' , 'radial-gradient(red, cyan)' ] ,
485
+ [ 'radial-gradient(ellipse 0 120%, red, cyan)' , 'radial-gradient(0px 120%, red, cyan)' ] ,
486
+ [ 'radial-gradient(ellipse 80% 100%, red, cyan)' , 'radial-gradient(80% 100%, red, cyan)' ] ,
487
+ [ 'radial-gradient(80% 100% ellipse, red, cyan)' , 'radial-gradient(80% 100%, red, cyan)' ] ,
488
+ [ 'radial-gradient(ellipse farthest-corner, red, cyan)' , 'radial-gradient(red, cyan)' ] ,
489
+ [ 'radial-gradient(farthest-corner ellipse, red, cyan)' , 'radial-gradient(red, cyan)' ] ,
490
+ [
491
+ 'radial-gradient(ellipse farthest-side, red, cyan)' ,
492
+ 'radial-gradient(farthest-side, red, cyan)' ,
493
+ ] ,
494
+ [
495
+ 'radial-gradient(farthest-side ellipse, red, cyan)' ,
496
+ 'radial-gradient(farthest-side, red, cyan)' ,
497
+ ] ,
498
+ [ 'radial-gradient(at top, red, cyan)' , 'radial-gradient(at center top, red, cyan)' ] ,
499
+ [ 'radial-gradient(at left, red, cyan)' , 'radial-gradient(at left center, red, cyan)' ] ,
500
+ [ 'radial-gradient(at top left, red, cyan)' , 'radial-gradient(at left top, red, cyan)' ] ,
501
+ [ 'radial-gradient(at -100% 200%, red, cyan)' , 'radial-gradient(at -100% 200%, red, cyan)' ] ,
502
+ [
503
+ 'radial-gradient(circle closest-side at center center, red, cyan)' ,
504
+ 'radial-gradient(circle closest-side at center center, red, cyan)' ,
505
+ ] ,
506
+ [ 'radial-gradient(red, 50%, cyan)' , 'radial-gradient(red, 50%, cyan)' ] ,
507
+ [ 'radial-gradient(red 0 0, 0, cyan)' , 'radial-gradient(red 0px, red 0px, 0px, cyan)' ] ,
508
+ [
509
+ 'radial-gradient(red 0px 100%, 50px, cyan)' ,
510
+ 'radial-gradient(red 0px, red 100%, 50px, cyan)' ,
511
+ ] ,
512
+ [
513
+ 'radial-gradient(red -1% 200px, 150%, cyan)' ,
514
+ 'radial-gradient(red -1%, red 200px, 150%, cyan)' ,
515
+ ] ,
516
+ [ 'radial-gradient(red 0% 50%)' , 'radial-gradient(red 0%, red 50%)' ] ,
517
+ ] . forEach ( ( [ input , expected ] ) => expect ( parsers . parseGradient ( input ) ) . toBe ( expected ) ) ;
518
+ } ) ;
519
+ it ( 'works with calc' , ( ) => {
520
+ [
521
+ // [input, expected]
522
+ [
523
+ 'conic-gradient(from calc(90deg * 2) at calc(25% * 2), red calc(5% * 2) calc(50% * 2), calc(25% * 2), cyan)' ,
524
+ 'conic-gradient(from calc(180deg) at calc(50%) center, red calc(10%), red calc(100%), calc(50%), cyan)' ,
525
+ ] ,
526
+ [
527
+ 'linear-gradient(calc(90deg * 2), red calc(5% * 2) calc(50% * 2), calc(25% * 2), cyan)' ,
528
+ 'linear-gradient(red calc(10%), red calc(100%), calc(50%), cyan)' ,
529
+ ] ,
530
+ [
531
+ 'radial-gradient(calc(25px * 2) at calc(25% * 2), red calc(5% * 2) calc(50% * 2), calc(25% * 2), cyan)' ,
532
+ 'radial-gradient(calc(50px) at calc(50%) center, red calc(10%), red calc(100%), calc(50%), cyan)' ,
533
+ ] ,
534
+ ] . forEach ( ( [ input , expected ] ) => expect ( parsers . parseGradient ( input ) ) . toBe ( expected ) ) ;
535
+ } ) ;
536
+ } ) ;
334
537
describe ( 'dashedToCamelCase' , ( ) => {
335
538
it . todo ( 'test' ) ;
336
539
} ) ;
0 commit comments