tui_lib 0.1.8

A Library to Be the base of a Tui Operation
Documentation
use crate::{
    tui_enums::{Color, ThreeBool},
    tui_terminal::TuiTerminal,
};

fn get_center(tui_terminal: &mut TuiTerminal) -> Result<(u16, u16), String> {
    let (x, y) = tui_terminal
        .get_teminal_size()
        .map_err(|error| error.to_string())?;
    return Ok((x / 2, y / 2));
}

#[test]
fn test_set_cursor_position() -> Result<(), String> {
    let mut tui_terminal = TuiTerminal::new(crate::tui_enums::TuiMode::FullScreen)
        .map_err(|_| "Unable To Create TuiTerminal")?;
    let (x, y) = get_center(&mut tui_terminal)?;
    tui_terminal.save_cursor_position();
    tui_terminal.set_cursor_position(x, y);
    let position = tui_terminal.get_cursor_position();
    tui_terminal.restore_cursor_position();
    return match position {
        Ok(coordinates) if coordinates == (x, y) => Ok(()),
        Ok(coordinates) => Err(format!("{:?} != Ok({:?})", coordinates, position)),
        Err(error) => Err(error.to_string()),
    };
}

#[test]
fn test_restore_cursor_position() -> Result<(), String> {
    let mut tui_terminal = TuiTerminal::new(crate::tui_enums::TuiMode::FullScreen)
        .map_err(|_| "Unable To Create TuiTerminal")?;
    let (x, y) = get_center(&mut tui_terminal)?;
    let position1 = tui_terminal
        .get_cursor_position()
        .map_err(|error| error.to_string())?;

    tui_terminal.save_cursor_position();
    tui_terminal.set_cursor_position(x, y);
    tui_terminal.restore_cursor_position();
    let position2 = tui_terminal
        .get_cursor_position()
        .map_err(|error| error.to_string())?;
    return if position1 == position2 {
        Ok(())
    } else {
        Err(format!("{:?} != {:?}", position1, position2))?
    };
}

#[test]
fn test_shift_cursor_next() -> Result<(), String> {
    let mut tui_terminal = TuiTerminal::new(crate::tui_enums::TuiMode::FullScreen)
        .map_err(|_| "Unable To Create TuiTerminal")?;
    let (mut x, mut y) = get_center(&mut tui_terminal)?;
    tui_terminal.save_cursor_position();
    tui_terminal.set_cursor_position(x, y);
    tui_terminal.shift_cursor(crate::tui_enums::CursorNav::Next(1));
    let position = tui_terminal.get_cursor_position();
    tui_terminal.restore_cursor_position();
    x = 1;
    y += 1;

    return match position {
        Ok(coordinates) if coordinates == (x, y) => Ok(()),
        Ok(coordinates) => Err(format!("{:?} != Ok({:?})", coordinates, position)),
        Err(error) => Err(error.to_string()),
    };
}

#[test]
fn test_shift_cursor_previous() -> Result<(), String> {
    let mut tui_terminal = TuiTerminal::new(crate::tui_enums::TuiMode::FullScreen)
        .map_err(|_| "Unable To Create TuiTerminal")?;
    let (mut x, mut y) = get_center(&mut tui_terminal)?;
    tui_terminal.save_cursor_position();
    tui_terminal.set_cursor_position(x, y);
    tui_terminal.shift_cursor(crate::tui_enums::CursorNav::Previous(1));
    let position = tui_terminal.get_cursor_position();
    tui_terminal.restore_cursor_position();
    x = 1;
    y -= 1;

    return match position {
        Ok(coordinates) if coordinates == (x, y) => Ok(()),
        Ok(coordinates) => Err(format!("{:?} != Ok({:?})", coordinates, position)),
        Err(error) => Err(error.to_string()),
    };
}

#[test]
fn test_shift_cursor_forwards() -> Result<(), String> {
    let mut tui_terminal = TuiTerminal::new(crate::tui_enums::TuiMode::FullScreen)
        .map_err(|_| "Unable To Create TuiTerminal")?;
    let (mut x, y) = get_center(&mut tui_terminal)?;
    tui_terminal.save_cursor_position();
    tui_terminal.set_cursor_position(x, y);
    tui_terminal.shift_cursor(crate::tui_enums::CursorNav::Forwards(1));
    let position = tui_terminal.get_cursor_position();
    tui_terminal.restore_cursor_position();
    x += 1;

    return match position {
        Ok(coordinates) if coordinates == (x, y) => Ok(()),
        Ok(_) => Err(format!("{:?} != Ok({:?})", position, (x, y))),
        Err(error) => Err(error.to_string()),
    };
}

