stylex_transform/shared/transformers/tests/
stylex_keyframes_test.rs1#[cfg(test)]
2mod stylex_keyframes {
3 use indexmap::IndexMap;
4 use swc_core::ecma::ast::PropOrSpread;
5
6 use crate::shared::enums::data_structures::evaluate_result_value::EvaluateResultValue;
7 use crate::shared::structures::state_manager::StateManager;
8 use crate::shared::transformers::stylex_keyframes::stylex_keyframes;
9 use crate::shared::utils::ast::convertors::create_string_expr;
10 use stylex_ast::ast::factories::{
11 create_key_value_prop, create_nested_object_prop, create_object_expression,
12 };
13 use stylex_types::enums::data_structures::injectable_style::InjectableStyleKind;
14 use stylex_types::structures::injectable_style::InjectableStyle;
15
16 fn default_vars_factory(args: &[(&str, &[(&str, &str)])]) -> EvaluateResultValue {
17 let props = args
18 .iter()
19 .map(|(key, values)| {
20 let props = values
21 .iter()
22 .map(|(key, value)| create_key_value_prop(key, create_string_expr(value)))
23 .collect::<Vec<PropOrSpread>>();
24
25 create_nested_object_prop(key, props)
26 })
27 .collect::<Vec<PropOrSpread>>();
28
29 EvaluateResultValue::Expr(create_object_expression(props))
30 }
31
32 fn expected_css_result_factory(
33 injected_styles: &[(&str, (&str, f64))],
34 ) -> IndexMap<String, InjectableStyleKind> {
35 let mut expected_injected_styles = IndexMap::new();
36
37 for injected_style in injected_styles {
38 let (key, value) = injected_style;
39 expected_injected_styles.insert(
40 key.to_string(),
41 InjectableStyleKind::Regular(InjectableStyle {
42 ltr: value.0.to_string(),
43 rtl: None,
44 priority: Some(value.1),
45 }),
46 );
47 }
48 expected_injected_styles
49 }
50
51 #[test]
52 fn converts_keyframes_to_css() {
53 let keyframes = default_vars_factory(&[
54 ("from", &[("backgroundColor", "red")]),
55 ("to", &[("backgroundColor", "blue")]),
56 ]);
57
58 let (key, result) = stylex_keyframes(&keyframes, &mut StateManager::default());
59
60 let expected_result = expected_css_result_factory(&[(
61 "xbopttm-B",
62 (
63 "@keyframes xbopttm-B{from{background-color:red;}to{background-color:blue;}}",
64 0.0,
65 ),
66 )]);
67
68 assert_eq!(result, *expected_result.get(key.as_str()).unwrap())
69 }
70
71 #[test]
72 fn generates_rtl_specific_keyframes() {
73 let keyframes =
74 default_vars_factory(&[("from", &[("left", "0")]), ("to", &[("left", "500px")])]);
75
76 let (key, result) = stylex_keyframes(&keyframes, &mut StateManager::default());
77
78 let mut expected_injected_styles = IndexMap::new();
79 expected_injected_styles.insert(
80 "x1lvx8r0-B".to_string(),
81 InjectableStyleKind::Regular(InjectableStyle {
82 ltr: "@keyframes x1lvx8r0-B{from{left:0;}to{left:500px;}}".to_string(),
83 rtl: None,
84 priority: Some(0.0),
85 }),
86 );
87
88 assert_eq!(result, *expected_injected_styles.get(key.as_str()).unwrap())
89 }
90}