Skip to content

Commit 44194b8

Browse files
committed
Add testcase
1 parent 09fb141 commit 44194b8

File tree

1 file changed

+237
-0
lines changed

1 file changed

+237
-0
lines changed

libs/extractor/src/css_utils.rs

Lines changed: 237 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -405,6 +405,243 @@ mod tests {
405405
#[case("`background-color: ${func()}`", vec![("background-color", "func()", None)])]
406406
#[case("`background-color: ${(props)=>props.b ? 'a' : 'b'}`", vec![("background-color", "((props)=>props.b ? 'a' : 'b')(rest)", None)])]
407407
#[case("`background-color: ${(props)=>props.b ? null : undefined}`", vec![("background-color", "((props)=>props.b ? null : undefined)(rest)", None)])]
408+
#[case(
409+
"`color: red; background: blue;`",
410+
vec![
411+
("color", "red", None),
412+
("background", "blue", None),
413+
]
414+
)]
415+
#[case(
416+
"`margin:0;padding:0;`",
417+
vec![
418+
("margin", "0", None),
419+
("padding", "0", None),
420+
]
421+
)]
422+
#[case(
423+
"`font-size: 16px;`",
424+
vec![
425+
("font-size", "16px", None),
426+
]
427+
)]
428+
#[case(
429+
"`border: 1px solid #000; color: #fff;`",
430+
vec![
431+
("border", "1px solid #000", None),
432+
("color", "#FFF", None),
433+
]
434+
)]
435+
#[case(
436+
"``",
437+
vec![]
438+
)]
439+
#[case(
440+
"`@media (min-width: 768px) {
441+
border: 1px solid #000;
442+
color: #fff;
443+
}`",
444+
vec![
445+
("border", "1px solid #000", Some(StyleSelector::Media {
446+
query: "(min-width:768px)".to_string(),
447+
selector: None,
448+
})),
449+
("color", "#FFF", Some(StyleSelector::Media {
450+
query: "(min-width:768px)".to_string(),
451+
selector: None,
452+
})),
453+
]
454+
)]
455+
#[case(
456+
"`@media (min-width: 768px) and (max-width: 1024px) {
457+
border: 1px solid #000;
458+
color: #fff;
459+
}
460+
461+
@media (min-width: 768px) {
462+
border: 1px solid #000;
463+
color: #fff;
464+
}`",
465+
vec![
466+
("border", "1px solid #000", Some(StyleSelector::Media {
467+
query: "(min-width:768px)and (max-width:1024px)".to_string(),
468+
selector: None,
469+
})),
470+
("color", "#FFF", Some(StyleSelector::Media {
471+
query: "(min-width:768px)and (max-width:1024px)".to_string(),
472+
selector: None,
473+
})),
474+
("border", "1px solid #000", Some(StyleSelector::Media {
475+
query: "(min-width:768px)".to_string(),
476+
selector: None,
477+
})),
478+
("color", "#FFF", Some(StyleSelector::Media {
479+
query: "(min-width:768px)".to_string(),
480+
selector: None,
481+
})),
482+
]
483+
)]
484+
#[case(
485+
"`@media (min-width: 768px) {
486+
& {
487+
border: 1px solid #fff;
488+
color: #fff;
489+
}
490+
&:hover, &:active, &:nth-child(2) {
491+
border: 1px solid #000;
492+
color: #000;
493+
}
494+
}`",
495+
vec![
496+
("border", "1px solid #FFF", Some(StyleSelector::Media {
497+
query: "(min-width:768px)".to_string(),
498+
selector: None,
499+
})),
500+
("color", "#FFF", Some(StyleSelector::Media {
501+
query: "(min-width:768px)".to_string(),
502+
selector: None,
503+
})),
504+
("border", "1px solid #000", Some(StyleSelector::Media {
505+
query: "(min-width:768px)".to_string(),
506+
selector: Some("&:hover,&:active,&:nth-child(2)".to_string()),
507+
})),
508+
("color", "#000", Some(StyleSelector::Media {
509+
query: "(min-width:768px)".to_string(),
510+
selector: Some("&:hover,&:active,&:nth-child(2)".to_string()),
511+
})),
512+
]
513+
)]
514+
#[case(
515+
"`@media (min-width: 768px) {
516+
& {
517+
border: 1px solid #fff;
518+
color: #fff;
519+
}
520+
&:hover {
521+
border: 1px solid #000;
522+
color: #000;
523+
}
524+
}`",
525+
vec![
526+
("border", "1px solid #FFF", Some(StyleSelector::Media {
527+
query: "(min-width:768px)".to_string(),
528+
selector: None,
529+
})),
530+
("color", "#FFF", Some(StyleSelector::Media {
531+
query: "(min-width:768px)".to_string(),
532+
selector: None,
533+
})),
534+
("border", "1px solid #000", Some(StyleSelector::Media {
535+
query: "(min-width:768px)".to_string(),
536+
selector: Some("&:hover".to_string()),
537+
})),
538+
("color", "#000", Some(StyleSelector::Media {
539+
query: "(min-width:768px)".to_string(),
540+
selector: Some("&:hover".to_string()),
541+
})),
542+
]
543+
)]
544+
#[case(
545+
"`@media (min-width: 768px) {
546+
& {
547+
border: 1px solid #fff;
548+
color: #fff;
549+
}
550+
&:hover {
551+
border: 1px solid #000;
552+
color: #000;
553+
}
554+
}
555+
@media (max-width: 768px) and (min-width: 480px) {
556+
& {
557+
border: 1px solid #fff;
558+
color: #fff;
559+
}
560+
&:hover {
561+
border: 1px solid #000;
562+
color: #000;
563+
}
564+
}`",
565+
vec![
566+
("border", "1px solid #FFF", Some(StyleSelector::Media {
567+
query: "(max-width:768px)and (min-width:480px)".to_string(),
568+
selector: None,
569+
})),
570+
("color", "#FFF", Some(StyleSelector::Media {
571+
query: "(max-width:768px)and (min-width:480px)".to_string(),
572+
selector: None,
573+
})),
574+
("border", "1px solid #000", Some(StyleSelector::Media {
575+
query: "(max-width:768px)and (min-width:480px)".to_string(),
576+
selector: Some("&:hover".to_string()),
577+
})),
578+
("color", "#000", Some(StyleSelector::Media {
579+
query: "(max-width:768px)and (min-width:480px)".to_string(),
580+
selector: Some("&:hover".to_string()),
581+
})),
582+
("border", "1px solid #FFF", Some(StyleSelector::Media {
583+
query: "(min-width:768px)".to_string(),
584+
selector: None,
585+
})),
586+
("color", "#FFF", Some(StyleSelector::Media {
587+
query: "(min-width:768px)".to_string(),
588+
selector: None,
589+
})),
590+
("border", "1px solid #000", Some(StyleSelector::Media {
591+
query: "(min-width:768px)".to_string(),
592+
selector: Some("&:hover".to_string()),
593+
})),
594+
("color", "#000", Some(StyleSelector::Media {
595+
query: "(min-width:768px)".to_string(),
596+
selector: Some("&:hover".to_string()),
597+
})),
598+
]
599+
)]
600+
#[case(
601+
"`@media (min-width: 768px) {
602+
& {
603+
border: 1px solid #fff;
604+
color: #fff;
605+
}
606+
}
607+
@media (max-width: 768px) and (min-width: 480px) {
608+
border: 1px solid #000;
609+
color: #000;
610+
}`",
611+
vec![
612+
("border", "1px solid #FFF", Some(StyleSelector::Media {
613+
query: "(min-width:768px)".to_string(),
614+
selector: None,
615+
})),
616+
("color", "#FFF", Some(StyleSelector::Media {
617+
query: "(min-width:768px)".to_string(),
618+
selector: None,
619+
})),
620+
("border", "1px solid #000", Some(StyleSelector::Media {
621+
query: "(max-width:768px)and (min-width:480px)".to_string(),
622+
selector: None,
623+
})),
624+
("color", "#000", Some(StyleSelector::Media {
625+
query: "(max-width:768px)and (min-width:480px)".to_string(),
626+
selector: None,
627+
})),
628+
]
629+
)]
630+
#[case(
631+
"`@media (min-width: 768px) {
632+
& {
633+
}
634+
}
635+
@media (max-width: 768px) and (min-width: 480px) {
636+
}`",
637+
vec![]
638+
)]
639+
#[case(
640+
"`ul { font-family: 'Roboto Hello', sans-serif; }`",
641+
vec![
642+
("font-family", "\"Roboto Hello\",sans-serif", Some(StyleSelector::Selector("ul".to_string()))),
643+
]
644+
)]
408645
fn test_css_to_style_literal(
409646
#[case] input: &str,
410647
#[case] expected: Vec<(&str, &str, Option<StyleSelector>)>,

0 commit comments

Comments
 (0)