use super::*;
use crate::working_copy::WorkingCopy;
#[test]
fn add_non_utf8_file_test() -> Result<(), anyhow::Error> {
env_logger::try_init().unwrap_or(());
let mut buf = Vec::new();
use std::io::Read;
let mut fh = std::fs::File::open("src/tests/data/1252.1")?;
fh.read_to_end(&mut buf)?;
let repo = working_copy::memory::Memory::new();
repo.add_file("file", buf);
let env = pristine::sanakirja::Pristine::new_anon()?;
let txn = env.arc_txn_begin().unwrap();
let channel = txn.write().open_or_create_channel("main")?;
txn.write().add_file("file", 0)?;
let store = changestore::memory::Memory::new();
let (h, change) = record_all_change(&repo, &store, &txn, &channel, "")?;
let mut v = Vec::new();
change.write(&store, Some(h), true, &mut v).unwrap();
let lines: Vec<&str> = std::str::from_utf8(&v)
.unwrap()
.lines()
.filter(|l| l.starts_with("+"))
.collect();
assert_eq!(
vec![
"+ French / Français (Windows CP 1252)",
"+ € abcde ‚ xys ƒ uvw „ !bla …... † XA>TH ‡, Salut"
],
lines
);
Ok(())
}
#[test]
fn change_non_utf8_file_test() -> Result<(), anyhow::Error> {
env_logger::try_init().unwrap_or(());
let mut buf = Vec::new();
use std::io::Read;
let mut fh = std::fs::File::open("src/tests/data/8859-1.1")?;
fh.read_to_end(&mut buf)?;
let repo = working_copy::memory::Memory::new();
repo.add_file("file", buf);
let env = pristine::sanakirja::Pristine::new_anon()?;
let txn = env.arc_txn_begin().unwrap();
let channel = txn.write().open_or_create_channel("main")?;
txn.write().add_file("file", 0)?;
let store = changestore::memory::Memory::new();
record_all(&repo, &store, &txn, &channel, "")?;
let mut buf = Vec::new();
{
use std::io::Read;
let mut fh = std::fs::File::open("src/tests/data/8859-1.2")?;
fh.read_to_end(&mut buf)?;
}
use std::io::Write;
repo.write_file("file", Inode::ROOT)
.unwrap()
.write_all(&buf)
.unwrap();
let (h1, change1) = record_all_change(&repo, &store, &txn, &channel, "")?;
let mut v = Vec::new();
change1.write(&store, Some(h1), true, &mut v).unwrap();
let lines: Vec<&str> = std::str::from_utf8(&v)
.unwrap()
.lines()
.filter(|l| l.starts_with(|c| c == '-' || c == '+'))
.collect();
assert_eq!(
vec![
"- French / Français (ISO Latin-1 / ISO 8859-1)",
"+ Français / French (ISO Latin-1 / ISO 8859-1)"
],
lines
);
Ok(())
}