ree-cli 0.1.0

A fast terminal reset for macOS and Linux
Documentation
use super::*;

#[test]
fn repairs_input_modes() {
    let removed = InputModes::IGNBRK
        | InputModes::PARMRK
        | InputModes::INPCK
        | InputModes::ISTRIP
        | InputModes::INLCR
        | InputModes::IGNCR
        | InputModes::IXOFF
        | InputModes::IXANY;
    let required = InputModes::BRKINT
        | InputModes::IGNPAR
        | InputModes::ICRNL
        | InputModes::IXON
        | InputModes::IMAXBEL;
    let mut modes = removed;

    repair_input_modes(&mut modes);

    assert!(!modes.intersects(removed));
    assert!(modes.contains(required));
}

#[test]
fn repairs_output_modes() {
    let removed = OutputModes::OCRNL | OutputModes::ONOCR | OutputModes::ONLRET;
    let required = OutputModes::OPOST | OutputModes::ONLCR;
    let mut modes = OutputModes::all();

    repair_output_modes(&mut modes);

    assert!(!modes.intersects(removed));
    assert!(modes.contains(required));
}

#[test]
fn repairs_control_modes() {
    let removed =
        ControlModes::PARENB | ControlModes::PARODD | ControlModes::CSTOPB | ControlModes::CLOCAL;
    let required = ControlModes::CS8 | ControlModes::CREAD;
    let mut modes = ControlModes::all();

    repair_control_modes(&mut modes);

    assert!(!modes.intersects(removed));
    assert!(modes.contains(required));
    assert_eq!(modes & ControlModes::CSIZE, ControlModes::CS8);
}

#[test]
fn repairs_local_modes() {
    let removed = LocalModes::ECHONL
        | LocalModes::NOFLSH
        | LocalModes::TOSTOP
        | LocalModes::ECHOPRT
        | LocalModes::FLUSHO
        | LocalModes::PENDIN
        | LocalModes::EXTPROC;
    let required = LocalModes::ISIG
        | LocalModes::ICANON
        | LocalModes::IEXTEN
        | LocalModes::ECHO
        | LocalModes::ECHOE
        | LocalModes::ECHOK
        | LocalModes::ECHOKE
        | LocalModes::ECHOCTL;
    let mut modes = removed;

    repair_local_modes(&mut modes);

    assert!(!modes.intersects(removed));
    assert!(modes.contains(required));
}

#[test]
fn repairs_only_disabled_control_characters() {
    let mut zero = 0;
    repair_control_character_value(&mut zero, 0o4);
    assert_eq!(zero, 0o4);

    let mut disabled = POSIX_VDISABLE;
    repair_control_character_value(&mut disabled, 0o3);
    assert_eq!(disabled, 0o3);

    let mut customized = 0o10;
    repair_control_character_value(&mut customized, 0o177);
    assert_eq!(customized, 0o10);
}