use tidos::{view, Component, Page};
#[test]
fn a_simple_toggle_attribute() {
assert_eq!(
&view! {
<input type="radio" name="day" value="monday" checked />
},
r#"<input type="radio" name="day" value="monday" checked />"#
);
assert_eq!(
&view! {
<input type="radio" name="day" value="monday" :checked={ true } />
},
r#"<input type="radio" name="day" value="monday" checked />"#
);
assert_eq!(
&view! {
<input type="radio" name="day" value="monday" :checked={ false } />
},
r#"<input type="radio" name="day" value="monday" />"#
);
}
#[test]
fn a_simple_toggle_attribute_reordered() {
assert_eq!(
&view! {
<input :checked={true} type="radio" name="day" value="monday" />
},
r#"<input type="radio" name="day" value="monday" checked />"#
);
}
#[test]
fn toggle_attribute_implicit_variable_name() {
let checked = true;
assert_eq!(
&view! {
<input type="radio" name="day" value="monday" :checked />
},
r#"<input type="radio" name="day" value="monday" checked />"#
);
let checked = false;
assert_eq!(
&view! {
<input type="radio" name="day" value="monday" :checked />
},
r#"<input type="radio" name="day" value="monday" />"#
);
}
#[test]
fn missing_variable_defined_toggle() {
let t = trybuild::TestCases::new();
t.compile_fail("tests/attributes/panics/missing_variable_defined_toggle.rs");
}
#[test]
fn invalid_toggle_value() {
let t = trybuild::TestCases::new();
t.compile_fail("tests/attributes/panics/invalid_toggle_value.rs");
}
#[test]
fn attribute_value_without_delimiters() {
let t = trybuild::TestCases::new();
t.compile_fail("tests/attributes/panics/attribute_value_without_delimiters.rs");
}
#[test]
fn data_attribute() {
assert_eq!(
&view! {
<input type="radio" name="day" value="monday" data-tidos={ String::from("css-420")} />
},
r#"<input type="radio" name="day" value="monday" data-tidos="css-420" />"#
);
}
#[test]
fn custom_element_all_attribute_styles() {
let active = true;
let label = String::from("hello");
assert_eq!(
&view! {
<my-widget
class="wrapper"
data-id={ label }
disabled
:active={ true }
:active
/>
},
r#"<my-widget class="wrapper" disabled data-id="hello" active active />"#
);
}
#[cfg(not(feature = "i18n"))]
#[test]
fn struct_component_all_prop_styles() {
struct Widget {
pub class: &'static str, pub label: String, pub disabled: bool, pub active: bool, pub visible: bool, }
impl Component for Widget {
fn to_render(&self, _page: &mut Page) -> String {
format!(
"class={} label={} disabled={} active={} visible={}",
self.class, self.label, self.disabled, self.active, self.visible,
)
}
}
let visible = true;
let mut page_output = Page::new();
let page = &mut page_output;
let result = view! {
<Widget
class="wrapper"
label={ String::from("hello") }
disabled
:active={ true }
:visible
/>
};
assert_eq!(
result,
"class=wrapper label=hello disabled=true active=true visible=true"
);
}
#[cfg(not(feature = "i18n"))]
#[test]
fn struct_component_default() {
#[derive(Default)]
struct Coordinate {
pub x: usize,
pub y: usize,
}
impl Component for Coordinate {
fn to_render(&self, _page: &mut Page) -> String {
view! {
<span>{self.x.to_string()}</span><span>{self.y.to_string()}</span>
}
}
}
let visible = true;
let mut page_output = Page::new();
let page = &mut page_output;
let result = view! {
<Coordinate
x={1}
..
/>
};
assert_eq!(result, "<span>1</span><span>0</span>");
}
#[test]
fn default_flag_on_native_element() {
let t = trybuild::TestCases::new();
t.compile_fail("tests/attributes/panics/default_flag_on_native_element.rs");
}