cranpose-foundation 0.1.164

Modifiers, nodes, and foundation elements for Cranpose
Documentation
use super::*;

#[test]
fn cursor_is_collapsed() {
    let cursor = TextRange::cursor(5);
    assert!(cursor.collapsed());
    assert_eq!(cursor.length(), 0);
    assert_eq!(cursor.start, 5);
    assert_eq!(cursor.end, 5);
}

#[test]
fn selection_is_not_collapsed() {
    let selection = TextRange::new(2, 7);
    assert!(!selection.collapsed());
    assert_eq!(selection.length(), 5);
}

#[test]
fn reverse_selection_length() {
    let reverse = TextRange::new(7, 2);
    assert_eq!(reverse.length(), 5);
    assert_eq!(reverse.min(), 2);
    assert_eq!(reverse.max(), 7);
}

#[test]
fn coerce_in_bounds() {
    let range = TextRange::new(5, 100);
    let coerced = range.coerce_in(10);
    assert_eq!(coerced.start, 5);
    assert_eq!(coerced.end, 10);
}

#[test]
fn contains_index() {
    let range = TextRange::new(2, 5);
    assert!(!range.contains(1));
    assert!(range.contains(2));
    assert!(range.contains(3));
    assert!(range.contains(4));
    assert!(!range.contains(5));
}

#[test]
fn safe_slice_basic() {
    let range = TextRange::new(0, 5);
    assert_eq!(range.safe_slice("Hello World"), "Hello");
}

#[test]
fn safe_slice_beyond_bounds() {
    let range = TextRange::new(0, 100);
    assert_eq!(range.safe_slice("Hello"), "Hello");
}

#[test]
fn safe_slice_unicode() {
    let text = "Hello 🌍";
    let range = TextRange::new(0, 7);
    let slice = range.safe_slice(text);
    assert!(slice == "Hello " || slice == "Hello 🌍");
}