diff --git a/src/tiff.rs b/src/tiff.rs index efe8ced..f7cd11e 100644 --- a/src/tiff.rs +++ b/src/tiff.rs @@ -169,4 +169,13 @@ mod tests { assert_err_pat!(parse_exif(data), Error::InvalidFormat("Unexpected next IFD")); } + + #[test] + fn unknown_field() { + let data = b"MM\0\x2a\0\0\0\x08\ + \0\x01\x01\0\xff\xff\0\0\0\x01\0\x14\0\0\0\0\0\0"; + let (v, _) = parse_exif(data).unwrap(); + assert_eq!(v.len(), 1); + assert_pat!(v[0].value, Value::Unknown(0xffff, 1, 0x140000)); + } } diff --git a/src/tmacro.rs b/src/tmacro.rs index 6a1b090..c100206 100644 --- a/src/tmacro.rs +++ b/src/tmacro.rs @@ -35,6 +35,15 @@ macro_rules! assert_ok { ) } +macro_rules! assert_pat { + ($expr:expr, $pat:pat) => ( + match $expr { + $pat => {}, + ref r => panic!("assertion failed: unexpected {:?}", r), + } + ) +} + macro_rules! assert_err_pat { ($expr:expr, $variant:pat) => ( match $expr { diff --git a/src/value.rs b/src/value.rs index 59f2830..ec85441 100644 --- a/src/value.rs +++ b/src/value.rs @@ -457,4 +457,10 @@ mod tests { fn short_oor() { parse_short::(b"\x01\x02\x03\x04", 1, 2); } + + #[test] + fn unknown() { + let (unitlen, _parser) = get_type_info::(0xffff); + assert_eq!(unitlen, 0); + } }