basecoat_core/classes/
select.rs1use crate::props::select::SelectProps;
2
3pub fn select(p: &SelectProps) -> String {
8 match &p.class {
9 Some(extra) if !extra.is_empty() => format!("select {extra}"),
10 _ => "select".to_string(),
11 }
12}
13
14#[cfg(test)]
15mod tests {
16 use super::*;
17 use crate::props::select::{SelectOption, SelectProps};
18
19 #[test]
20 fn base_class() {
21 assert_eq!(select(&SelectProps::default()), "select");
22 }
23
24 #[test]
25 fn with_extra_class() {
26 let p = SelectProps {
27 class: Some("w-64".into()),
28 ..Default::default()
29 };
30 assert_eq!(select(&p), "select w-64");
31 }
32
33 #[test]
34 fn empty_extra_class_is_ignored() {
35 let p = SelectProps {
36 class: Some("".into()),
37 ..Default::default()
38 };
39 assert_eq!(select(&p), "select");
40 }
41
42 #[test]
43 fn options_constructor_is_enabled_by_default() {
44 let o = SelectOption::new("a", "Apple");
45 assert_eq!(o.value, "a");
46 assert_eq!(o.label, "Apple");
47 assert!(!o.disabled);
48 }
49
50 #[test]
51 fn options_disabled_builder() {
52 let o = SelectOption::new("b", "Banana").disabled();
53 assert!(o.disabled);
54 }
55}