line_ui/
lib.rs

1#![doc = include_str!("../README.md")]
2#![warn(missing_docs)]
3
4pub mod element;
5mod render;
6mod style;
7
8pub use render::Renderer;
9pub use style::*;
10
11#[cfg(test)]
12mod tests {
13    use std::io;
14
15    use crate::element::IntoElement;
16
17    use super::*;
18
19    #[test]
20    fn with_style() -> io::Result<()> {
21        let mut r = Renderer::new(vec![]);
22        r.reset()?
23            .render((
24                "one".into_element(),
25                "two".with_style(Style::fg(4).with(Style::bg(5))),
26                "three".into_element(),
27            ))?
28            .finish()?;
29        assert_eq!(
30            r.writer,
31            b"\rone\x1b[m\x1b[38;5;4m\x1b[48;5;5mtwo\x1b[mthree\x1b[m\x1b[K\x1b[?25l",
32        );
33        Ok(())
34    }
35
36    #[test]
37    fn with_styled_fixed_width() -> io::Result<()> {
38        let mut r = Renderer::new(vec![]);
39        r.reset()?
40            .render(
41                "test"
42                    .fixed_width(10)
43                    .with_style(Style::fg(42).with(Style::bg(43))),
44            )?
45            .finish()?;
46        assert_eq!(
47            r.writer,
48            b"\r\x1b[38;5;42m\x1b[48;5;43mtest\x1b[m\x1b[38;5;42m\x1b[48;5;43m      \x1b[m\x1b[K\x1b[?25l",
49        );
50        Ok(())
51    }
52}