Skip to content

Commit e1c96fe

Browse files
committed
Add test code
1 parent ad22f27 commit e1c96fe

11 files changed

Lines changed: 352 additions & 2 deletions

bun.lock

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

libs/css/src/lib.rs

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -813,4 +813,43 @@ mod tests {
813813

814814
assert_eq!(class1, class2);
815815
}
816+
817+
#[test]
818+
#[serial]
819+
fn test_keyframes_to_keyframes_name_with_filename() {
820+
reset_class_map();
821+
set_debug(false);
822+
// Test with filename to cover lines 148-151
823+
let name = keyframes_to_keyframes_name("spin", Some("test.tsx"));
824+
// Should include file number prefix
825+
assert!(name.contains("-"));
826+
827+
// Same keyframe in same file should return same name
828+
let name2 = keyframes_to_keyframes_name("spin", Some("test.tsx"));
829+
assert_eq!(name, name2);
830+
831+
// Different file should have different prefix
832+
let name3 = keyframes_to_keyframes_name("spin", Some("other.tsx"));
833+
assert_ne!(name, name3);
834+
}
835+
836+
#[test]
837+
#[serial]
838+
fn test_sheet_to_classname_with_filename() {
839+
reset_class_map();
840+
set_debug(false);
841+
// Test with filename to cover the filename branch
842+
let class1 = sheet_to_classname("background", 0, Some("red"), None, None, Some("test.tsx"));
843+
// Should include file number prefix
844+
assert!(class1.contains("-"));
845+
846+
// Same property in same file should return same classname
847+
let class2 = sheet_to_classname("background", 0, Some("red"), None, None, Some("test.tsx"));
848+
assert_eq!(class1, class2);
849+
850+
// Different file should have different prefix
851+
let class3 =
852+
sheet_to_classname("background", 0, Some("red"), None, None, Some("other.tsx"));
853+
assert_ne!(class1, class3);
854+
}
816855
}

libs/extractor/src/lib.rs

Lines changed: 164 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8342,6 +8342,170 @@ keyframes({
83428342
));
83438343
}
83448344

