dtee 0.0.6

Decision table editor engine
Documentation
use super::*;
use dtee::Controller;

const WIDTH: usize = 800;
const HEIGHT: usize = 600;

#[test]
fn _0001() {
  let expected = r#"
    ┌─────────────────┐
    │AB  Order options│
    ├───┬───────────┬─┴─────╥─────────────────────╥─────────────┬───────────┐
    │ U │           │       ║    Order options    ║             │           │
    │   │ Customer  │ Order ╟──────────┬──────────╢ Description │ Reference │
    │   │   type    │ size  ║ Discount │ Priority ║             │           │
    │   ├───────────┼───────╫──────────┼──────────╫─────────────┼───────────┤
    │   │"Business",│       ║          │"Normal", ║             │           │
    │   │"Private"  │       ║          │ "High",  ║             │           │
    │   │           │       ║          │ "Low"    ║             │           │
    ╞═══╪═══════════╪═══════╬══════════╪══════════╬═════════════╪═══════════╡
    │ 1 │"Business" │  <10  ║   0.10   │ "Normal" ║ Small order │   Ref 1   │
    ├───┼───────────┼───────╫──────────┼──────────╫─────────────┼───────────┤
    │ 2 │"Business" │ >=10  ║   0.15   │  "High"  ║ Large order │   Ref 2   │
    ├───┼───────────┼───────╫──────────┼──────────╫─────────────┼───────────┤
    │ 3 │"Private"  │   -   ║   0.05   │  "Low"   ║ All orders  │   Ref 3   │
    └───┴───────────┴───────╨──────────┴──────────╨─────────────┴───────────┘
  "#;
  let mut controller = Controller::new(INPUT_0002).with_viewport(WIDTH, HEIGHT);
  assert!(controller.cursor().is_caret());
  ('A'..='B').for_each(|ch| {
    controller.insert_char(ch);
  });
  assert_eq!(expected, text(&controller));
}

#[test]
fn _0002() {
  let expected = r#"
    ┌─────────────────┐
    │  Order options  │
    ├───┬───────────┬─┴─────╥─────────────────────╥─────────────┬───────────┐
    │A U│           │       ║    Order options    ║             │           │
    │   │ Customer  │ Order ╟──────────┬──────────╢ Description │ Reference │
    │   │   type    │ size  ║ Discount │ Priority ║             │           │
    │   ├───────────┼───────╫──────────┼──────────╫─────────────┼───────────┤
    │   │"Business",│       ║          │"Normal", ║             │           │
    │   │"Private"  │       ║          │ "High",  ║             │           │
    │   │           │       ║          │ "Low"    ║             │           │
    ╞═══╪═══════════╪═══════╬══════════╪══════════╬═════════════╪═══════════╡
    │ 1 │"Business" │  <10  ║   0.10   │ "Normal" ║ Small order │   Ref 1   │
    ├───┼───────────┼───────╫──────────┼──────────╫─────────────┼───────────┤
    │ 2 │"Business" │ >=10  ║   0.15   │  "High"  ║ Large order │   Ref 2   │
    ├───┼───────────┼───────╫──────────┼──────────╫─────────────┼───────────┤
    │ 3 │"Private"  │   -   ║   0.05   │  "Low"   ║ All orders  │   Ref 3   │
    └───┴───────────┴───────╨──────────┴──────────╨─────────────┴───────────┘
  "#;
  let mut controller = Controller::new(INPUT_0002).with_viewport(WIDTH, HEIGHT);
  assert!(controller.cursor().is_caret());
  controller.cursor_move_down();
  controller.insert_char('A');
  assert_eq!(expected, text(&controller));
}

#[test]
fn _0003() {
  let expected = r#"
    ┌─────────────────┐
    │  Order options  │
    ├────┬───────────┬┴──────╥─────────────────────╥─────────────┬───────────┐
    │ U X│           │       ║    Order options    ║             │           │
    │    │ Customer  │ Order ╟──────────┬──────────╢ Description │ Reference │
    │    │   type    │ size  ║ Discount │ Priority ║             │           │
    │    ├───────────┼───────╫──────────┼──────────╫─────────────┼───────────┤
    │    │"Business",│       ║          │"Normal", ║             │           │
    │    │"Private"  │       ║          │ "High",  ║             │           │
    │    │           │       ║          │ "Low"    ║             │           │
    ╞════╪═══════════╪═══════╬══════════╪══════════╬═════════════╪═══════════╡
    │ 1  │"Business" │  <10  ║   0.10   │ "Normal" ║ Small order │   Ref 1   │
    ├────┼───────────┼───────╫──────────┼──────────╫─────────────┼───────────┤
    │ 2  │"Business" │ >=10  ║   0.15   │  "High"  ║ Large order │   Ref 2   │
    ├────┼───────────┼───────╫──────────┼──────────╫─────────────┼───────────┤
    │ 3  │"Private"  │   -   ║   0.05   │  "Low"   ║ All orders  │   Ref 3   │
    └────┴───────────┴───────╨──────────┴──────────╨─────────────┴───────────┘
  "#;
  let mut controller = Controller::new(INPUT_0002).with_viewport(WIDTH, HEIGHT);
  assert!(controller.cursor().is_caret());
  controller.cursor_move_down();
  (1..=3).for_each(|_| {
    controller.cursor_move_right();
  });
  controller.insert_char('X');
  assert_eq!(expected, text(&controller));
}

