Add From<&[T]> for Classes (#1448)

* Add From<&[T]> for Classes

* Round out the test cases for From<&[T]> for Classes
This commit is contained in:
Alexander Krivács Schrøder 2020-07-25 23:21:13 +02:00 committed by GitHub
parent 07dcbb9982
commit bfc71626d2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 47 additions and 3 deletions

View File

@ -155,6 +155,12 @@ impl<T: AsRef<str>> From<&Option<T>> for Classes {
impl<T: AsRef<str>> From<Vec<T>> for Classes { impl<T: AsRef<str>> From<Vec<T>> for Classes {
fn from(t: Vec<T>) -> Self { fn from(t: Vec<T>) -> Self {
Classes::from(t.as_slice())
}
}
impl<T: AsRef<str>> From<&[T]> for Classes {
fn from(t: &[T]) -> Self {
let set = t let set = t
.iter() .iter()
.map(|x| x.as_ref()) .map(|x| x.as_ref())

View File

@ -750,6 +750,38 @@ mod tests {
} }
} }
#[test]
fn supports_multiple_classes_slice() {
let classes = ["class-1", "class-2"];
let a = html! {
<div class=&classes[..]></div>
};
if let VNode::VTag(vtag) = a {
assert!(get_class_str(&vtag).contains("class-1"));
assert!(get_class_str(&vtag).contains("class-2"));
assert!(!get_class_str(&vtag).contains("class-3"));
} else {
panic!("vtag expected");
}
}
#[test]
fn supports_multiple_classes_one_value_slice() {
let classes = ["class-1 class-2", "class-1"];
let a = html! {
<div class=&classes[..]></div>
};
if let VNode::VTag(vtag) = a {
assert!(get_class_str(&vtag).contains("class-1"));
assert!(get_class_str(&vtag).contains("class-2"));
assert!(!get_class_str(&vtag).contains("class-3"));
} else {
panic!("vtag expected");
}
}
#[test] #[test]
fn supports_multiple_classes_vec() { fn supports_multiple_classes_vec() {
let mut classes = vec!["class-1"]; let mut classes = vec!["class-1"];
@ -784,12 +816,12 @@ mod tests {
} }
#[test] #[test]
fn filter_empty_string_classes_vec() { fn filter_empty_string_classes() {
let mut classes = vec![""];
classes.push("class-2");
let a = html! { <div class=vec![""]></div> }; let a = html! { <div class=vec![""]></div> };
let b = html! { <div class=("")></div> }; let b = html! { <div class=("")></div> };
let c = html! { <div class=""></div> }; let c = html! { <div class=""></div> };
let d_arr = [""];
let d = html! { <div class=&d_arr[..]></div> };
if let VNode::VTag(vtag) = a { if let VNode::VTag(vtag) = a {
assert!(!vtag.attributes.contains_key("class")); assert!(!vtag.attributes.contains_key("class"));
@ -808,6 +840,12 @@ mod tests {
} else { } else {
panic!("vtag expected"); panic!("vtag expected");
} }
if let VNode::VTag(vtag) = d {
assert!(!vtag.attributes.contains_key("class"));
} else {
panic!("vtag expected");
}
} }
fn assert_vtag(node: &mut VNode) -> &mut VTag { fn assert_vtag(node: &mut VNode) -> &mut VTag {