add unit tests for writing quest bin/dat/qst to files
This commit is contained in:
parent
142b03a39b
commit
36309879ce
|
@ -1,5 +1,5 @@
|
||||||
use std::fs::File;
|
use std::fs::File;
|
||||||
use std::io::{BufReader, Cursor, Read};
|
use std::io::{BufReader, Cursor, Read, Write};
|
||||||
use std::path::Path;
|
use std::path::Path;
|
||||||
|
|
||||||
use byteorder::{LittleEndian, ReadBytesExt, WriteBytesExt};
|
use byteorder::{LittleEndian, ReadBytesExt, WriteBytesExt};
|
||||||
|
@ -264,6 +264,19 @@ impl QuestBin {
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn to_compressed_file(&self, path: &Path) -> Result<(), QuestBinError> {
|
||||||
|
let compressed_bytes = self.to_compressed_bytes()?;
|
||||||
|
let mut file = File::create(path)?;
|
||||||
|
file.write_all(compressed_bytes.as_ref())?;
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn to_uncompressed_file(&self, path: &Path) -> Result<(), QuestBinError> {
|
||||||
|
let mut file = File::create(path)?;
|
||||||
|
self.write_uncompressed_bytes(&mut file)?;
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
pub fn to_uncompressed_bytes(&self) -> Result<Box<[u8]>, QuestBinError> {
|
pub fn to_uncompressed_bytes(&self) -> Result<Box<[u8]>, QuestBinError> {
|
||||||
let mut buffer = Cursor::new(Vec::<u8>::new());
|
let mut buffer = Cursor::new(Vec::<u8>::new());
|
||||||
self.write_uncompressed_bytes(&mut buffer)?;
|
self.write_uncompressed_bytes(&mut buffer)?;
|
||||||
|
@ -284,6 +297,8 @@ impl QuestBin {
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
pub mod tests {
|
pub mod tests {
|
||||||
|
use tempfile::TempDir;
|
||||||
|
|
||||||
use super::*;
|
use super::*;
|
||||||
|
|
||||||
pub fn validate_quest_58_bin(bin: &QuestBin) {
|
pub fn validate_quest_58_bin(bin: &QuestBin) {
|
||||||
|
@ -340,6 +355,18 @@ pub mod tests {
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
pub fn write_compressed_quest_58_bin() -> Result<(), QuestBinError> {
|
||||||
|
let data = include_bytes!("../../test-assets/q058-ret-gc.bin");
|
||||||
|
let bin = QuestBin::from_compressed_bytes(data)?;
|
||||||
|
let tmp_dir = TempDir::new()?;
|
||||||
|
let bin_path = tmp_dir.path().join("quest58.bin");
|
||||||
|
bin.to_compressed_file(&bin_path)?;
|
||||||
|
let bin = QuestBin::from_compressed_file(&bin_path)?;
|
||||||
|
validate_quest_58_bin(&bin);
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
pub fn read_uncompressed_quest_58_bin() -> Result<(), QuestBinError> {
|
pub fn read_uncompressed_quest_58_bin() -> Result<(), QuestBinError> {
|
||||||
let path = Path::new("test-assets/q058-ret-gc.uncompressed.bin");
|
let path = Path::new("test-assets/q058-ret-gc.uncompressed.bin");
|
||||||
|
@ -348,6 +375,18 @@ pub mod tests {
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
pub fn write_uncompressed_quest_58_bin() -> Result<(), QuestBinError> {
|
||||||
|
let data = include_bytes!("../../test-assets/q058-ret-gc.bin");
|
||||||
|
let bin = QuestBin::from_compressed_bytes(data)?;
|
||||||
|
let tmp_dir = TempDir::new()?;
|
||||||
|
let bin_path = tmp_dir.path().join("quest58.bin");
|
||||||
|
bin.to_uncompressed_file(&bin_path)?;
|
||||||
|
let bin = QuestBin::from_uncompressed_file(&bin_path)?;
|
||||||
|
validate_quest_58_bin(&bin);
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
pub fn read_compressed_quest_118_bin() -> Result<(), QuestBinError> {
|
pub fn read_compressed_quest_118_bin() -> Result<(), QuestBinError> {
|
||||||
let path = Path::new("test-assets/q118-vr-gc.bin");
|
let path = Path::new("test-assets/q118-vr-gc.bin");
|
||||||
|
@ -356,6 +395,18 @@ pub mod tests {
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
pub fn write_compressed_quest_118_bin() -> Result<(), QuestBinError> {
|
||||||
|
let data = include_bytes!("../../test-assets/q118-vr-gc.bin");
|
||||||
|
let bin = QuestBin::from_compressed_bytes(data)?;
|
||||||
|
let tmp_dir = TempDir::new()?;
|
||||||
|
let bin_path = tmp_dir.path().join("quest118.bin");
|
||||||
|
bin.to_compressed_file(&bin_path)?;
|
||||||
|
let bin = QuestBin::from_compressed_file(&bin_path)?;
|
||||||
|
validate_quest_118_bin(&bin);
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
pub fn read_uncompressed_quest_118_bin() -> Result<(), QuestBinError> {
|
pub fn read_uncompressed_quest_118_bin() -> Result<(), QuestBinError> {
|
||||||
let path = Path::new("test-assets/q118-vr-gc.uncompressed.bin");
|
let path = Path::new("test-assets/q118-vr-gc.uncompressed.bin");
|
||||||
|
@ -363,4 +414,16 @@ pub mod tests {
|
||||||
validate_quest_118_bin(&bin);
|
validate_quest_118_bin(&bin);
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
pub fn write_uncompressed_quest_118_bin() -> Result<(), QuestBinError> {
|
||||||
|
let data = include_bytes!("../../test-assets/q118-vr-gc.bin");
|
||||||
|
let bin = QuestBin::from_compressed_bytes(data)?;
|
||||||
|
let tmp_dir = TempDir::new()?;
|
||||||
|
let bin_path = tmp_dir.path().join("quest118.bin");
|
||||||
|
bin.to_uncompressed_file(&bin_path)?;
|
||||||
|
let bin = QuestBin::from_uncompressed_file(&bin_path)?;
|
||||||
|
validate_quest_118_bin(&bin);
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
use std::fmt::{Display, Formatter};
|
use std::fmt::{Display, Formatter};
|
||||||
use std::fs::File;
|
use std::fs::File;
|
||||||
use std::io::{BufReader, Cursor, Read};
|
use std::io::{BufReader, Cursor, Read, Write};
|
||||||
use std::path::Path;
|
use std::path::Path;
|
||||||
|
|
||||||
use byteorder::{LittleEndian, ReadBytesExt, WriteBytesExt};
|
use byteorder::{LittleEndian, ReadBytesExt, WriteBytesExt};
|
||||||
|
@ -255,6 +255,19 @@ impl QuestDat {
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn to_compressed_file(&self, path: &Path) -> Result<(), QuestDatError> {
|
||||||
|
let compressed_bytes = self.to_compressed_bytes()?;
|
||||||
|
let mut file = File::create(path)?;
|
||||||
|
file.write_all(compressed_bytes.as_ref())?;
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn to_uncompressed_file(&self, path: &Path) -> Result<(), QuestDatError> {
|
||||||
|
let mut file = File::create(path)?;
|
||||||
|
self.write_uncompressed_bytes(&mut file)?;
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
pub fn to_uncompressed_bytes(&self) -> Result<Box<[u8]>, QuestDatError> {
|
pub fn to_uncompressed_bytes(&self) -> Result<Box<[u8]>, QuestDatError> {
|
||||||
let mut buffer = Cursor::new(Vec::<u8>::new());
|
let mut buffer = Cursor::new(Vec::<u8>::new());
|
||||||
self.write_uncompressed_bytes(&mut buffer)?;
|
self.write_uncompressed_bytes(&mut buffer)?;
|
||||||
|
@ -276,6 +289,8 @@ impl QuestDat {
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
pub mod tests {
|
pub mod tests {
|
||||||
|
use tempfile::TempDir;
|
||||||
|
|
||||||
use super::*;
|
use super::*;
|
||||||
|
|
||||||
pub fn validate_quest_58_dat(dat: &QuestDat) {
|
pub fn validate_quest_58_dat(dat: &QuestDat) {
|
||||||
|
@ -523,6 +538,18 @@ pub mod tests {
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
pub fn write_compressed_quest_58_dat() -> Result<(), QuestDatError> {
|
||||||
|
let data = include_bytes!("../../test-assets/q058-ret-gc.dat");
|
||||||
|
let dat = QuestDat::from_compressed_bytes(data)?;
|
||||||
|
let tmp_dir = TempDir::new()?;
|
||||||
|
let dat_path = tmp_dir.path().join("quest58.dat");
|
||||||
|
dat.to_compressed_file(&dat_path)?;
|
||||||
|
let dat = QuestDat::from_compressed_file(&dat_path)?;
|
||||||
|
validate_quest_58_dat(&dat);
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
pub fn read_uncompressed_quest_58_dat() -> Result<(), QuestDatError> {
|
pub fn read_uncompressed_quest_58_dat() -> Result<(), QuestDatError> {
|
||||||
let path = Path::new("test-assets/q058-ret-gc.uncompressed.dat");
|
let path = Path::new("test-assets/q058-ret-gc.uncompressed.dat");
|
||||||
|
@ -531,6 +558,18 @@ pub mod tests {
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
pub fn write_uncompressed_quest_58_dat() -> Result<(), QuestDatError> {
|
||||||
|
let data = include_bytes!("../../test-assets/q058-ret-gc.dat");
|
||||||
|
let dat = QuestDat::from_compressed_bytes(data)?;
|
||||||
|
let tmp_dir = TempDir::new()?;
|
||||||
|
let dat_path = tmp_dir.path().join("quest58.dat");
|
||||||
|
dat.to_uncompressed_file(&dat_path)?;
|
||||||
|
let dat = QuestDat::from_uncompressed_file(&dat_path)?;
|
||||||
|
validate_quest_58_dat(&dat);
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
pub fn read_compressed_quest_118_dat() -> Result<(), QuestDatError> {
|
pub fn read_compressed_quest_118_dat() -> Result<(), QuestDatError> {
|
||||||
let path = Path::new("test-assets/q118-vr-gc.dat");
|
let path = Path::new("test-assets/q118-vr-gc.dat");
|
||||||
|
@ -539,6 +578,18 @@ pub mod tests {
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
pub fn write_compressed_quest_118_dat() -> Result<(), QuestDatError> {
|
||||||
|
let data = include_bytes!("../../test-assets/q118-vr-gc.dat");
|
||||||
|
let dat = QuestDat::from_compressed_bytes(data)?;
|
||||||
|
let tmp_dir = TempDir::new()?;
|
||||||
|
let dat_path = tmp_dir.path().join("quest118.dat");
|
||||||
|
dat.to_compressed_file(&dat_path)?;
|
||||||
|
let dat = QuestDat::from_compressed_file(&dat_path)?;
|
||||||
|
validate_quest_118_dat(&dat);
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
pub fn read_uncompressed_quest_118_dat() -> Result<(), QuestDatError> {
|
pub fn read_uncompressed_quest_118_dat() -> Result<(), QuestDatError> {
|
||||||
let path = Path::new("test-assets/q118-vr-gc.uncompressed.dat");
|
let path = Path::new("test-assets/q118-vr-gc.uncompressed.dat");
|
||||||
|
@ -546,4 +597,16 @@ pub mod tests {
|
||||||
validate_quest_118_dat(&dat);
|
validate_quest_118_dat(&dat);
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
pub fn write_uncompressed_quest_118_dat() -> Result<(), QuestDatError> {
|
||||||
|
let data = include_bytes!("../../test-assets/q118-vr-gc.dat");
|
||||||
|
let dat = QuestDat::from_compressed_bytes(data)?;
|
||||||
|
let tmp_dir = TempDir::new()?;
|
||||||
|
let dat_path = tmp_dir.path().join("quest118.dat");
|
||||||
|
dat.to_uncompressed_file(&dat_path)?;
|
||||||
|
let dat = QuestDat::from_uncompressed_file(&dat_path)?;
|
||||||
|
validate_quest_118_dat(&dat);
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -372,6 +372,12 @@ impl QuestQst {
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn to_file(&self, path: &Path) -> Result<(), QuestQstError> {
|
||||||
|
let mut file = File::create(path)?;
|
||||||
|
self.write_bytes(&mut file)?;
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
pub fn to_bytes(&self) -> Result<Box<[u8]>, QuestQstError> {
|
pub fn to_bytes(&self) -> Result<Box<[u8]>, QuestQstError> {
|
||||||
let mut buffer = Cursor::new(Vec::<u8>::new());
|
let mut buffer = Cursor::new(Vec::<u8>::new());
|
||||||
self.write_bytes(&mut buffer)?;
|
self.write_bytes(&mut buffer)?;
|
||||||
|
@ -405,6 +411,8 @@ impl QuestQst {
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
|
use tempfile::TempDir;
|
||||||
|
|
||||||
use crate::quest::bin::tests::{validate_quest_118_bin, validate_quest_58_bin};
|
use crate::quest::bin::tests::{validate_quest_118_bin, validate_quest_58_bin};
|
||||||
use crate::quest::dat::tests::{validate_quest_118_dat, validate_quest_58_dat};
|
use crate::quest::dat::tests::{validate_quest_118_dat, validate_quest_58_dat};
|
||||||
|
|
||||||
|
@ -543,6 +551,30 @@ mod tests {
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
pub fn write_quest_58_qst_to_file() -> Result<(), QuestQstError> {
|
||||||
|
let online_data = include_bytes!("../../test-assets/q058-ret-gc.online.qst");
|
||||||
|
let offline_data = include_bytes!("../../test-assets/q058-ret-gc.offline.qst");
|
||||||
|
|
||||||
|
let tmp_dir = TempDir::new()?;
|
||||||
|
|
||||||
|
let mut reader = Cursor::new(online_data);
|
||||||
|
let qst = QuestQst::from_bytes(&mut reader)?;
|
||||||
|
let qst_path = tmp_dir.path().join("quest58.online.qst");
|
||||||
|
qst.to_file(&qst_path)?;
|
||||||
|
let qst = QuestQst::from_file(&qst_path)?;
|
||||||
|
validate_quest_58_qst(&qst, 1438, 15097, true)?;
|
||||||
|
|
||||||
|
let mut reader = Cursor::new(offline_data);
|
||||||
|
let qst = QuestQst::from_bytes(&mut reader)?;
|
||||||
|
let qst_path = tmp_dir.path().join("quest58.offline.qst");
|
||||||
|
qst.to_file(&qst_path)?;
|
||||||
|
let qst = QuestQst::from_file(&qst_path)?;
|
||||||
|
validate_quest_58_qst(&qst, 1571, 15105, false)?;
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
pub fn read_quest_118_qst_from_file() -> Result<(), QuestQstError> {
|
pub fn read_quest_118_qst_from_file() -> Result<(), QuestQstError> {
|
||||||
let qst = QuestQst::from_file(Path::new("test-assets/q118-vr-gc.online.qst"))?;
|
let qst = QuestQst::from_file(Path::new("test-assets/q118-vr-gc.online.qst"))?;
|
||||||
|
@ -554,6 +586,30 @@ mod tests {
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
pub fn write_quest_118_qst_to_file() -> Result<(), QuestQstError> {
|
||||||
|
let online_data = include_bytes!("../../test-assets/q118-vr-gc.online.qst");
|
||||||
|
let offline_data = include_bytes!("../../test-assets/q118-vr-gc.offline.qst");
|
||||||
|
|
||||||
|
let tmp_dir = TempDir::new()?;
|
||||||
|
|
||||||
|
let mut reader = Cursor::new(online_data);
|
||||||
|
let qst = QuestQst::from_bytes(&mut reader)?;
|
||||||
|
let qst_path = tmp_dir.path().join("quest118.online.qst");
|
||||||
|
qst.to_file(&qst_path)?;
|
||||||
|
let qst = QuestQst::from_file(&qst_path)?;
|
||||||
|
validate_quest_118_qst(&qst, 14208, 11802, true)?;
|
||||||
|
|
||||||
|
let mut reader = Cursor::new(offline_data);
|
||||||
|
let qst = QuestQst::from_bytes(&mut reader)?;
|
||||||
|
let qst_path = tmp_dir.path().join("quest118.offline.qst");
|
||||||
|
qst.to_file(&qst_path)?;
|
||||||
|
let qst = QuestQst::from_file(&qst_path)?;
|
||||||
|
validate_quest_118_qst(&qst, 14801, 11810, false)?;
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
pub fn create_qst_from_quest_58_bindat_files() -> Result<(), QuestQstError> {
|
pub fn create_qst_from_quest_58_bindat_files() -> Result<(), QuestQstError> {
|
||||||
let mut bin = QuestBin::from_compressed_file(Path::new("test-assets/q058-ret-gc.bin"))?;
|
let mut bin = QuestBin::from_compressed_file(Path::new("test-assets/q058-ret-gc.bin"))?;
|
||||||
|
|
Loading…
Reference in a new issue