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 {
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
.iter()
.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]
fn supports_multiple_classes_vec() {
let mut classes = vec!["class-1"];
@ -784,12 +816,12 @@ mod tests {
}
#[test]
fn filter_empty_string_classes_vec() {
let mut classes = vec![""];
classes.push("class-2");
fn filter_empty_string_classes() {
let a = html! { <div class=vec![""]></div> };
let b = 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 {
assert!(!vtag.attributes.contains_key("class"));
@ -808,6 +840,12 @@ mod tests {
} else {
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 {