1
//! Tests for the `Widget` enum (value, display, kind, as_text_mut).
2

            
3
use super::*;
4

            
5
#[test]
6
1
fn text_widget_value_and_display_match_buffer() {
7
1
    let ed = Editor::with_buffer(EditMode::Emacs, "hello");
8
1
    let w = Widget::Text(ed);
9
1
    assert_eq!(w.value(), "hello");
10
1
    assert_eq!(w.display(), "hello");
11
1
}
12

            
13
#[test]
14
1
fn text_widget_as_text_mut_returns_some() {
15
1
    let mut w = Widget::Text(Editor::new(EditMode::Emacs));
16
1
    assert!(w.as_text_mut().is_some());
17
1
}
18

            
19
#[test]
20
1
fn select_widget_value_is_id_display_is_label() {
21
1
    let mut sw = SelectWidget::new();
22
1
    sw.set_options(vec![
23
1
        SelectOption {
24
1
            id: "uuid-1".to_string(),
25
1
            label: "Option One".to_string(),
26
1
        },
27
1
        SelectOption {
28
1
            id: "uuid-2".to_string(),
29
1
            label: "Option Two".to_string(),
30
1
        },
31
    ]);
32
1
    let w = Widget::Select(sw);
33
1
    assert_eq!(w.value(), "uuid-1");
34
1
    assert_eq!(w.display(), "Option One");
35
1
}
36

            
37
#[test]
38
1
fn select_widget_as_text_mut_returns_none() {
39
1
    let mut w = Widget::Select(SelectWidget::new());
40
1
    assert!(w.as_text_mut().is_none());
41
1
}
42

            
43
#[test]
44
1
fn amount_widget_value_and_display_match() {
45
1
    let aw = AmountWidget::with_value(EditMode::Emacs, "100/3");
46
1
    let w = Widget::Amount(aw);
47
1
    assert_eq!(w.value(), "100/3");
48
1
    assert_eq!(w.display(), "100/3");
49
1
}
50

            
51
#[test]
52
1
fn amount_widget_as_text_mut_returns_some() {
53
1
    let mut w = Widget::Amount(AmountWidget::new(EditMode::Emacs));
54
1
    assert!(w.as_text_mut().is_some());
55
1
}
56

            
57
#[test]
58
1
fn date_widget_value_and_display_match() {
59
1
    let dw = DateWidget::with_value(EditMode::Emacs, "2024-01-01");
60
1
    let w = Widget::Date(dw);
61
1
    assert_eq!(w.value(), "2024-01-01");
62
1
    assert_eq!(w.display(), "2024-01-01");
63
1
}
64

            
65
#[test]
66
1
fn date_widget_as_text_mut_returns_some() {
67
1
    let mut w = Widget::Date(DateWidget::new(EditMode::Emacs));
68
1
    assert!(w.as_text_mut().is_some());
69
1
}
70

            
71
#[test]
72
1
fn widget_kind_discriminants() {
73
1
    assert_eq!(
74
1
        Widget::Text(Editor::new(EditMode::Emacs)).kind(),
75
        WidgetKind::Text
76
    );
77
1
    assert_eq!(
78
1
        Widget::Select(SelectWidget::new()).kind(),
79
        WidgetKind::Select
80
    );
81
1
    assert_eq!(
82
1
        Widget::Amount(AmountWidget::new(EditMode::Emacs)).kind(),
83
        WidgetKind::Amount
84
    );
85
1
    assert_eq!(
86
1
        Widget::Date(DateWidget::new(EditMode::Emacs)).kind(),
87
        WidgetKind::Date
88
    );
89
1
}
90

            
91
#[test]
92
1
fn text_as_text_mut_exposes_editor_insert() {
93
1
    let mut w = Widget::Text(Editor::new(EditMode::Emacs));
94
1
    w.as_text_mut().expect("editor").insert_char('x');
95
1
    assert_eq!(w.value(), "x");
96
1
}
97

            
98
#[test]
99
1
fn select_next_and_prev_change_value_and_display() {
100
1
    let mut sw = SelectWidget::new();
101
1
    sw.set_options(vec![
102
1
        SelectOption {
103
1
            id: "a".to_string(),
104
1
            label: "Alpha".to_string(),
105
1
        },
106
1
        SelectOption {
107
1
            id: "b".to_string(),
108
1
            label: "Beta".to_string(),
109
1
        },
110
    ]);
111
1
    let mut w = Widget::Select(sw);
112
1
    assert_eq!(w.value(), "a");
113
1
    if let Widget::Select(ref mut s) = w {
114
1
        s.next();
115
1
    }
116
1
    assert_eq!(w.value(), "b");
117
1
    assert_eq!(w.display(), "Beta");
118
1
    if let Widget::Select(ref mut s) = w {
119
1
        s.prev();
120
1
    }
121
1
    assert_eq!(w.value(), "a");
122
1
}