Documentation
use crate::Notes;
use std::panic;
use std::fs::{self, File};

#[test]
fn get_line_test() {
    run_test("get-line", |p| {
        let note = Notes::new(p).append_line("hi").get_line(0);
        assert_eq!(note, "hi");
    });
}
#[test]
fn get_range_lines_test() {
    run_test("get-range", |p| {
        let note = Notes::new(p)
            .append_line("hi")
            .append_line("bye")
            .get_range_lines(0..=1);
        assert_eq!(note, "hi\nbye\n");
    });
}

#[test]
fn delete_range_lines_test() {
    run_test("delete-range", |p| {
        let note = Notes::new(p)
            .append_line("hi")
            .append_line("bye")
            .append_line("how")
            .append_line("get")
            .delete_range_lines(0..=1);
        assert_eq!(note.count_lines(), 2);
        assert_eq!(note.get_line(0), "how");
    })
}

#[test]
fn delete_line_test() {
    run_test("delete-line", |p| {
        let note = Notes::new(p)
            .append_line("hi")
            .append_line("bye")
            .delete_line(0);
        assert_eq!(note.get_line(0), "byes");
    })
}

fn run_test<T>(file: &str, test: T)
where
    T: FnOnce(&str) -> () + panic::UnwindSafe,
{
    File::create(file).unwrap();
    let _result = panic::catch_unwind(||{
        test(file);
    });
    fs::remove_file(file).unwrap();
}