rustc/vendor/pretty_assertions
2019-04-29 16:16:11 -07:00
..
examples New upstream version 1.32.0~beta.2+dfsg1 2018-12-16 10:13:16 -08:00
src New upstream version 1.32.0~beta.2+dfsg1 2018-12-16 10:13:16 -08:00
tests New upstream version 1.32.0~beta.2+dfsg1 2018-12-16 10:13:16 -08:00
.cargo-checksum.json New upstream version 1.33.0+dfsg1 2019-04-29 16:16:11 -07:00
Cargo.toml New upstream version 1.32.0~beta.2+dfsg1 2018-12-16 10:13:16 -08:00
LICENSE-APACHE New upstream version 1.32.0~beta.2+dfsg1 2018-12-16 10:13:16 -08:00
LICENSE-MIT New upstream version 1.32.0~beta.2+dfsg1 2018-12-16 10:13:16 -08:00
README.md New upstream version 1.32.0~beta.2+dfsg1 2018-12-16 10:13:16 -08:00

Build status Latest version All downloads Downloads of latest version

Pretty Assertions

When writing tests in Rust, you'll probably use assert_eq!(a, b) a lot.

If such a test fails, it will present all the details of a and b, but you have to spot, the differences yourself, which is not always straightforward, like here:

standard assertion

Wouldn't that task be much easier with a colorful diff?

pretty assertion

Yep — and you only need one line of code to make it happen:

#[macro_use] extern crate pretty_assertions;
Show the example behind the screenshots above.
// 1. add the `pretty_assertions` dependency to `Cargo.toml`.
// 2. insert this line at the top of your crate root or integration test
#[macro_use] extern crate pretty_assertions;

fn main() {
    #[derive(Debug, PartialEq)]
    struct Foo {
        lorem: &'static str,
        ipsum: u32,
        dolor: Result<String, String>,
    }

    let x = Some(Foo { lorem: "Hello World!", ipsum: 42, dolor: Ok("hey".to_string())});
    let y = Some(Foo { lorem: "Hello Wrold!", ipsum: 42, dolor: Ok("hey ho!".to_string())});

    assert_eq!(x, y);
}

Tip

Specify it as [dev-dependencies] and it will only be used for compiling tests, examples, and benchmarks. This way the compile time of cargo build won't be affected!

In your crate root, also add #[cfg(test)] to the crate import, like this:

#[cfg(test)] // <-- not needed in examples + integration tests
#[macro_use]
extern crate pretty_assertions;

Note

  • Each example and integration test also needs #[macro_use] extern crate pretty_assertions, if you want colorful diffs there.
  • The replacement is only effective in your own crate, not in other libraries you include.
  • assert_ne is also switched to multi-line presentation, but does not show a diff.

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.