file-ext 12.0.0

Collection of utility functions to work with files
Documentation
use crate::directory_ext_impl::DirectoryExtImpl;
use crate::FileExt;
use crate::path_ext_impl::PathExtImpl;

#[test]
fn new_directory_recursively_create_delete() {
    let path = ["directory", "subdirectory"].join(PathExtImpl::get_path_separator().as_str());

    if DirectoryExtImpl::does_directory_exist("directory") {
        FileExt::delete_directory("directory").unwrap();
    }

    let boxed_create = DirectoryExtImpl::create_directory(path.as_str());
    assert!(boxed_create.is_ok());

    assert!(DirectoryExtImpl::does_directory_exist(path.as_str()));

    let boxed_delete = DirectoryExtImpl::delete_directory("directory");
    assert!(boxed_delete.is_ok());

}

#[test]
fn new_directory_create_recursively_additional_subdirectory() {
    let path = ["recursive_directory_creation", "subdirectory", "subsubdirectory"].join(PathExtImpl::get_path_separator().as_str());

    if FileExt::does_directory_exist("recursive_directory_creation") {
        FileExt::delete_directory("recursive_directory_creation").unwrap();
    }

    let boxed_create = DirectoryExtImpl::create_directory(path.as_str());
    assert!(boxed_create.is_ok());

    assert!(DirectoryExtImpl::does_directory_exist(path.as_str()));

    let boxed_delete = DirectoryExtImpl::delete_directory("recursive_directory_creation");
    assert!(boxed_delete.is_ok());
}

#[test]
fn new_directory_create_non_recursively() {
    let path = "dir".to_string();

    if DirectoryExtImpl::does_directory_exist(path.as_str()) {
        DirectoryExtImpl::delete_directory(path.as_str()).unwrap();
    }

    let boxed_create = DirectoryExtImpl::create_directory(path.as_str());
    assert!(boxed_create.is_ok());

    assert!(DirectoryExtImpl::does_directory_exist(path.as_str()));

    let boxed_delete = DirectoryExtImpl::delete_directory(path.as_str());
    assert!(boxed_delete.is_ok());
}

#[test]
fn new_directory_create_recursively_additional_subdirectory_removal() {
    let path = ["recursive_directory", "subdirectory", "subsubdirectory"].join(PathExtImpl::get_path_separator().as_str());

    if FileExt::does_directory_exist("recursive_directory") {
        FileExt::delete_directory("recursive_directory").unwrap();
    }

    let boxed_create = DirectoryExtImpl::create_directory(path.as_str());
    assert!(boxed_create.is_ok());

    assert!(DirectoryExtImpl::does_directory_exist(path.as_str()));

    let boxed_delete = DirectoryExtImpl::delete_directory(path.as_str());
    assert!(boxed_delete.is_ok());

    assert!(!DirectoryExtImpl::does_directory_exist(path.as_str()));

    let boxed_delete = DirectoryExtImpl::delete_directory("recursive_directory");
    assert!(boxed_delete.is_ok());

    assert!(!DirectoryExtImpl::does_directory_exist("recursive_directory"));
}

#[test]
fn delete_nonexistent_directory() {
    let path = "nonexistent_directory";

    assert!(!DirectoryExtImpl::does_directory_exist(path));

    let boxed_delete = DirectoryExtImpl::delete_directory(path);
    assert!(boxed_delete.is_err());

    let expected_error = format!("There is no directory at the given path: {}", path);
    assert_eq!(expected_error, boxed_delete.err().unwrap())
}

#[test]
fn delete_directory_not_allowed_chars() {
    let path = "nonexistent_directory;&|'\"";

    assert!(!DirectoryExtImpl::does_directory_exist(path));

    let boxed_delete = DirectoryExtImpl::delete_directory(path);
    assert!(boxed_delete.is_err());

    let expected_error = format!("Path contains not allowed characters: whitespace, single quote, quotation mark, ampersand, pipe, semicolon. Path: {}", path);
    assert_eq!(expected_error, boxed_delete.err().unwrap())
}

#[test]
fn create_directory_not_allowed_chars() {
    let path = "nonexistent_directory;&|'\"";

    assert!(!DirectoryExtImpl::does_directory_exist(path));

    let boxed_delete = DirectoryExtImpl::create_directory(path);
    assert!(boxed_delete.is_err());

    let expected_error = format!("Path contains not allowed characters: whitespace, single quote, quotation mark, ampersand, pipe, semicolon. Path: {}", path);
    assert_eq!(expected_error, boxed_delete.err().unwrap())
}