trycall 0.1.0

An utility similar to trybuild but for testing functions that takes a string as input and returns a string as output.
Documentation

An utility for testing a function that takes in a string and returns a string.

How it works

The [trycall] macro takes in a path to a directory. The directory should contain two files for each test case:

  • source - The source file with extension .txt
  • expected - The expected output file with extension .out

The [trycall] macro will then run the function on each source file and compare the output to the expected file.

The below example will run the add_one function on each source file in the tests/add_one directory (relative to the crate's root) and compare the output to the respective expected file (e.g. tests/add_one/word.txt will be compared to tests/add_one/word.out).

  • If the output does not match the expected file, the test will fail.
  • If the expected file does not exist, it will be treated as an empty string.
  • If the function panics, the test will fail.

Example

pub fn add_one(s: &str) -> String {
s.parse::<i32>()
.map(|n| (n + 1).to_string())
.unwrap()
}

#[cfg(test)]
mod tests {
#[test]
fn add_one() {
trycall::trycall!("tests/add_one").with(super::add_one);
}
}

Updating the expected output

If you want to update the expected output, you can pass in the UPDATE_EXPECT environment variable. For example:

UPDATE_EXPECT=1 cargo test

Filtering

You can filter the test cases by passing in the trycall= prefix followed by a string which will be checked against the source file name. For example, if you want to run the test on the negative_number test case, you can run any of the following commands:

cargo test -- trycall=negative_number
cargo test -- trycall=negative
cargo test -- trycall=number

You can also pass in the test case source file path directly to the [trycall] macro:

#[test]
fn add_one() {
trycall::trycall!("tests/add_one/negative_number.txt").with(super::add_one);
}