diff options
| author | Teddy Wing | 2016-04-21 14:59:17 -0400 | 
|---|---|---|
| committer | Teddy Wing | 2016-04-21 14:59:17 -0400 | 
| commit | 763d47befd80547f12525c01cc5a103d1ef5f285 (patch) | |
| tree | 7dace6cac7c907e43d48823e1a771e6be4556cee | |
| parent | 9b56cecda8fb33cb006d40d2e367bca2796c7d23 (diff) | |
| download | mutt-alias-auto-add-763d47befd80547f12525c01cc5a103d1ef5f285.tar.bz2 | |
Add test find_alias_in_file_email_already_exists
When the email of the alias we're looking is already in the file, expect
an `AliasSearchError::EmailExists` error.
Oh man, this was a tough one. After much searching, finally figured out
how to implement the `PartialEq` trait for my error type so that we
could actually test it.
Many thanks to @peterbudai for an example in the 'redux' project of how
to do this
(https://github.com/peterbudai/redux/blob/ef5d47a0a64cef9fa9e1e9c6f21badc46fa283fc/src/lib.rs):
    #[cfg(test)]
    impl PartialEq<Error> for Error {
        fn eq(&self, other: &Error) -> bool {
           match *self {
               Error::Eof => match *other { Error::Eof => true, _ => false },
               Error::InvalidInput => match *other { Error::InvalidInput => true, _ => false },
               Error::IoError(_)  => match *other { Error::IoError(_) => true, _ => false },
           }
        }
    }
With that example, I was able to correctly build an equality function to
get past my compiler errors which complained that
    an implementation of `std::cmp::PartialEq` might be missing for `std::io::error::Error`
when I tried to `#[derive(PartialEq)]` on my `AliasSearchError` type.
| -rw-r--r-- | src/main.rs | 20 | ||||
| -rw-r--r-- | src/tests.rs | 21 | 
2 files changed, 32 insertions, 9 deletions
| diff --git a/src/main.rs b/src/main.rs index aebabef..4c0cf26 100644 --- a/src/main.rs +++ b/src/main.rs @@ -97,6 +97,26 @@ impl From<io::Error> for AliasSearchError {      }  } +#[cfg(test)] +impl PartialEq<AliasSearchError> for AliasSearchError { +    fn eq(&self, other: &AliasSearchError) -> bool { +        match *self { +            AliasSearchError::NotFound => match *other { +                AliasSearchError::NotFound => true, +                _ => false, +            }, +            AliasSearchError::EmailExists => match *other { +                AliasSearchError::EmailExists => true, +                _ => false, +            }, +            AliasSearchError::Io(_) => match *other { +                AliasSearchError::Io(_) => true, +                _ => false, +            }, +        } +    } +} +  fn find_alias_in_file(alias: &Alias, file: &str) -> Result<Vec<String>, AliasSearchError> {      let mut matches = Vec::new();      let f = try!(File::open(file)); diff --git a/src/tests.rs b/src/tests.rs index ccacd29..a6f2777 100644 --- a/src/tests.rs +++ b/src/tests.rs @@ -1,4 +1,4 @@ -use super::{Alias, find_alias_in_file}; +use super::{Alias, AliasSearchError, find_alias_in_file};  #[test]  fn new_alias_with_only_email() { @@ -42,13 +42,16 @@ fn new_alias_with_special_characters() {  #[test] -fn find_alias_in_file_finds_a_match() { -    find_alias_in_file( -        &Alias { -            alias: "farnsworth-hubert".to_owned(), -            name: "Hubert Farnsworth".to_owned(), -            email: "<professor@planetexpress.com>".to_owned() -        }, -        "./testdata/aliases" +fn find_alias_in_file_email_already_exists() { +    assert_eq!( +        Err(AliasSearchError::EmailExists), +        find_alias_in_file( +            &Alias { +                alias: "farnsworth-hubert".to_owned(), +                name: "Hubert Farnsworth".to_owned(), +                email: "<professor@planetexpress.com>".to_owned() +            }, +            "./testdata/aliases" +        )      );  } | 
