use crate::{
DomElement, css,
dev::{
command::DriverDomCommand,
inspect::{DomDebugFragment, log_start, log_take},
},
dom,
};
use crate as vertigo;
#[test]
fn test_explicit_class_attribute() {
let red_css = css!("color: red;");
log_start();
let _el = dom! {
<div class="flex" tw="flex" css={red_css} />
};
let js_log = DomDebugFragment::from_log();
let el_str = js_log.to_pseudo_html();
assert_eq!(
el_str,
r#"<div class='flex' style='color: red' v-css='red_css' />"#
);
}
#[test]
fn class_and_css_merge_in_either_order() {
fn final_class(build: impl FnOnce() -> DomElement) -> String {
log_start();
let _el = build();
log_take()
.into_iter()
.rev()
.find_map(|command| match command {
DriverDomCommand::SetAttr { name, value, .. } if name.as_str() == "class" => {
Some(value)
}
_ => None,
})
.unwrap_or_default()
}
let red = css!("color: red;");
let css_first = final_class(|| {
DomElement::new("div")
.css(red.clone())
.attr("class", "flex")
});
let class_first = final_class(|| {
DomElement::new("div")
.attr("class", "flex")
.css(red.clone())
});
assert_eq!(class_first, css_first);
assert!(
class_first.starts_with("flex "),
"a class written before the css must survive the promotion, got: {class_first:?}"
);
}