#[test]
fn _0004() {
  let expected = r#"
    ┌───────────────────────────────────────────────────────────────────────────┐
    │XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  Order options│
    ├───┬───────────┬───────╥─────────────────────╥─────────────┬───────────────┤
    │ U │           │       ║    Order options    ║             │               │
    │   │ Customer  │ Order ╟──────────┬──────────╢ Description │ Reference     │
    │   │   type    │ size  ║ Discount │ Priority ║             │               │
    │   ├───────────┼───────╫──────────┼──────────╫─────────────┼───────────────┤
    │   │"Business",│       ║          │"Normal", ║             │               │
    │   │"Private"  │       ║          │ "High",  ║             │               │
    │   │           │       ║          │ "Low"    ║             │               │
    ╞═══╪═══════════╪═══════╬══════════╪══════════╬═════════════╪═══════════════╡
    │ 1 │"Business" │  <10  ║   0.10   │ "Normal" ║ Small order │   Ref 1       │
    ├───┼───────────┼───────╫──────────┼──────────╫─────────────┼───────────────┤
    │ 2 │"Business" │ >=10  ║   0.15   │  "High"  ║ Large order │   Ref 2       │
    ├───┼───────────┼───────╫──────────┼──────────╫─────────────┼───────────────┤
    │ 3 │"Private"  │   -   ║   0.05   │  "Low"   ║ All orders  │   Ref 3       │
    └───┴───────────┴───────╨──────────┴──────────╨─────────────┴───────────────┘
  "#;
  let mut controller = Controller::new(INPUT_0002).with_viewport(WIDTH, HEIGHT);
  assert!(controller.cursor().is_caret());
  (1..=60).for_each(|_| {
    controller.insert_char('X');
  });
  assert_eq!(expected, text(&controller));
}

#[test]
fn _0005() {
  let expected = r#"
    ┌───────────────────────────────────────────────────────────────────────┐
    │XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  Order options│
    ├───┬───────────┬───────╥─────────────────────╥──────────────┬──────────┴┐
    │ U │           │       ║    Order options    ║          XXXX│           │
    │   │ Customer  │ Order ╟──────────┬──────────╢ Description  │ Reference │
    │   │   type    │ size  ║ Discount │ Priority ║              │           │
    │   ├───────────┼───────╫──────────┼──────────╫──────────────┼───────────┤
    │   │"Business",│       ║          │"Normal", ║              │           │
    │   │"Private"  │       ║          │ "High",  ║              │           │
    │   │           │       ║          │ "Low"    ║              │           │
    ╞═══╪═══════════╪═══════╬══════════╪══════════╬══════════════╪═══════════╡
    │ 1 │"Business" │  <10  ║   0.10   │ "Normal" ║ Small order  │   Ref 1   │
    ├───┼───────────┼───────╫──────────┼──────────╫──────────────┼───────────┤
    │ 2 │"Business" │ >=10  ║   0.15   │  "High"  ║ Large order  │   Ref 2   │
    ├───┼───────────┼───────╫──────────┼──────────╫──────────────┼───────────┤
    │ 3 │"Private"  │   -   ║   0.05   │  "Low"   ║ All orders   │   Ref 3   │
    └───┴───────────┴───────╨──────────┴──────────╨──────────────┴───────────┘
  "#;
  let mut controller = Controller::new(INPUT_0002).with_viewport(WIDTH, HEIGHT);
  assert!(controller.cursor().is_caret());
  (1..=56).for_each(|_| {
    controller.insert_char('X');
  });
  controller.cursor_move_down();
  (1..=4).for_each(|_| {
    controller.insert_char('X');
  });
  assert_eq!(expected, text(&controller));
}

#[test]
fn _0006() {
  let expected = r#"
    ┌─────────────────┐
    │  Order options  │
    ├───┬───────────┬─┴─────╥──────────────────────╥─────────────┬───────────┐
    │ U │           │       ║    Order options     ║             │           │
    │   │ Customer  │ Order ╟───────────┬──────────╢ Description │ Reference │
    │   │   type    │ size  ║XX Discount│ Priority ║             │           │
    │   ├───────────┼───────╫───────────┼──────────╫─────────────┼───────────┤
    │   │"Business",│       ║           │"Normal", ║             │           │
    │   │"Private"  │       ║           │ "High",  ║             │           │
    │   │           │       ║           │ "Low"    ║             │           │
    ╞═══╪═══════════╪═══════╬═══════════╪══════════╬═════════════╪═══════════╡
    │ 1 │"Business" │  <10  ║   0.10    │ "Normal" ║ Small order │   Ref 1   │
    ├───┼───────────┼───────╫───────────┼──────────╫─────────────┼───────────┤
    │ 2 │"Business" │ >=10  ║   0.15    │  "High"  ║ Large order │   Ref 2   │
    ├───┼───────────┼───────╫───────────┼──────────╫─────────────┼───────────┤
    │ 3 │"Private"  │   -   ║   0.05    │  "Low"   ║ All orders  │   Ref 3   │
    └───┴───────────┴───────╨───────────┴──────────╨─────────────┴───────────┘
  "#;
  let mut controller = Controller::new(INPUT_0002).with_viewport(WIDTH, HEIGHT);
  assert!(controller.cursor().is_caret());
  (1..=3).for_each(|_| {
    controller.cursor_move_down();
  });
  (1..=3).for_each(|_| {
    controller.cursor_move_cell_next();
  });
  (1..=2).for_each(|_| {
    controller.insert_char('X');
  });
  assert_eq!(expected, text(&controller));
}