mod bin_archive;
mod bin_archive_reader;
mod bin_archive_writer;
mod deserialization;
mod serialization;
use serialization::SerializationState;
pub use bin_archive::BinArchive;
pub use bin_archive_reader::BinArchiveReader;
pub use bin_archive_writer::BinArchiveWriter;
pub use deserialization::from_bytes;
#[cfg(test)]
mod test {
use super::*;
use std::fs::OpenOptions;
use std::io::Read;
use std::path::PathBuf;
#[test]
fn serialization_round_trip_bad_size() {
let bytes = load_test_file("ArchiveTest_BadSize.bin");
test_archive_for_error(&bytes);
}
#[test]
fn serialization_round_trip_bad_internal_pointer() {
let bytes = load_test_file("ArchiveTest_BadInternalPointer.bin");
test_archive_for_error(&bytes);
}
#[test]
fn serialization_round_trip_file_size_mismatch() {
let bytes = load_test_file("ArchiveTest_FileSizeMismatch.bin");
test_archive_for_error(&bytes);
}
#[test]
fn serialization_round_trip_mixed1() {
let bytes = load_test_file("ArchiveTest_Mixed1.bin");
test_archive_for_success(&bytes);
}
#[test]
fn serialization_round_trip_mixed2() {
let bytes = load_test_file("ArchiveTest_Mixed2.bin");
test_archive_for_success(&bytes);
}
#[test]
fn serialization_round_trip_only_text() {
let bytes = load_test_file("ArchiveTest_OnlyText.bin");
test_archive_for_success(&bytes);
}
fn test_archive_for_success(bytes: &[u8]) {
let result = from_bytes(&bytes);
assert!(result.is_ok());
let result = result.unwrap().serialize();
assert!(result.is_ok());
let result_bytes = result.unwrap();
assert_eq!(result_bytes, bytes);
}
fn test_archive_for_error(bytes: &[u8]) {
let result = from_bytes(&bytes);
assert!(result.is_err());
}
fn load_test_file(name: &str) -> Vec<u8> {
let mut test_file_path = PathBuf::from(env!("CARGO_MANIFEST_DIR"));
test_file_path.push("resources/test/");
test_file_path.push(name);
let mut file = OpenOptions::new().read(true).open(test_file_path).unwrap();
let mut file_contents: Vec<u8> = Vec::new();
file.read_to_end(&mut file_contents).unwrap();
file_contents
}
}