display/testutil/
mockable_tui.rs

1use std::io;
2
3use crossterm::style::Colors;
4
5use crate::{ColorMode, DisplayError, Size, Tui};
6
7/// Create an instance of a `DisplayError::Unexpected` error with an other IO error.
8#[must_use]
9#[inline]
10pub fn create_unexpected_error() -> DisplayError {
11	DisplayError::Unexpected(io::Error::from(io::ErrorKind::Other))
12}
13
14/// A version of the `TUI` that provides defaults for all trait methods. This can be used to create
15/// mocked versions of the `TUI` interface, without needing to define all methods provided by the
16/// interface.
17#[allow(missing_docs, clippy::missing_errors_doc)]
18pub trait MockableTui: Tui {
19	#[inline]
20	fn get_color_mode(&self) -> ColorMode {
21		ColorMode::TwoTone
22	}
23
24	#[inline]
25	fn reset(&mut self) -> Result<(), DisplayError> {
26		Ok(())
27	}
28
29	#[inline]
30	fn flush(&mut self) -> Result<(), DisplayError> {
31		Ok(())
32	}
33
34	#[inline]
35	fn print(&mut self, _s: &str) -> Result<(), DisplayError> {
36		Ok(())
37	}
38
39	#[inline]
40	fn set_color(&mut self, _colors: Colors) -> Result<(), DisplayError> {
41		Ok(())
42	}
43
44	#[inline]
45	fn set_dim(&mut self, _dim: bool) -> Result<(), DisplayError> {
46		Ok(())
47	}
48
49	#[inline]
50	fn set_underline(&mut self, _underline: bool) -> Result<(), DisplayError> {
51		Ok(())
52	}
53
54	#[inline]
55	fn set_reverse(&mut self, _reverse: bool) -> Result<(), DisplayError> {
56		Ok(())
57	}
58
59	#[inline]
60	fn get_size(&self) -> Size {
61		Size::new(100, 100)
62	}
63
64	#[inline]
65	fn move_to_column(&mut self, _x: u16) -> Result<(), DisplayError> {
66		Ok(())
67	}
68
69	#[inline]
70	fn move_next_line(&mut self) -> Result<(), DisplayError> {
71		Ok(())
72	}
73
74	#[inline]
75	fn start(&mut self) -> Result<(), DisplayError> {
76		Ok(())
77	}
78
79	#[inline]
80	fn end(&mut self) -> Result<(), DisplayError> {
81		Ok(())
82	}
83}
84
85impl<T: MockableTui> Tui for T {
86	#[inline]
87	fn get_color_mode(&self) -> ColorMode {
88		<T as MockableTui>::get_color_mode(self)
89	}
90
91	#[inline]
92	fn reset(&mut self) -> Result<(), DisplayError> {
93		<T as MockableTui>::reset(self)
94	}
95
96	#[inline]
97	fn flush(&mut self) -> Result<(), DisplayError> {
98		<T as MockableTui>::flush(self)
99	}
100
101	#[inline]
102	fn print(&mut self, s: &str) -> Result<(), DisplayError> {
103		<T as MockableTui>::print(self, s)
104	}
105
106	#[inline]
107	fn set_color(&mut self, colors: Colors) -> Result<(), DisplayError> {
108		<T as MockableTui>::set_color(self, colors)
109	}
110
111	#[inline]
112	fn set_dim(&mut self, dim: bool) -> Result<(), DisplayError> {
113		<T as MockableTui>::set_dim(self, dim)
114	}
115
116	#[inline]
117	fn set_underline(&mut self, underline: bool) -> Result<(), DisplayError> {
118		<T as MockableTui>::set_underline(self, underline)
119	}
120
121	#[inline]
122	fn set_reverse(&mut self, reverse: bool) -> Result<(), DisplayError> {
123		<T as MockableTui>::set_reverse(self, reverse)
124	}
125
126	#[inline]
127	fn get_size(&self) -> Size {
128		<T as MockableTui>::get_size(self)
129	}
130
131	#[inline]
132	fn move_to_column(&mut self, x: u16) -> Result<(), DisplayError> {
133		<T as MockableTui>::move_to_column(self, x)
134	}
135
136	#[inline]
137	fn move_next_line(&mut self) -> Result<(), DisplayError> {
138		<T as MockableTui>::move_next_line(self)
139	}
140
141	#[inline]
142	fn start(&mut self) -> Result<(), DisplayError> {
143		<T as MockableTui>::start(self)
144	}
145
146	#[inline]
147	fn end(&mut self) -> Result<(), DisplayError> {
148		<T as MockableTui>::end(self)
149	}
150}