use clap::Parser;
use code_it_later_rs::{args::*, *};
use std::fs::{self, copy, remove_file};
use std::io::{prelude::*, BufReader, Result};
use std::path::Path;
use std::sync::{LazyLock, Mutex};
fn same_file(file0: impl AsRef<Path>, file1: impl AsRef<Path>) -> Result<bool> {
let f0 = fs::File::open(&file0)?;
let f1 = fs::File::open(&file1)?;
let reader0 = BufReader::new(f0).lines();
let reader1 = BufReader::new(f1).lines();
Ok(reader0.zip(reader1).all(|(a, b)| a.unwrap() == b.unwrap()))
}
static TEST_CLEAN_LOCK: LazyLock<Mutex<()>> = LazyLock::new(|| Mutex::new(()));
#[test]
fn test_delete_the_crumbs() -> Result<()> {
let _lock = TEST_CLEAN_LOCK.lock();
copy(
"./tests/testcases/clean_case_0.rs.bkp",
"./tests/testcases/clean_case_0.rs",
)?;
let args = Args::parse_from(vec!["codeitlater", "./tests/testcases/clean_case_0.rs"]);
let conf = config::Config::from(&args);
let mut bread = fs_operation::handle_files(conf);
fs_operation::delete_the_crumbs(bread.next().unwrap())?;
assert!(same_file(
"tests/testcases/clean_case_0.rs.delete_expect",
"tests/testcases/clean_case_0.rs",
)
.unwrap());
remove_file("./tests/testcases/clean_case_0.rs")
}
#[test]
fn test_restore_the_crumbs() -> Result<()> {
let _lock = TEST_CLEAN_LOCK.lock();
copy(
"./tests/testcases/clean_case_0.rs.bkp",
"./tests/testcases/clean_case_0.rs",
)?;
let args = Args::parse_from(vec![
"codeitlater",
"./tests/testcases/clean_case_0.rs",
]);
let conf = config::Config::from(&args);
let mut bread = fs_operation::handle_files(conf);
fs_operation::restore_the_crumb(bread.next().unwrap())?;
assert!(same_file(
"tests/testcases/clean_case_0.rs.restore_expect",
"tests/testcases/clean_case_0.rs",
)
.unwrap());
remove_file("./tests/testcases/clean_case_0.rs")
}