Skip to content

Commit

Permalink
Merge pull request #223 from epage/tests
Browse files Browse the repository at this point in the history
Cover more features with tests
  • Loading branch information
epage authored Apr 13, 2021
2 parents cb02353 + f36bdc8 commit da76d29
Show file tree
Hide file tree
Showing 2 changed files with 99 additions and 1 deletion.
1 change: 0 additions & 1 deletion crates/typos/src/check.rs
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,6 @@ fn process_word<'w, 's: 'w>(

/// An invalid term found in the buffer.
#[derive(Clone, Debug)]
#[non_exhaustive]
pub struct Typo<'m> {
pub byte_offset: usize,
pub typo: Cow<'m, str>,
Expand Down
99 changes: 99 additions & 0 deletions src/file.rs
Original file line number Diff line number Diff line change
Expand Up @@ -609,3 +609,102 @@ fn walk_entry(

Ok(())
}

#[cfg(test)]
mod test {
use super::*;

fn fix_simple(line: &str, corrections: Vec<(usize, &'static str, &'static str)>) -> String {
let line = line.as_bytes().to_vec();
let corrections: Vec<_> = corrections
.into_iter()
.map(|(byte_offset, typo, correction)| typos::Typo {
byte_offset,
typo: typo.into(),
corrections: typos::Status::Corrections(vec![correction.into()]),
})
.collect();
let actual = fix_buffer(line, corrections.into_iter());
String::from_utf8(actual).unwrap()
}

#[test]
fn test_fix_buffer_single() {
let actual = fix_simple("foo foo foo", vec![(4, "foo", "bar")]);
assert_eq!(actual, "foo bar foo");
}

#[test]
fn test_fix_buffer_single_grow() {
let actual = fix_simple("foo foo foo", vec![(4, "foo", "happy")]);
assert_eq!(actual, "foo happy foo");
}

#[test]
fn test_fix_buffer_single_shrink() {
let actual = fix_simple("foo foo foo", vec![(4, "foo", "if")]);
assert_eq!(actual, "foo if foo");
}

#[test]
fn test_fix_buffer_start() {
let actual = fix_simple("foo foo foo", vec![(0, "foo", "bar")]);
assert_eq!(actual, "bar foo foo");
}

#[test]
fn test_fix_buffer_end() {
let actual = fix_simple("foo foo foo", vec![(8, "foo", "bar")]);
assert_eq!(actual, "foo foo bar");
}

#[test]
fn test_fix_buffer_end_grow() {
let actual = fix_simple("foo foo foo", vec![(8, "foo", "happy")]);
assert_eq!(actual, "foo foo happy");
}

#[test]
fn test_fix_buffer_multiple() {
let actual = fix_simple(
"foo foo foo",
vec![(4, "foo", "happy"), (8, "foo", "world")],
);
assert_eq!(actual, "foo happy world");
}

#[test]
fn test_extract_line_single_line() {
let (line, offset) = extract_line(b"hello world", 6);
assert_eq!(line, b"hello world");
assert_eq!(offset, 6);
}

#[test]
fn test_extract_line_first() {
let (line, offset) = extract_line(b"1\n2\n3", 0);
assert_eq!(line, b"1");
assert_eq!(offset, 0);
}

#[test]
fn test_extract_line_middle() {
let (line, offset) = extract_line(b"1\n2\n3", 2);
assert_eq!(line, b"2");
assert_eq!(offset, 0);
}

#[test]
fn test_extract_line_end() {
let (line, offset) = extract_line(b"1\n2\n3", 4);
assert_eq!(line, b"3");
assert_eq!(offset, 0);
}

#[test]
fn test_extract_line_offset_change() {
let (line, offset) = extract_line(b"1\nhello world\n2", 8);
assert_eq!(line, b"hello world");
assert_eq!(offset, 6);
}
}

0 comments on commit da76d29

Please sign in to comment.