skyspell_core 2.0.0

skyspell core library
Documentation
#[macro_export]
macro_rules! test_repository {
    ($repo:ty) => {
        #[allow(unused_imports)]
        use $crate::tests::new_project_path;
        #[allow(unused_imports)]
        use $crate::tests::new_relative_path;

        #[test]
        fn test_create_project() {
            let mut repository = <$repo>::new_for_tests().unwrap();
            let temp_dir = tempfile::Builder::new()
                .prefix("test-skyspell")
                .tempdir()
                .unwrap();
            let project = new_project_path(&temp_dir, "project");

            assert!(!repository.project_exists(&project).unwrap());

            repository.new_project(&project).unwrap();
            assert!(repository.project_exists(&project).unwrap());
        }

        #[test]
        fn test_duplicate_projects() {
            let mut repository = <$repo>::new_for_tests().unwrap();
            let temp_dir = tempfile::Builder::new()
                .prefix("test-skyspell")
                .tempdir()
                .unwrap();
            let project = new_project_path(&temp_dir, "project");

            repository.new_project(&project).unwrap();
            assert!(repository.new_project(&project).is_err());
        }

        #[test]
        fn test_remove_project() {
            let mut repository = <$repo>::new_for_tests().unwrap();
            let temp_dir = tempfile::Builder::new()
                .prefix("test-skyspell")
                .tempdir()
                .unwrap();
            let project1 = new_project_path(&temp_dir, "project1");
            let project2 = new_project_path(&temp_dir, "project2");
            let project3 = new_project_path(&temp_dir, "project3");
            repository.new_project(&project1).unwrap();
            let project2_id = repository.new_project(&project2).unwrap();
            repository.new_project(&project3).unwrap();

            repository.remove_project(project2_id).unwrap();

            assert!(!repository.project_exists(&project2).unwrap());
        }

        #[test]
        fn test_pop_last_operation_returning_none() {
            let mut repository = <$repo>::new_for_tests().unwrap();
            let actual = repository.pop_last_operation().unwrap();
            assert!(actual.is_none());
        }

        #[test]
        fn test_pop_last_operation_happy() {
            use $crate::operations::Ignore;
            use $crate::Operation;
            let mut repository = <$repo>::new_for_tests().unwrap();
            let ignore_foo = Operation::Ignore(Ignore {
                word: "foo".to_string(),
            });
            repository.insert_operation(&ignore_foo).unwrap();

            let actual = repository.pop_last_operation().unwrap().unwrap();
            assert_eq!(actual, ignore_foo);
        }
    };
}