1
//! Tests for the overlay stack.
2

            
3
use super::*;
4
use crate::form::Form;
5
use crate::modal::Modal;
6
use crate::widgets::EditMode;
7

            
8
2
fn a_config_set_form() -> Modal {
9
2
    Modal::Form(Form::config_set(
10
2
        crate::widgets::Editor::new(EditMode::Emacs),
11
2
        crate::widgets::Editor::new(EditMode::Emacs),
12
2
    ))
13
2
}
14

            
15
#[test]
16
1
fn empty_stack_has_no_top() {
17
1
    let stack = OverlayStack::new();
18
1
    assert!(stack.is_empty());
19
1
    assert!(stack.top().is_none());
20
1
}
21

            
22
#[test]
23
1
fn push_then_pop_yields_last_in_first_out() {
24
1
    let mut stack = OverlayStack::new();
25
1
    stack.push(Modal::Help);
26
1
    stack.push(a_config_set_form());
27
1
    let popped = stack.pop().expect("expected a modal");
28
1
    assert!(matches!(popped, Modal::Form(_)));
29
1
    assert!(matches!(stack.top(), Some(Modal::Help)));
30
1
    assert!(!stack.is_empty());
31
1
}
32

            
33
#[test]
34
1
fn pop_on_empty_returns_none() {
35
1
    let mut stack = OverlayStack::new();
36
1
    assert!(stack.pop().is_none());
37
1
}
38

            
39
#[test]
40
1
fn top_mut_allows_mutating_focus_field() {
41
1
    let mut stack = OverlayStack::new();
42
1
    stack.push(a_config_set_form());
43
1
    if let Some(Modal::Form(f)) = stack.top_mut() {
44
1
        f.focus = 1;
45
1
    }
46
1
    match stack.top() {
47
1
        Some(Modal::Form(f)) => assert_eq!(f.focus, 1),
48
        _ => panic!("expected Form modal"),
49
    }
50
1
}