use std::io::Cursor;
use gvas::{
cursor_ext::{ReadExt, WriteExt},
error::Error,
};
#[test]
fn test_write_string() -> Result<(), Error> {
let mut cursor = Cursor::new(Vec::new());
cursor.write_string("test")?;
assert_eq!(
cursor.get_ref(),
&[5u8, 0u8, 0u8, 0u8, b't', b'e', b's', b't', 0u8],
);
let mut cursor = Cursor::new(Vec::new());
cursor.write_string("\u{A7}")?;
assert_eq!(
cursor.get_ref(),
&[0xfeu8, 0xffu8, 0xffu8, 0xffu8, 0xa7u8, 0u8, 0u8, 0u8],
);
Ok(())
}
#[test]
fn test_write_fstring() -> Result<(), Error> {
let mut cursor = Cursor::new(Vec::new());
cursor.write_fstring(Some("test"))?;
assert_eq!(
cursor.get_ref(),
&[5u8, 0u8, 0u8, 0u8, b't', b'e', b's', b't', 0u8],
);
let mut cursor = Cursor::new(Vec::new());
cursor.write_fstring(Some("\u{A7}"))?;
assert_eq!(
cursor.get_ref(),
&[0xfeu8, 0xffu8, 0xffu8, 0xffu8, 0xa7u8, 0u8, 0u8, 0u8],
);
let mut cursor = Cursor::new(Vec::new());
cursor.write_fstring(None)?;
assert_eq!(cursor.get_ref(), &[0u8; 4],);
Ok(())
}
#[test]
fn test_read_string() -> Result<(), Error> {
let mut cursor = Cursor::new(vec![5u8, 0u8, 0u8, 0u8, b't', b'e', b's', b't', 0u8]);
let string = cursor.read_string()?;
assert_eq!(string, "test");
let mut cursor = Cursor::new(vec![0xfeu8, 0xffu8, 0xffu8, 0xffu8, 0xa7u8, 0u8, 0u8, 0u8]);
let string = cursor.read_string()?;
assert_eq!(string, "\u{A7}");
let mut cursor = Cursor::new(vec![0u8; 4]);
let string = cursor.read_string().expect_err("Expected err").to_string();
assert_eq!(string, "Invalid string size 0 at position 0x4");
let mut cursor = Cursor::new(vec![1u8, 0u8, 0u8, 0u8, b't']);
let string = cursor.read_string().expect_err("Expected err").to_string();
assert_eq!(string, "Invalid string terminator 116 at position 0x5");
let mut cursor = Cursor::new(vec![0xffu8, 0xffu8, 0xffu8, 0xffu8, b't', b'e']);
let string = cursor.read_string().expect_err("Expected err").to_string();
assert_eq!(string, "Invalid string terminator 25972 at position 0x6");
Ok(())
}
#[test]
fn test_read_fstring() -> Result<(), Error> {
let mut cursor = Cursor::new(vec![5u8, 0u8, 0u8, 0u8, b't', b'e', b's', b't', 0u8]);
let string = cursor.read_fstring()?.expect("Expected Some");
assert_eq!(string, "test");
let mut cursor = Cursor::new(vec![0xfeu8, 0xffu8, 0xffu8, 0xffu8, 0xa7u8, 0u8, 0u8, 0u8]);
let string = cursor.read_fstring()?.expect("Expected Some");
assert_eq!(string, "\u{A7}");
let mut cursor = Cursor::new(vec![0u8; 4]);
let string = cursor.read_fstring()?;
assert_eq!(string, None);
let mut cursor = Cursor::new(vec![1u8, 0u8, 0u8, 0u8, b't']);
let string = cursor.read_fstring().expect_err("Expected err").to_string();
assert_eq!(string, "Invalid string terminator 116 at position 0x5");
let mut cursor = Cursor::new(vec![0xffu8, 0xffu8, 0xffu8, 0xffu8, b't', b'e']);
let string = cursor.read_fstring().expect_err("Expected err").to_string();
assert_eq!(string, "Invalid string terminator 25972 at position 0x6");
Ok(())
}