#[allow(unused_imports)]
use super::prelude::*;
#[macro_export]
macro_rules! assert_setup {
($func:expr) => {{
let (_, tmpdir) = assert_vfs_setup!(vfs::VFS.read().unwrap().clone(), $func);
tmpdir
}};
() => {{
let (_, tmpdir) = assert_vfs_setup!(vfs::VFS.read().unwrap().clone());
tmpdir
}};
}
#[macro_export]
macro_rules! assert_memfs_setup {
($func:expr) => {{
assert!(vfs::set_memfs().is_ok());
let (_, tmpdir) = assert_vfs_setup!(vfs::VFS.read().unwrap().clone(), $func);
tmpdir
}};
() => {{
assert!(vfs::set_memfs().is_ok());
let (_, tmpdir) = assert_vfs_setup!(vfs::VFS.read().unwrap().clone());
tmpdir
}};
}
#[macro_export]
macro_rules! assert_stdfs_setup {
($func:expr) => {{
assert!(vfs::set_stdfs().is_ok());
let (_, tmpdir) = assert_vfs_setup!(vfs::VFS.read().unwrap().clone(), $func);
tmpdir
}};
() => {{
assert!(vfs::set_stdfs().is_ok());
let (_, tmpdir) = assert_vfs_setup!(vfs::VFS.read().unwrap().clone());
tmpdir
}};
}
#[macro_export]
macro_rules! assert_copyfile {
($from:expr, $to:expr) => {
assert_vfs_copyfile!(vfs::VFS.read().unwrap().clone(), $from, $to)
};
}
#[macro_export]
macro_rules! assert_exists {
($path:expr) => {
assert_vfs_exists!(vfs::VFS.read().unwrap().clone(), $path)
};
}
#[macro_export]
macro_rules! assert_no_exists {
($path:expr) => {
assert_vfs_no_exists!(vfs::VFS.read().unwrap().clone(), $path)
};
}
#[macro_export]
macro_rules! assert_is_dir {
($path:expr) => {
assert_vfs_is_dir!(vfs::VFS.read().unwrap().clone(), $path)
};
}
#[macro_export]
macro_rules! assert_no_dir {
($path:expr) => {
assert_vfs_no_dir!(vfs::VFS.read().unwrap().clone(), $path)
};
}
#[macro_export]
macro_rules! assert_is_file {
($path:expr) => {
assert_vfs_is_file!(vfs::VFS.read().unwrap().clone(), $path)
};
}
#[macro_export]
macro_rules! assert_no_file {
($path:expr) => {
assert_vfs_no_file!(vfs::VFS.read().unwrap().clone(), $path)
};
}
#[macro_export]
macro_rules! assert_is_symlink {
($path:expr) => {
assert_vfs_is_symlink!(vfs::VFS.read().unwrap().clone(), $path)
};
}
#[macro_export]
macro_rules! assert_no_symlink {
($path:expr) => {
assert_vfs_no_symlink!(vfs::VFS.read().unwrap().clone(), $path)
};
}
#[macro_export]
macro_rules! assert_mkdir_m {
($path:expr, $mode:expr) => {
assert_vfs_mkdir_m!(vfs::VFS.read().unwrap().clone(), $path, $mode)
};
}
#[macro_export]
macro_rules! assert_mkdir_p {
($path:expr) => {
assert_vfs_mkdir_p!(vfs::VFS.read().unwrap().clone(), $path)
};
}
#[macro_export]
macro_rules! assert_mkfile {
($path:expr) => {
assert_vfs_mkfile!(vfs::VFS.read().unwrap().clone(), $path)
};
}
#[macro_export]
macro_rules! assert_read_all {
($path:expr, $data:expr) => {
assert_vfs_read_all!(vfs::VFS.read().unwrap().clone(), $path, $data)
};
}
#[macro_export]
macro_rules! assert_readlink {
($path:expr, $target:expr) => {
assert_vfs_readlink!(vfs::VFS.read().unwrap().clone(), $path, $target)
};
}
#[macro_export]
macro_rules! assert_readlink_abs {
($path:expr, $data:expr) => {
assert_vfs_readlink_abs!(vfs::VFS.read().unwrap().clone(), $path, $data)
};
}
#[macro_export]
macro_rules! assert_remove {
($path:expr) => {
assert_vfs_remove!(vfs::VFS.read().unwrap().clone(), $path)
};
}
#[macro_export]
macro_rules! assert_remove_all {
($path:expr) => {
assert_vfs_remove_all!(vfs::VFS.read().unwrap().clone(), $path)
};
}
#[macro_export]
macro_rules! assert_symlink {
($link:expr, $target:expr) => {
assert_vfs_symlink!(vfs::VFS.read().unwrap().clone(), $link, $target)
};
}
#[macro_export]
macro_rules! assert_write_all {
($path:expr, $data:expr) => {
assert_vfs_write_all!(vfs::VFS.read().unwrap().clone(), $path, $data)
};
}
#[cfg(test)]
mod tests
{
use crate::prelude::*;
#[allow(dead_code)]
fn dump_memfs()
{
if let Vfs::Memfs(ref x) = **vfs::VFS.read().unwrap() {
println!("{}", x);
}
}
#[test]
fn test_assert_setup()
{
let tmpdir = assert_memfs_setup!();
let expected =
vfs::root().mash(testing::TEST_TEMP_DIR).mash("rivia_vfs::assert::tests::test_assert_setup");
assert_eq!(&tmpdir, &expected);
assert_exists!(&expected);
let tmpdir = assert_memfs_setup!("foobar_setup");
let expected = vfs::root().mash(testing::TEST_TEMP_DIR).mash("foobar_setup");
assert_eq!(&tmpdir, &expected);
assert_exists!(&expected);
}
#[test]
fn test_assert_copyfile()
{
let tmpdir = assert_memfs_setup!();
let file1 = tmpdir.mash("file1");
let file2 = tmpdir.mash("file2");
assert_write_all!(&file1, "this is a test");
assert_copyfile!(&file1, &file2);
}
#[test]
fn test_assert_exists_and_no_exists()
{
let tmpdir = assert_memfs_setup!();
{
let file = tmpdir.mash("file");
assert_no_exists!(&file);
assert_mkfile!(&file);
assert_exists!(&file);
assert_remove!(&file);
assert_no_exists!(&file);
}
{
let dir1 = tmpdir.mash("dir1");
assert_no_exists!(&dir1);
assert_mkdir_p!(&dir1);
assert_exists!(&dir1);
assert_remove_all!(&dir1);
assert_no_exists!(&dir1);
}
}
#[test]
fn test_assert_is_dir_no_dir()
{
let tmpdir = assert_memfs_setup!();
let dir1 = tmpdir.mash("dir1");
assert_no_dir!(&dir1);
assert_mkdir_p!(&dir1);
assert_is_dir!(&dir1);
}
#[test]
fn test_assert_is_file_no_file()
{
let tmpdir = assert_memfs_setup!();
let file1 = tmpdir.mash("file1");
assert_no_file!(&file1);
assert_mkfile!(&file1);
assert_is_file!(&file1);
}
#[test]
fn test_assert_is_symlink_no_symlink()
{
let tmpdir = assert_memfs_setup!();
let file1 = tmpdir.mash("file1");
let link1 = tmpdir.mash("link1");
assert_no_symlink!(&file1);
assert_symlink!(&link1, &file1);
assert_is_symlink!(&link1);
assert_mkfile!(&file1);
assert_no_symlink!(&file1);
}
#[test]
fn test_assert_mkdir_m()
{
let tmpdir = assert_memfs_setup!();
let dir1 = tmpdir.mash("dir1");
assert_no_dir!(&dir1);
assert_mkdir_m!(&dir1, 0o40777);
assert_eq!(vfs::mode(&dir1).unwrap(), 0o40777);
assert_is_dir!(&dir1);
}
#[test]
fn test_assert_mkdir_p()
{
let tmpdir = assert_memfs_setup!();
let dir1 = tmpdir.mash("dir1");
assert_no_dir!(&dir1);
assert_mkdir_p!(&dir1);
assert_is_dir!(&dir1);
}
#[test]
fn test_assert_mkfile()
{
let tmpdir = assert_memfs_setup!();
let file1 = tmpdir.mash("file1");
assert_no_file!(&file1);
assert_mkfile!(&file1);
assert_is_file!(&file1);
}
#[test]
fn test_assert_read_all()
{
let tmpdir = assert_memfs_setup!();
let file = tmpdir.mash("foo");
assert_write_all!(&file, b"foobar 1");
assert_read_all!(&file, "foobar 1".to_string());
}
#[test]
fn test_assert_readlink()
{
let tmpdir = assert_memfs_setup!();
let dir = tmpdir.mash("dir");
let link = dir.mash("link");
let file = tmpdir.mash("file");
assert_mkdir_p!(&dir);
assert_mkfile!(&file);
assert_no_symlink!(&link);
assert_symlink!(&link, &file);
assert_is_symlink!(&link);
assert_readlink!(&link, PathBuf::from("..").mash("file"));
}
#[test]
fn test_assert_readlink_abs()
{
let tmpdir = assert_memfs_setup!();
let dir = tmpdir.mash("dir");
let link = dir.mash("link");
let file = tmpdir.mash("file");
assert_mkdir_p!(&dir);
assert_mkfile!(&file);
assert_no_symlink!(&link);
assert_symlink!(&link, &file);
assert_is_symlink!(&link);
assert_readlink_abs!(&link, &file);
}
#[test]
fn test_assert_remove()
{
let tmpdir = assert_memfs_setup!();
let file1 = tmpdir.mash("file1");
assert_remove!(&file1);
assert_mkfile!(&file1);
assert_is_file!(&file1);
assert_remove!(&file1);
assert_no_file!(&file1);
}
#[test]
fn test_assert_remove_all()
{
let tmpdir = assert_memfs_setup!();
let file1 = tmpdir.mash("file1");
assert_mkfile!(&file1);
assert_is_file!(&file1);
assert_remove_all!(&tmpdir);
assert_no_dir!(&tmpdir);
}
#[test]
fn test_assert_symlink()
{
let tmpdir = assert_memfs_setup!();
let dir1 = tmpdir.mash("dir1");
let file1 = dir1.mash("file1");
let link1 = tmpdir.mash("link1");
assert_mkdir_p!(&dir1);
assert_mkfile!(&file1);
assert_no_symlink!(&link1);
assert_symlink!(&link1, &file1);
assert_is_symlink!(&link1);
}
#[test]
fn test_assert_write_all()
{
let tmpdir = assert_memfs_setup!();
let file = tmpdir.mash("foo");
assert_write_all!(&file, b"foobar 1");
assert_read_all!(&file, "foobar 1".to_string());
}
}