use super::*;
#[test]
fn spans_validation() {
let source = "Hello, World!";
let spans = Spans::new(source);
let valid_span = &source[0..5]; assert!(spans.validate_span(valid_span));
assert_eq!(spans.span_offset(valid_span), Some(0));
assert_eq!(spans.span_line(valid_span), Some(1));
assert_eq!(spans.span_column(valid_span), Some(1));
let another_span = &source[7..12]; assert!(spans.validate_span(another_span));
assert_eq!(spans.span_offset(another_span), Some(7));
}
#[test]
fn spans_multiline() {
let source = "Line 1\nLine 2\nLine 3";
let spans = Spans::new(source);
let line2_span = &source[7..13]; assert_eq!(spans.span_line(line2_span), Some(2));
assert_eq!(spans.span_column(line2_span), Some(1));
}
#[test]
fn spans_edge_cases() {
let source = "line1\nline2\nline3";
let spans = Spans::new(source);
let line1 = &source[0..5]; let line2 = &source[6..11]; let line3 = &source[12..17];
assert!(spans.validate_span(line1));
assert!(spans.validate_span(line2));
assert!(spans.validate_span(line3));
assert!(spans.validate_span(source));
assert_eq!(spans.span_offset(line1), Some(0));
assert_eq!(spans.span_offset(line2), Some(6));
assert_eq!(spans.span_offset(line3), Some(12));
assert_eq!(spans.span_line(line1), Some(1));
assert_eq!(spans.span_line(line2), Some(2));
assert_eq!(spans.span_line(line3), Some(3));
assert_eq!(spans.span_column(line1), Some(1));
assert_eq!(spans.span_column(line2), Some(1));
assert_eq!(spans.span_column(line3), Some(1));
assert_eq!(spans.substring(0..5), Some("line1"));
assert_eq!(spans.substring(6..11), Some("line2"));
assert_eq!(spans.substring(12..17), Some("line3"));
assert_eq!(spans.substring(0..source.len()), Some(source));
assert_eq!(spans.substring(0..100), None);
}