Add tests for Writer.
This commit is contained in:
parent
e8000ac50c
commit
9eb8944833
128
src/writer.rs
128
src/writer.rs
|
@ -538,9 +538,137 @@ fn get_offset<W>(w: &mut W)
|
|||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use std::io::Cursor;
|
||||
use value::{Rational, SRational};
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn primary() {
|
||||
let image_desc = Field {
|
||||
tag: tag::ImageDescription,
|
||||
thumbnail: false,
|
||||
value: Value::Ascii(vec![b"Sample"]),
|
||||
};
|
||||
let mut writer = Writer::new();
|
||||
let mut buf = Cursor::new(Vec::new());
|
||||
writer.push_field(&image_desc);
|
||||
writer.write(&mut buf, false).unwrap();
|
||||
let expected: &[u8] =
|
||||
b"\x4d\x4d\x00\x2a\x00\x00\x00\x08\
|
||||
\x00\x01\x01\x0e\x00\x02\x00\x00\x00\x07\x00\x00\x00\x1a\
|
||||
\x00\x00\x00\x00\
|
||||
Sample\0";
|
||||
assert_eq!(buf.into_inner(), expected);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn primary_exif_only() {
|
||||
let exif_ver = Field {
|
||||
tag: tag::ExifVersion,
|
||||
thumbnail: false,
|
||||
value: Value::Undefined(b"0231"),
|
||||
};
|
||||
let mut writer = Writer::new();
|
||||
let mut buf = Cursor::new(Vec::new());
|
||||
writer.push_field(&exif_ver);
|
||||
writer.write(&mut buf, false).unwrap();
|
||||
let expected: &[u8] =
|
||||
b"\x4d\x4d\x00\x2a\x00\x00\x00\x08\
|
||||
\x00\x01\x87\x69\x00\x04\x00\x00\x00\x01\x00\x00\x00\x1a\
|
||||
\x00\x00\x00\x00\
|
||||
\x00\x01\x90\x00\x00\x07\x00\x00\x00\x040231\
|
||||
\x00\x00\x00\x00";
|
||||
assert_eq!(buf.into_inner(), expected);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn thumbnail_jpeg() {
|
||||
// This is not a valid JPEG data (only for testing).
|
||||
let jpeg = b"JPEG";
|
||||
let mut writer = Writer::new();
|
||||
let mut buf = Cursor::new(Vec::new());
|
||||
writer.set_thumbnail_jpeg(jpeg);
|
||||
writer.write(&mut buf, false).unwrap();
|
||||
let expected: &[u8] =
|
||||
b"\x4d\x4d\x00\x2a\x00\x00\x00\x08\
|
||||
\x00\x00\x00\x00\x00\x0e\
|
||||
\x00\x02\x02\x01\x00\x04\x00\x00\x00\x01\x00\x00\x00\x2c\
|
||||
\x02\x02\x00\x04\x00\x00\x00\x01\x00\x00\x00\x04\
|
||||
\x00\x00\x00\x00\
|
||||
JPEG";
|
||||
assert_eq!(buf.into_inner(), expected);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn thumbnail_tiff() {
|
||||
// This is not a valid TIFF strip (only for testing).
|
||||
let strips: &[&[u8]] = &[b"STRIP"];
|
||||
let mut writer = Writer::new();
|
||||
let mut buf = Cursor::new(Vec::new());
|
||||
writer.set_thumbnail_strips(strips);
|
||||
writer.write(&mut buf, false).unwrap();
|
||||
let expected: &[u8] =
|
||||
b"\x4d\x4d\x00\x2a\x00\x00\x00\x08\
|
||||
\x00\x00\x00\x00\x00\x0e\
|
||||
\x00\x02\x01\x11\x00\x04\x00\x00\x00\x01\x00\x00\x00\x2c\
|
||||
\x01\x17\x00\x04\x00\x00\x00\x01\x00\x00\x00\x05\
|
||||
\x00\x00\x00\x00\
|
||||
STRIP";
|
||||
assert_eq!(buf.into_inner(), expected);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn primary_and_thumbnail() {
|
||||
let image_desc = Field {
|
||||
tag: tag::ImageDescription,
|
||||
thumbnail: false,
|
||||
value: Value::Ascii(vec![b"Sample"]),
|
||||
};
|
||||
let exif_ver = Field {
|
||||
tag: tag::ExifVersion,
|
||||
thumbnail: false,
|
||||
value: Value::Undefined(b"0231"),
|
||||
};
|
||||
let gps_ver = Field {
|
||||
tag: tag::GPSVersionID,
|
||||
thumbnail: false,
|
||||
value: Value::Byte(vec![2, 3, 0, 0]),
|
||||
};
|
||||
let interop_index = Field {
|
||||
tag: tag::InteroperabilityIndex,
|
||||
thumbnail: false,
|
||||
value: Value::Ascii(vec![b"ABC"]),
|
||||
};
|
||||
let jpeg = b"JPEG";
|
||||
let mut writer = Writer::new();
|
||||
let mut buf = Cursor::new(Vec::new());
|
||||
writer.push_field(&image_desc);
|
||||
writer.push_field(&exif_ver);
|
||||
writer.push_field(&gps_ver);
|
||||
writer.push_field(&interop_index);
|
||||
writer.set_thumbnail_jpeg(jpeg);
|
||||
writer.write(&mut buf, false).unwrap();
|
||||
let expected: &[u8] =
|
||||
b"\x4d\x4d\x00\x2a\x00\x00\x00\x08\
|
||||
\x00\x03\x01\x0e\x00\x02\x00\x00\x00\x07\x00\x00\x00\x74\
|
||||
\x87\x69\x00\x04\x00\x00\x00\x01\x00\x00\x00\x32\
|
||||
\x88\x25\x00\x04\x00\x00\x00\x01\x00\x00\x00\x50\
|
||||
\x00\x00\x00\x7c\
|
||||
\x00\x02\x90\x00\x00\x07\x00\x00\x00\x040231\
|
||||
\xa0\x05\x00\x04\x00\x00\x00\x01\x00\x00\x00\x62\
|
||||
\x00\x00\x00\x00\
|
||||
\x00\x01\x00\x00\x00\x01\x00\x00\x00\x04\x02\x03\x00\x00\
|
||||
\x00\x00\x00\x00\
|
||||
\x00\x01\x00\x01\x00\x02\x00\x00\x00\x04ABC\0\
|
||||
\x00\x00\x00\x00\
|
||||
Sample\0\0\
|
||||
\x00\x02\x02\x01\x00\x04\x00\x00\x00\x01\x00\x00\x00\x9a\
|
||||
\x02\x02\x00\x04\x00\x00\x00\x01\x00\x00\x00\x04\
|
||||
\x00\x00\x00\x00\
|
||||
JPEG";
|
||||
assert_eq!(buf.into_inner(), expected);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn compose_field_value() {
|
||||
let patterns = vec![
|
||||
|
|
Loading…
Reference in New Issue