8345+
#[test]
8346+
#[serial]
8347+
fn test_styled_with_spread() {
8348+
reset_class_map();
8349+
// Test styled with spread element
8350+
assert_debug_snapshot!(ToBTreeSet::from(
8351+
extract(
8352+
"test.tsx",
8353+
r#"import {styled} from '@devup-ui/core'
8354+
const baseStyles = { bg: "red" };
8355+
const StyledDiv = styled.div({ ...baseStyles })
8356+
"#,
8357+
ExtractOption {
8358+
package: "@devup-ui/core".to_string(),
8359+
css_dir: "@devup-ui/core".to_string(),
8360+
single_css: false,
8361+
import_main_css: false
8362+
}
8363+
)
8364+
.unwrap()
8365+
));
8366+
}
8367+
8368+
#[test]
8369+
#[serial]
8370+
fn test_css_function_no_args() {
8371+
reset_class_map();
8372+
// Test css() with no arguments
8373+
assert_debug_snapshot!(ToBTreeSet::from(
8374+
extract(
8375+
"test.tsx",
8376+
r#"import {css} from '@devup-ui/core'
8377+
const className = css()
8378+
"#,
8379+
ExtractOption {
8380+
package: "@devup-ui/core".to_string(),
8381+
css_dir: "@devup-ui/core".to_string(),
8382+
single_css: false,
8383+
import_main_css: false
8384+
}
8385+
)
8386+
.unwrap()
8387+
));
8388+
}
8389+
8390+
#[test]
8391+
#[serial]
8392+
fn test_css_function_empty_object() {
8393+
reset_class_map();
8394+
// Test css() with empty object
8395+
assert_debug_snapshot!(ToBTreeSet::from(
8396+
extract(
8397+
"test.tsx",
8398+
r#"import {css} from '@devup-ui/core'
8399+
const className = css({})
8400+
"#,
8401+
ExtractOption {
8402+
package: "@devup-ui/core".to_string(),
8403+
css_dir: "@devup-ui/core".to_string(),
8404+
single_css: false,
8405+
import_main_css: false
8406+
}
8407+
)
8408+
.unwrap()
8409+
));
8410+
}
8411+
8412+
#[test]
8413+
#[serial]
8414+
fn test_keyframes_function() {
8415+
reset_class_map();
8416+
// Test keyframes() function
8417+
assert_debug_snapshot!(ToBTreeSet::from(
8418+
extract(
8419+
"test.tsx",
8420+
r#"import {keyframes} from '@devup-ui/core'
8421+
const spin = keyframes({
8422+
from: { transform: "rotate(0deg)" },
8423+
to: { transform: "rotate(360deg)" }
8424+
})
8425+
"#,
8426+
ExtractOption {
8427+
package: "@devup-ui/core".to_string(),
8428+
css_dir: "@devup-ui/core".to_string(),
8429+
single_css: false,
8430+
import_main_css: false
8431+
}
8432+
)
8433+
.unwrap()
8434+
));
8435+
}
8436+
8437+
#[test]
8438+
#[serial]
8439+
fn test_global_css_function() {
8440+
reset_class_map();
8441+
// Test globalCss() function
8442+
assert_debug_snapshot!(ToBTreeSet::from(
8443+
extract(
8444+
"test.tsx",
8445+
r#"import {globalCss} from '@devup-ui/core'
8446+
globalCss({
8447+
body: { margin: 0, padding: 0 }
8448+
})
8449+
"#,
8450+
ExtractOption {
8451+
package: "@devup-ui/core".to_string(),
8452+
css_dir: "@devup-ui/core".to_string(),
8453+
single_css: false,
8454+
import_main_css: false
8455+
}
8456+
)
8457+
.unwrap()
8458+
));
8459+
}
8460+
8461+
#[test]
8462+
#[serial]
8463+
fn test_conditional_styles() {
8464+
reset_class_map();
8465+
// Test conditional styles with both branches having different properties
8466+
assert_debug_snapshot!(ToBTreeSet::from(
8467+
extract(
8468+
"test.tsx",
8469+
r#"import {Box} from '@devup-ui/core'
8470+
const Component = () => {
8471+
const isActive = true;
8472+
return <Box bg={isActive ? "red" : undefined} color={isActive ? undefined : "blue"} />;
8473+
}
8474+
"#,
8475+
ExtractOption {
8476+
package: "@devup-ui/core".to_string(),
8477+
css_dir: "@devup-ui/core".to_string(),
8478+
single_css: false,
8479+
import_main_css: false
8480+
}
8481+
)
8482+
.unwrap()
8483+
));
8484+
}
8485+
8486+
#[test]
8487+
#[serial]
8488+
fn test_css_variable_reassignment() {
8489+
reset_class_map();
8490+
// Test css import reassignment
8491+
assert_debug_snapshot!(ToBTreeSet::from(
8492+
extract(
8493+
"test.tsx",
8494+
r#"import {css as cssFunction} from '@devup-ui/core'
8495+
const myCss = cssFunction;
8496+
const className = myCss({ bg: "red" })
8497+
"#,
8498+
ExtractOption {
8499+
package: "@devup-ui/core".to_string(),
8500+
css_dir: "@devup-ui/core".to_string(),
8501+
single_css: false,
8502+
import_main_css: false
8503+
}
8504+
)
8505+
.unwrap()
8506+
));
8507+
}
8508+
83458509
#[rstest]
83468510
#[case("test.tsx", "const x = 1;", "@devup-ui/react", false)] // no package string
83478511
#[case(
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
---
2+
source: libs/extractor/src/lib.rs
3+
expression: "ToBTreeSet::from(extract(\"test.tsx\",\nr#\"import {Box} from '@devup-ui/core'\nconst Component = () => {\n const isActive = true;\n return <Box bg={isActive ? \"red\" : undefined} color={isActive ? undefined : \"blue\"} />;\n}\n\"#,\nExtractOption\n{\n package: \"@devup-ui/core\".to_string(), css_dir:\n \"@devup-ui/core\".to_string(), single_css: false, import_main_css: false\n}).unwrap())"
4+
---
5+
ToBTreeSet {
6+
styles: {
7+
Static(
8+
ExtractStaticStyle {
9+
property: "background",
10+
value: "red",
11+
level: 0,
12+
selector: None,
13+
style_order: None,
14+
},
15+
),
16+
Static(
17+
ExtractStaticStyle {
18+
property: "color",
19+
value: "blue",
20+
level: 0,
21+
selector: None,
22+
style_order: None,
23+
},
24+
),
25+
},
26+
code: "import \"@devup-ui/core/devup-ui-0.css\";\nconst Component = () => {\n\tconst isActive = true;\n\treturn <div className={`${isActive ? \"a-a\" : \"\"} ${isActive ? \"\" : \"a-b\"}`} />;\n};\n",
27+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
---
2+
source: libs/extractor/src/lib.rs
3+
expression: "ToBTreeSet::from(extract(\"test.tsx\",\nr#\"import {css} from '@devup-ui/core'\nconst className = css({})\n\"#,\nExtractOption\n{\n package: \"@devup-ui/core\".to_string(), css_dir:\n \"@devup-ui/core\".to_string(), single_css: false, import_main_css: false\n}).unwrap())"
4+
---
5+
ToBTreeSet {
6+
styles: {},
7+
code: "const className = \"\";\n",
8+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
---
2+
source: libs/extractor/src/lib.rs
3+
expression: "ToBTreeSet::from(extract(\"test.tsx\",\nr#\"import {css} from '@devup-ui/core'\nconst className = css()\n\"#,\nExtractOption\n{\n package: \"@devup-ui/core\".to_string(), css_dir:\n \"@devup-ui/core\".to_string(), single_css: false, import_main_css: false\n}).unwrap())"
4+
---
5+
ToBTreeSet {
6+
styles: {},
7+
code: "const className = \"\";\n",
8+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
---
2+
source: libs/extractor/src/lib.rs
3+
expression: "ToBTreeSet::from(extract(\"test.tsx\",\nr#\"import {css as cssFunction} from '@devup-ui/core'\nconst myCss = cssFunction;\nconst className = myCss({ bg: \"red\" })\n\"#,\nExtractOption\n{\n package: \"@devup-ui/core\".to_string(), css_dir:\n \"@devup-ui/core\".to_string(), single_css: false, import_main_css: false\n}).unwrap())"
4+
---
5+
ToBTreeSet {
6+
styles: {
7+
Static(
8+
ExtractStaticStyle {
9+
property: "background",
10+
value: "red",
11+
level: 0,
12+
selector: None,
13+
style_order: None,
14+
},
15+
),
16+
},
17+
code: "import \"@devup-ui/core/devup-ui-0.css\";\nconst myCss = cssFunction;\nconst className = \"a-a\";\n",
18+
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
---
2+
source: libs/extractor/src/lib.rs
3+
expression: "ToBTreeSet::from(extract(\"test.tsx\",\nr#\"import {globalCss} from '@devup-ui/core'\nglobalCss({\n body: { margin: 0, padding: 0 }\n})\n\"#,\nExtractOption\n{\n package: \"@devup-ui/core\".to_string(), css_dir:\n \"@devup-ui/core\".to_string(), single_css: false, import_main_css: false\n}).unwrap())"
4+
---
5+
ToBTreeSet {
6+
styles: {
7+
Static(
8+
ExtractStaticStyle {
9+
property: "margin",
10+
value: "0",
11+
level: 0,
12+
selector: Some(
13+
Global(
14+
"body",
15+
"test.tsx",
16+
),
17+
),
18+
style_order: Some(
19+
0,
20+
),
21+
},
22+
),
23+
Static(
24+
ExtractStaticStyle {
25+
property: "padding",
26+
value: "0",
27+
level: 0,
28+
selector: Some(
29+
Global(
30+
"body",
31+
"test.tsx",
32+
),
33+
),
34+
style_order: Some(
35+
0,
36+
),
37+
},
38+
),
39+
},
40+
code: "import \"@devup-ui/core/devup-ui-0.css\";\n;\n",
41+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
---
2+
source: libs/extractor/src/lib.rs
3+
expression: "ToBTreeSet::from(extract(\"test.tsx\",\nr#\"import {keyframes} from '@devup-ui/core'\nconst spin = keyframes({\n from: { transform: \"rotate(0deg)\" },\n to: { transform: \"rotate(360deg)\" }\n})\n\"#,\nExtractOption\n{\n package: \"@devup-ui/core\".to_string(), css_dir:\n \"@devup-ui/core\".to_string(), single_css: false, import_main_css: false\n}).unwrap())"
4+
---
5+
ToBTreeSet {
6+
styles: {
7+
Keyframes(
8+
ExtractKeyframes {
9+
keyframes: {
10+
"from": [
11+
ExtractStaticStyle {
12+
property: "transform",
13+
value: "rotate(0)",
14+
level: 0,
15+
selector: None,
16+
style_order: None,
17+
},
18+
],
19+
"to": [
20+
ExtractStaticStyle {
21+
property: "transform",
22+
value: "rotate(360deg)",
23+
level: 0,
24+
selector: None,
25+
style_order: None,
26+
},
27+
],
28+
},
29+
},
30+
),
31+
},
32+
code: "import \"@devup-ui/core/devup-ui-0.css\";\nconst spin = \"a-a\";\n",
33+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
---
2+
source: libs/extractor/src/lib.rs
3+
expression: "ToBTreeSet::from(extract(\"test.tsx\",\nr#\"import {styled} from '@devup-ui/core'\nconst baseStyles = { bg: \"red\" };\nconst StyledDiv = styled.div({ ...baseStyles })\n\"#,\nExtractOption\n{\n package: \"@devup-ui/core\".to_string(), css_dir:\n \"@devup-ui/core\".to_string(), single_css: false, import_main_css: false\n}).unwrap())"
4+
---
5+
ToBTreeSet {
6+
styles: {},
7+
code: "const baseStyles = { bg: \"red\" };\nconst StyledDiv = ({ style, className, ...rest }) => <div {...rest} className={className} style={style} />;\n",
8+
}

0 commit comments

Comments
 (0)