Skip to main content

stylex_transform/shared/transformers/tests/
stylex_keyframes_test.rs

1#[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}