#[macro_use]
mod helper;
#[cfg(test)]
mod test7 {
use function_name::named;
use rabuf::{BufFile, FileSetLen};
use std::io::{Read, Seek, SeekFrom, Write};
#[named]
#[test]
fn test_set_len_truncate_1() {
let f = open_test_file!(function_name!());
let mut bf = BufFile::new("test_set_len_truncate", f).unwrap();
let initial_data = b"1234567890";
bf.write_all(initial_data).unwrap();
assert_eq!(bf.seek(SeekFrom::End(0)).unwrap(), 10);
bf.set_len(5).unwrap();
assert_eq!(bf.seek(SeekFrom::End(0)).unwrap(), 5);
bf.rewind().unwrap();
let mut content = Vec::new();
bf.read_to_end(&mut content).unwrap();
assert_eq!(content, b"12345");
}
#[named]
#[test]
fn test_set_len_truncate_2() {
let bw = b"ABCEDFG\nhijklmn\n";
let f = open_test_file!(function_name!());
let mut bf = BufFile::new("tes", f).unwrap();
bf.write_all(bw).unwrap();
let new_len = 5;
bf.set_len(new_len).unwrap();
bf.rewind().unwrap();
let mut br = Vec::new();
bf.read_to_end(&mut br).unwrap();
assert_eq!(br.len() as u64, new_len);
assert_eq!(&br, &bw[..new_len as usize]);
}
#[named]
#[test]
fn test_set_len_extend_1() {
let f = open_test_file!(function_name!());
let mut bf = BufFile::new("test_set_len_extend", f).unwrap();
let initial_data = b"12345";
bf.write_all(initial_data).unwrap();
assert_eq!(bf.seek(SeekFrom::End(0)).unwrap(), 5);
bf.set_len(10).unwrap();
assert_eq!(bf.seek(SeekFrom::End(0)).unwrap(), 10);
bf.rewind().unwrap();
let mut content = Vec::new();
bf.read_to_end(&mut content).unwrap();
let mut expected_content = initial_data.to_vec();
expected_content.resize(10, 0);
assert_eq!(content, expected_content);
bf.seek(SeekFrom::Start(7)).unwrap();
bf.write_all(b"abc").unwrap();
bf.rewind().unwrap();
let mut content = Vec::new();
bf.read_to_end(&mut content).unwrap();
assert_eq!(content, b"12345 abc");
}
#[named]
#[test]
fn test_set_len_extend_2() {
let f = open_test_file!(function_name!());
let mut bf = BufFile::new("tes", f).unwrap();
let initial_size = 10;
let extended_size = 20;
bf.write_all(&vec![1u8; initial_size]).unwrap();
bf.set_len(extended_size).unwrap();
bf.rewind().unwrap();
let mut br = Vec::new();
bf.read_to_end(&mut br).unwrap();
let mut expected_data = vec![1u8; initial_size];
expected_data.extend_from_slice(&vec![0u8; extended_size as usize - initial_size]);
assert_eq!(br, expected_data);
}
#[named]
#[test]
fn test_set_len_smaller_and_write() {
let f = open_test_file!(function_name!());
let mut bf = BufFile::new("tes", f).unwrap();
let initial_data = b"0123456789abcdef";
bf.write_all(initial_data).unwrap();
let new_len = 8;
bf.set_len(new_len).unwrap();
let new_data = b"ghij";
bf.seek(std::io::SeekFrom::Start(new_len)).unwrap();
bf.write_all(new_data).unwrap();
bf.rewind().unwrap();
let mut br = Vec::new();
bf.read_to_end(&mut br).unwrap();
let mut expected_data = initial_data[..new_len as usize].to_vec();
expected_data.extend_from_slice(new_data);
assert_eq!(br, expected_data);
}
}