quicklatex 0.1.0

A program to help me write LaTeX quickly
Documentation
use std::{io::Write, path::Path};

use crate::{run, Noisy, Replacement, Timers};
use diskit::{diskit_extend::DiskitExt, VirtualDiskit};
use home::home_dir;

// Test just often are long, it wouldn't be better to split this into
// multiple functions.  Also pedantic lint.
#[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");
    }
}