Add tests for Writer.

This commit is contained in:
KAMADA Ken'ichi 2017-07-04 20:56:19 +09:00
parent e8000ac50c
commit 9eb8944833
1 changed files with 128 additions and 0 deletions

View File

@ -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![