use ass_editor::{EditorDocument, Position, Range};
#[test]
fn test_position_edge_cases() {
let doc = EditorDocument::from_content("Hello\nWorld\n").unwrap();
let test_positions = vec![
(0, 1, 1), (5, 1, 6), (6, 2, 1), (11, 2, 6), (12, 3, 1), ];
for (offset, expected_line, expected_col) in test_positions {
let pos = Position::new(offset);
let lc = doc.position_to_line_column(pos).unwrap();
assert_eq!(lc.line, expected_line, "offset {offset} line mismatch");
assert_eq!(lc.column, expected_col, "offset {offset} column mismatch");
}
assert!(doc.position_to_line_column(Position::new(1000)).is_err());
}
#[test]
fn test_range_validation() {
let doc = EditorDocument::from_content("Hello World").unwrap();
assert!(doc
.text_range(Range::new(Position::new(0), Position::new(5)))
.is_ok());
assert!(doc
.text_range(Range::new(Position::new(6), Position::new(11)))
.is_ok());
let normalized_range = Range::new(Position::new(10), Position::new(5));
assert!(doc.text_range(normalized_range).is_ok());
assert_eq!(normalized_range.start.offset, 5);
assert_eq!(normalized_range.end.offset, 10);
assert!(doc
.text_range(Range::new(Position::new(0), Position::new(100)))
.is_err());
assert!(doc
.text_range(Range::new(Position::new(100), Position::new(200)))
.is_err());
}