use unicode_width::UnicodeWidthChar;
use super::*;
+#[cfg(test)]
+mod tests;
+
/// Finds all newlines, multi-byte characters, and non-narrow characters in a
/// SourceFile.
///
i - scan_len
}
-
-
-
-macro_rules! test {
- (case: $test_name:ident,
- text: $text:expr,
- source_file_start_pos: $source_file_start_pos:expr,
- lines: $lines:expr,
- multi_byte_chars: $multi_byte_chars:expr,
- non_narrow_chars: $non_narrow_chars:expr,) => (
-
- #[test]
- fn $test_name() {
-
- let (lines, multi_byte_chars, non_narrow_chars) =
- analyze_source_file($text, BytePos($source_file_start_pos));
-
- let expected_lines: Vec<BytePos> = $lines
- .into_iter()
- .map(|pos| BytePos(pos))
- .collect();
-
- assert_eq!(lines, expected_lines);
-
- let expected_mbcs: Vec<MultiByteChar> = $multi_byte_chars
- .into_iter()
- .map(|(pos, bytes)| MultiByteChar {
- pos: BytePos(pos),
- bytes,
- })
- .collect();
-
- assert_eq!(multi_byte_chars, expected_mbcs);
-
- let expected_nncs: Vec<NonNarrowChar> = $non_narrow_chars
- .into_iter()
- .map(|(pos, width)| {
- NonNarrowChar::new(BytePos(pos), width)
- })
- .collect();
-
- assert_eq!(non_narrow_chars, expected_nncs);
- })
-}
-
-test!(
- case: empty_text,
- text: "",
- source_file_start_pos: 0,
- lines: vec![],
- multi_byte_chars: vec![],
- non_narrow_chars: vec![],
-);
-
-test!(
- case: newlines_short,
- text: "a\nc",
- source_file_start_pos: 0,
- lines: vec![0, 2],
- multi_byte_chars: vec![],
- non_narrow_chars: vec![],
-);
-
-test!(
- case: newlines_long,
- text: "012345678\nabcdef012345678\na",
- source_file_start_pos: 0,
- lines: vec![0, 10, 26],
- multi_byte_chars: vec![],
- non_narrow_chars: vec![],
-);
-
-test!(
- case: newline_and_multi_byte_char_in_same_chunk,
- text: "01234β789\nbcdef0123456789abcdef",
- source_file_start_pos: 0,
- lines: vec![0, 11],
- multi_byte_chars: vec![(5, 2)],
- non_narrow_chars: vec![],
-);
-
-test!(
- case: newline_and_control_char_in_same_chunk,
- text: "01234\u{07}6789\nbcdef0123456789abcdef",
- source_file_start_pos: 0,
- lines: vec![0, 11],
- multi_byte_chars: vec![],
- non_narrow_chars: vec![(5, 0)],
-);
-
-test!(
- case: multi_byte_char_short,
- text: "aβc",
- source_file_start_pos: 0,
- lines: vec![0],
- multi_byte_chars: vec![(1, 2)],
- non_narrow_chars: vec![],
-);
-
-test!(
- case: multi_byte_char_long,
- text: "0123456789abcΔf012345β",
- source_file_start_pos: 0,
- lines: vec![0],
- multi_byte_chars: vec![(13, 2), (22, 2)],
- non_narrow_chars: vec![],
-);
-
-test!(
- case: multi_byte_char_across_chunk_boundary,
- text: "0123456789abcdeΔ123456789abcdef01234",
- source_file_start_pos: 0,
- lines: vec![0],
- multi_byte_chars: vec![(15, 2)],
- non_narrow_chars: vec![],
-);
-
-test!(
- case: multi_byte_char_across_chunk_boundary_tail,
- text: "0123456789abcdeΔ....",
- source_file_start_pos: 0,
- lines: vec![0],
- multi_byte_chars: vec![(15, 2)],
- non_narrow_chars: vec![],
-);
-
-test!(
- case: non_narrow_short,
- text: "0\t2",
- source_file_start_pos: 0,
- lines: vec![0],
- multi_byte_chars: vec![],
- non_narrow_chars: vec![(1, 4)],
-);
-
-test!(
- case: non_narrow_long,
- text: "01\t3456789abcdef01234567\u{07}9",
- source_file_start_pos: 0,
- lines: vec![0],
- multi_byte_chars: vec![],
- non_narrow_chars: vec![(2, 4), (24, 0)],
-);
-
-test!(
- case: output_offset_all,
- text: "01\t345\n789abcΔf01234567\u{07}9\nbcΔf",
- source_file_start_pos: 1000,
- lines: vec![0 + 1000, 7 + 1000, 27 + 1000],
- multi_byte_chars: vec![(13 + 1000, 2), (29 + 1000, 2)],
- non_narrow_chars: vec![(2 + 1000, 4), (24 + 1000, 0)],
-);