use std::{io::Write, path::Path};
use crate::{run, Noisy, Replacement, Timers};
use diskit::{diskit_extend::DiskitExt, VirtualDiskit};
use home::home_dir;
#[allow(clippy::too_many_lines)]
#[test]
fn integration_tests()
{
let mut config_dir = home_dir().unwrap();
config_dir.push(".zvavybir/quicklatex");
let tests = vec![
(
"inputfile.tex",
"đ² ðab",
"\\frac {\\dot a}b\n",
vec![(
config_dir.join("default.qlr"),
r"replace ð;\\dot\s
replace đ;\\frac\s",
)],
Noisy::default(),
),
(
"trhbrtrtnznuuisf.tex",
r"\documentclass[a4paper,oneside]{article}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage[LGR,T1]{fontenc}
\usepackage[theorems]{zvavlso}
\author{}
\title{Math}
\numberwithin{equation}{section}
\begin{document}
\maketitle
\tableofcontents
\section{}
AbCdEf:
\begin{align}
v &= đxt
&= ðx(t)
\end{align}
\end{document}",
r"\documentclass[a4paper,oneside]{article}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage[LGR,T1]{fontenc}
\usepackage[theorems]{zvavlso}
\author{}
\title{Math}
\numberwithin{equation}{section}
\begin{document}
\maketitle
\tableofcontents
\section{}
AbCdEf:
\begin{align}
v &= \frac xt \\
&= \dot x(t)
\end{align}
\end{document}
",
vec![(
config_dir.join("default.qlr"),
r"replace đ;\\frac\s
replace ð;\\dot\s",
)],
Noisy::default(),
),
(
".tex",
"a¼q² bcd",
"ał[{äc}¶]d\n",
vec![(config_dir.join("default.qlr"), "replace b;ä")],
Noisy::default(),
),
(
"a.b.tex",
"abcdefghijklmnopqrstuvwxyz",
"abcDEFghijklmnopqrstuvwxyz\n",
vec![(
config_dir.join("default.qlr"),
r"replace_noisy def;DEF
replace_noisy qwe;QWE",
)],
Noisy {
repls: vec![Replacement {
from: "def".to_string(),
to: "DEF".to_string(),
noisy: true,
..Replacement::default()
}],
..Noisy::default()
},
),
];
for (filename, input, output, qlr_files, noisy) in tests
{
let d = VirtualDiskit::default();
let mut file = d.create(filename).unwrap();
writeln!(file, "{input}").unwrap();
d.create_dir_all(&config_dir).unwrap();
for (name, content) in qlr_files
{
let mut replfile = d.create(name).unwrap();
writeln!(replfile, "{content}").unwrap();
}
let result = run(Path::new(filename), &mut Timers::default(), d).expect("Unexpected error");
assert_eq!(result.0, output, "Transformation is incorrect");
assert_eq!(result.1, noisy, "Noisy is incorrect");
}
}