ultron-core 0.4.0

The core component of ultron editor
Documentation
use ultron_core::{BaseEditor, BaseOptions, Point2, SelectionMode};
#[test]
fn test_text_selection() {
    let raw = "Hello world";
    let mut editor: BaseEditor<()> = BaseEditor::from_str(&BaseOptions::default(), raw);
    editor.set_selection(Point2::new(0, 0), Point2::new(4, 0));
    let txt = editor.selected_text();
    assert_eq!(txt, Some("Hello".to_string()));
}

#[test]
fn test_text_selection_world() {
    let raw = "Hello world";
    let mut editor: BaseEditor<()> = BaseEditor::from_str(&BaseOptions::default(), raw);
    editor.set_selection(Point2::new(6, 0), Point2::new(10, 0));
    let txt = editor.selected_text();
    assert_eq!(txt, Some("world".to_string()));
}

#[test]
fn test_cut_text() {
    let raw = "Hello world";
    let mut editor = BaseEditor::<()>::from_str(&BaseOptions::default(), raw);
    editor.set_selection(Point2::new(0, 0), Point2::new(4, 0));
    let txt = editor.cut_selected_text();
    assert_eq!(txt, Some("Hello".to_string()));
    assert_eq!(editor.get_content(), " world");
}

#[test]
fn test_cut_text_multi_line() {
    let raw = "before text\nHello world\nafter text";
    let mut editor = BaseEditor::<()>::from_str(&BaseOptions::default(), raw);
    editor.set_selection(Point2::new(0, 1), Point2::new(4, 1));
    let txt = editor.cut_selected_text();
    assert_eq!(txt, Some("Hello".to_string()));
    assert_eq!(editor.get_content(), "before text\n world\nafter text");
}

#[test]
fn test_text_is_selected_linear() {
    let raw = "Hello world";
    let mut editor: BaseEditor<()> = BaseEditor::from_str(&BaseOptions::default(), raw);
    editor.set_selection(Point2::new(6, 0), Point2::new(10, 0));
    assert!(editor.is_selected(Point2::new(6, 0)));
    assert!(editor.is_selected(Point2::new(7, 0)));
    assert!(editor.is_selected(Point2::new(8, 0)));
    assert!(editor.is_selected(Point2::new(9, 0)));
    assert!(editor.is_selected(Point2::new(10, 0)));

    assert!(!editor.is_selected(Point2::new(5, 0)));
    assert!(!editor.is_selected(Point2::new(7, 1)));
    assert!(!editor.is_selected(Point2::new(11, 0)));
}

#[test]
fn test_text_is_selected_linear_multiline() {
    let raw = "Hello\nworld\nand you with \neveryone";
    let mut editor: BaseEditor<()> = BaseEditor::from_str(&BaseOptions::default(), raw);
    editor.set_selection(Point2::new(1, 1), Point2::new(2, 2));
    let txt = editor.selected_text();
    assert_eq!(txt, Some("orld\nand".to_string()));
    assert!(editor.is_selected(Point2::new(1, 1)));
    assert!(editor.is_selected(Point2::new(2, 1)));
    assert!(editor.is_selected(Point2::new(3, 1)));
    assert!(editor.is_selected(Point2::new(4, 1)));
    assert!(editor.is_selected(Point2::new(5, 1)));
    assert!(editor.is_selected(Point2::new(0, 2)));
    assert!(editor.is_selected(Point2::new(1, 2)));
    assert!(editor.is_selected(Point2::new(2, 2)));

    assert!(!editor.is_selected(Point2::new(3, 2)));
    assert!(!editor.is_selected(Point2::new(0, 0)));
    assert!(!editor.is_selected(Point2::new(0, 1)));
    assert!(!editor.is_selected(Point2::new(2, 0)));
    assert!(!editor.is_selected(Point2::new(3, 0)));
    assert!(!editor.is_selected(Point2::new(4, 0)));
}

#[test]
fn test_text_is_selected_block_multiline() {
    let raw = "Hello\nworld\nand you with \neveryone";
    let mut editor: BaseEditor<()> = BaseEditor::from_str(
        &BaseOptions {
            selection_mode: SelectionMode::Block,
            ..Default::default()
        },
        raw,
    );
    editor.set_selection(Point2::new(1, 1), Point2::new(2, 2));
    let txt = editor.selected_text();
    assert_eq!(txt, Some("or\nnd".to_string()));
    assert!(editor.is_selected(Point2::new(1, 1)));
    assert!(editor.is_selected(Point2::new(2, 1)));
    assert!(editor.is_selected(Point2::new(1, 2)));
    assert!(editor.is_selected(Point2::new(2, 2)));

    assert!(!editor.is_selected(Point2::new(5, 1)));
    assert!(!editor.is_selected(Point2::new(0, 2)));

    assert!(!editor.is_selected(Point2::new(3, 2)));
    assert!(!editor.is_selected(Point2::new(0, 0)));
    assert!(!editor.is_selected(Point2::new(0, 1)));
    assert!(!editor.is_selected(Point2::new(2, 0)));
    assert!(!editor.is_selected(Point2::new(3, 0)));
    assert!(!editor.is_selected(Point2::new(4, 0)));
}