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()
},
),
(
"rewqer.tex",
"a¼q² bcd",
"ał[{bc}¶]d\n",
vec![(config_dir.join("default.qlr"), "")],
Noisy::default(),
),
(
".tex",
"a¼q² bcd",
"ał[{äc}¶]d\n",
vec![(config_dir.join("default.qlr"), "\nreplace b;ä\n")],
Noisy::default(),
),
("rewqer.tex", "a¼q² bcd", "ał[{bc}¶]d\n", vec![], Noisy::default()),
(
"hgvgds.......tex",
r"\begin{align}
3^2 + 4^2 &= 5^2
x &= đ{- b \pm ſ{b^2 - 4 a c}}{2 a}
\end{align}",
r"\begin{align}
3^2 + 4^2 &= 5^2 \\
x &= \frac {- b \pm \sqrt {b^2 - 4 a c}}{2 a}
\end{align}
",
vec![
(
config_dir.join("default.qlr"),
"\nreplace ſ;\\\\sqrt\\s\n\n\n\n\ninclude /z.qlr",
),
("z.qlr".into(), "replace đ;\\\\frac\\s\n"),
],
Noisy::default(),
),
(
"hgvgds.......tex",
r"\begin{alignewq}
3^2 + 4^2 &= 5^2
x &= đ{- b \pm ſ{b^2 - 4 a c}}{2 a}
\end{alignewq}",
r"\begin{alignewq}
3^2 + 4^2 &= 5^2 \\
x &= \frac {- b \pm \sqrt {b^2 - 4 a c}}{2 a}
\end{alignewq}
",
vec![
(
config_dir.join("default.qlr"),
"\nreplace ſ;\\\\sqrt\\s\n\n\n\n\ninclude_default zdff",
),
(config_dir.join("zdff"), "replace đ;\\\\frac\\s\n"),
],
Noisy::default(),
),
(
"hgvgds.......tex",
r"\begin{al}
3^2 + 4^2 &= 5^2
x &= đ{- b \pm ſ{b^2 - 4 a c}}{2 a}
\end{al}",
r"\begin{al}
3^2 + 4^2 &= 5^2 \\
x &= \frac {- b \pm \sqrt {b^2 - 4 a c}}{2 a}
\end{al}
",
vec![
(
config_dir.join("default.qlr"),
"\nreplace ſ;\\\\sqrt\\s\n\n\n\n\ninclude_default zdff",
),
(config_dir.join("zdff"), "replace đ;\\\\frac\\s\n"),
],
Noisy::default(),
),
(
"hgvgds.......tex",
r"\begin{aalign}
3^2 + 4^2 &= 5^2
x &= đ{- b \pm ſ{b^2 - 4 a c}}{2 a}
\end{aalign}",
r"\begin{aalign}
3^2 + 4^2 &= 5^2
x &= \frac {- b \pm \sqrt {b^2 - 4 a c}}{2 a}
\end{aalign}
",
vec![
(
config_dir.join("default.qlr"),
"\nreplace ſ;\\\\sqrt\\s\n\n\n\n\ninclude_default zdff",
),
(config_dir.join("zdff"), "replace đ;\\\\frac\\s\n"),
],
Noisy::default(),
),
(
"hgvgds.......tex",
r"\begin{ali}
3^2 + 4^2 &= 5^2
x &= đ{- b \pm ſ{b^2 - 4 a c}}{2 a}
\end{ali}",
r"\begin{ali}
3^2 + 4^2 &= 5^2
x &= \frac {- b \pm \sqrt {b^2 - 4 a c}}{2 a}
\end{ali}
",
vec![
(
config_dir.join("default.qlr"),
"\nreplace ſ;\\\\sqrt\\s\n\n\n\n\ninclude_default zdff",
),
(config_dir.join("zdff"), "replace đ;\\\\frac\\s\n"),
],
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");
}
}