@@ -70,26 +70,29 @@ describe('parseLength', () => {
7070 expect ( parsers . parseLength ( 'calc(1px + 1px)' ) ) . toBe ( 'calc(2px)' ) ;
7171 } ) ;
7272} ) ;
73- describe ( 'parsePercent ' , ( ) => {
73+ describe ( 'parsePercentage ' , ( ) => {
7474 it ( 'returns undefined for invalid values' , ( ) => {
7575 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 ( ) ) ;
7777 } ) ;
7878 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%' ) ;
8282 } ) ;
8383 it ( 'parses percent with missing leading 0' , ( ) => {
84- expect ( parsers . parsePercent ( '.1%' ) ) . toBe ( '0.1%' ) ;
84+ expect ( parsers . parsePercentage ( '.1%' ) ) . toBe ( '0.1%' ) ;
8585 } ) ;
8686 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%' ) ;
8888 } ) ;
8989 it ( 'works with calc' , ( ) => {
90- expect ( parsers . parsePercent ( 'calc(1% + 1%)' ) ) . toBe ( 'calc(2%)' ) ;
90+ expect ( parsers . parsePercentage ( 'calc(1% + 1%)' ) ) . toBe ( 'calc(2%)' ) ;
9191 } ) ;
9292} ) ;
93+ describe ( 'parseLengthOrPercentage' , ( ) => {
94+ it . todo ( 'test' ) ;
95+ } ) ;
9396describe ( 'parseAlpha' , ( ) => {
9497 it ( 'returns undefined for invalid values' , ( ) => {
9598 const invalid = [ 'string' , '1%%' , '1px%' , '#1%' , 'calc(1 * 1px)' ] ;
@@ -124,9 +127,6 @@ describe('parseAlpha', () => {
124127 expect ( parsers . parseAlpha ( 'calc(0.5 + 0.5)' ) ) . toBe ( '1' ) ;
125128 } ) ;
126129} ) ;
127- describe ( 'parseMeasurement' , ( ) => {
128- it . todo ( 'test' ) ;
129- } ) ;
130130describe ( 'parseAngle' , ( ) => {
131131 it ( 'returns undefined for invalid values' , ( ) => {
132132 const invalid = [ 'string' , '1' , '1degg' , 'a1deg' , 'deg' , 'calc(1 * 1px)' ] ;
@@ -251,12 +251,46 @@ describe('parseCustomIdentifier', () => {
251251 expect ( parsers . parseCustomIdentifier ( 'myCustomIdentifier' ) ) . toBe ( 'myCustomIdentifier' ) ;
252252 } ) ;
253253} ) ;
254+ describe ( 'parseImage' , ( ) => {
255+ it . todo ( 'tests' ) ;
256+ } ) ;
254257describe ( 'parseUrl' , ( ) => {
255258 it . todo ( 'test' ) ;
256259} ) ;
257260describe ( 'parseString' , ( ) => {
258261 it . todo ( 'test' ) ;
259262} ) ;
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+ } ) ;
260294describe ( 'parseColor' , ( ) => {
261295 it ( 'returns undefined for invalid values' , ( ) => {
262296 const invalid = [
@@ -331,6 +365,175 @@ describe('parseColor', () => {
331365 ) ;
332366 } ) ;
333367} ) ;
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+ } ) ;
334537describe ( 'dashedToCamelCase' , ( ) => {
335538 it . todo ( 'test' ) ;
336539} ) ;
0 commit comments