#[test]
fn test_shift_cursor_backwards() -> Result<(), String> {
    let mut tui_terminal = TuiTerminal::new(crate::tui_enums::TuiMode::FullScreen)
        .map_err(|_| "Unable To Create TuiTerminal")?;
    let (mut x, y) = get_center(&mut tui_terminal)?;
    tui_terminal.save_cursor_position();
    tui_terminal.set_cursor_position(x, y);
    tui_terminal.shift_cursor(crate::tui_enums::CursorNav::Backwards(1));
    let position = tui_terminal.get_cursor_position();
    tui_terminal.restore_cursor_position();
    x -= 1;

    return match position {
        Ok(coordinates) if coordinates == (x, y) => Ok(()),
        Ok(_) => Err(format!("{:?} != Ok({:?})", position, (x, y))),
        Err(error) => Err(error.to_string()),
    };
}

#[test]
fn test_shift_cursor_up() -> Result<(), String> {
    let mut tui_terminal = TuiTerminal::new(crate::tui_enums::TuiMode::FullScreen)
        .map_err(|_| "Unable To Create TuiTerminal")?;
    let (x, mut y) = get_center(&mut tui_terminal)?;
    tui_terminal.save_cursor_position();
    tui_terminal.set_cursor_position(x, y);
    tui_terminal.shift_cursor(crate::tui_enums::CursorNav::Up(1));
    let position = tui_terminal.get_cursor_position();
    tui_terminal.restore_cursor_position();
    y -= 1;

    return match position {
        Ok(coordinates) if coordinates == (x, y) => Ok(()),
        Ok(_) => Err(format!("{:?} != Ok({:?})", position, (x, y))),
        Err(error) => Err(error.to_string()),
    };
}

#[test]
fn test_shift_cursor_down() -> Result<(), String> {
    let mut tui_terminal = TuiTerminal::new(crate::tui_enums::TuiMode::FullScreen)
        .map_err(|_| "Unable to Create Tui Terminal")?;
    let (x, mut y) = get_center(&mut tui_terminal)?;
    tui_terminal.save_cursor_position();
    tui_terminal.set_cursor_position(x, y);
    tui_terminal.shift_cursor(crate::tui_enums::CursorNav::Down(1));
    let position = tui_terminal.get_cursor_position();
    tui_terminal.restore_cursor_position();
    y += 1;

    return match position {
        Ok(coordinates) if coordinates == (x, y) => Ok(()),
        Ok(_) => Err(format!("{:?} != Ok({:?})", position, (x, y))),
        Err(error) => Err(error.to_string()),
    };
}

#[test]
fn test_scroll_up() -> Result<(), String> {
    let mut tui_terminal = TuiTerminal::new(crate::tui_enums::TuiMode::FullScreen)
        .map_err(|_| "Unable to Create Tui Terminal")?;
    let (x, mut y) = get_center(&mut tui_terminal)?;
    tui_terminal.save_cursor_position();
    tui_terminal.set_cursor_position(x, y);
    tui_terminal.scroll_terminal(crate::tui_enums::Scroll::Up(1));
    let position = tui_terminal.get_cursor_position();
    tui_terminal.restore_cursor_position();
    y -= 1;
    tui_terminal.restore_cursor_position();
    return match position {
        Ok(coordinates) if coordinates == (x, y) => Ok(()),
        Ok(_) => Err(format!("{:?} != Ok({:?}", position, (x, y))),
        Err(error) => Err(error.to_string())
    };
}

#[test]
fn test_scroll_down() -> Result<(), String> {
    let mut tui_terminal = TuiTerminal::new(crate::tui_enums::TuiMode::FullScreen)
        .map_err(|_| "Unable to Create Tui Terminal")?;
    let (x, mut y) = get_center(&mut tui_terminal)?;
    tui_terminal.save_cursor_position();
    tui_terminal.set_cursor_position(x, y);
    tui_terminal.scroll_terminal(crate::tui_enums::Scroll::Down(1));
    let position = tui_terminal.get_cursor_position();
    tui_terminal.restore_cursor_position();
    y += 1;
    return match position {
        Ok(coordinates) if coordinates == (x, y) => Ok(()),
        Ok(_) => Err(format!("{:?} != Ok({:?}", position, (x, y))),
        Err(error) => Err(error.to_string())
    };
}

#[test]
fn test_font_settings_restore() -> Result<(), String> {
    let mut tui_terminal = TuiTerminal::new(crate::tui_enums::TuiMode::FullScreen)
        .map_err(|_| "Unable to Create Tui Terminal")?;
    let font_settings1 = tui_terminal.get_font_settings();
    tui_terminal.set_font_color(Color::RGB(255, 41, 144));
    tui_terminal.set_background_color(Color::BrightMagenta);
    tui_terminal.set_inverted(ThreeBool::True);
    tui_terminal.set_font_settings(font_settings1.clone());
    let font_settings2 = tui_terminal.get_font_settings();
    if font_settings2 != tui_terminal.get_font_settings() {
        Err(format!("{:?} != {:?}", font_settings1, font_settings2))?;
    }
    Ok(())
}