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 mut repo = working_copy::memory::Memory::new();
repo.add_file("file", buf);
let env = pristine::sanakirja::Pristine::new_anon()?;
let mut txn = env.mut_txn_begin();
let mut channel = txn.open_or_create_channel("main")?;
txn.add_file("file")?;
let store = changestore::memory::Memory::new();
let (h, change) = record_all_change(&mut repo, &store, &mut txn, &mut channel, "")?;
let mut v = Vec::new();
change
.write(
&store,
Some(h),
|l, _p| format!("{}:{}", l.path, l.line),
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)", "+ €‚ƒ„…†‡, 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 mut repo = working_copy::memory::Memory::new();
repo.add_file("file", buf);
let env = pristine::sanakirja::Pristine::new_anon()?;
let mut txn = env.mut_txn_begin();
let mut channel = txn.open_or_create_channel("main")?;
txn.add_file("file")?;
let store = changestore::memory::Memory::new();
record_all(&mut repo, &store, &mut txn, &mut 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)?;
}
repo.write_file::<_, std::io::Error, _>("file", |w| {
w.write_all(&buf).unwrap();
Ok(())
})?;
let (h1, change1) = record_all_change(&mut repo, &store, &mut txn, &mut channel, "")?;
// only one line was changed
let mut v = Vec::new();
change1
.write(
&store,
Some(h1),
|l, _p| format!("{}:{}", l.path, l.line),
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(())
}
#[test]
fn delete_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/gb.1")?;
fh.read_to_end(&mut buf)?;
let mut repo = working_copy::memory::Memory::new();
repo.add_file("file", buf);
let env = pristine::sanakirja::Pristine::new_anon()?;
let mut txn = env.mut_txn_begin();
let mut channel = txn.open_or_create_channel("main")?;
txn.add_file("file")?;
let store = changestore::memory::Memory::new();
record_all(&mut repo, &store, &mut txn, &mut 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)?;
}
repo.remove_path("file")?;
let (h1, change1) = record_all_change(&mut repo, &store, &mut txn, &mut channel, "")?;
let mut v = Vec::new();
change1
.write(
&store,
Some(h1),
|l, _p| format!("{}:{}", l.path, l.line),
true,
&mut v,
)
.unwrap();
let lines: Vec<&str> = std::str::from_utf8(&v)
.unwrap()
.lines()
.filter(|l| l.starts_with(|c| c == '-'))
.collect();
assert_eq!(
vec![
" -Chinese / 中文,普通话,汉语 (GB 2312 / GB-encoding)",
"- 你好"
],
lines
);
Ok(())
}