jwalk 0.9.0

Use `dua-core` instead
Documentation
use serial_test::serial;
use std::env;
use std::fs;
use std::path::PathBuf;

mod util;

use jwalk::*;
use util::{parallelism_options, test_dir};

fn local_paths(walk_dir: WalkDir) -> Vec<String> {
    let root = walk_dir.root().to_owned();
    walk_dir
        .into_iter()
        .map(|each_result| {
            let each_entry = each_result.unwrap();
            if let Some(err) = each_entry.read_children.as_ref().and_then(|c| c.error()) {
                panic!("should not encounter any child errors :{:?}", err);
            }
            let path = each_entry.path();
            let path = path.strip_prefix(&root).unwrap().to_path_buf();
            let mut path_string = path.to_str().unwrap().to_string();
            path_string.push_str(&format!(" ({})", each_entry.depth));
            path_string
        })
        .collect()
}

#[test]
#[serial]
fn walk_relative_1() {
    for parallelism in parallelism_options() {
        let (test_dir, _temp_dir) = test_dir();

        env::set_current_dir(test_dir).unwrap();

        let paths = local_paths(
            WalkDir::new(".")
                .sort(true)
                .parallelism(parallelism.clone()),
        );

        assert_eq!(
            paths,
            vec![
                " (0)",
                "a.txt (1)",
                "b.txt (1)",
                "c.txt (1)",
                "group 1 (1)",
                "group 1/d.txt (2)",
                "group 2 (1)",
                "group 2/e.txt (2)",
            ]
        );

        let root_dir_entry = WalkDir::new("..")
            .parallelism(parallelism)
            .into_iter()
            .next()
            .unwrap()
            .unwrap();
        assert_eq!(&root_dir_entry.file_name, "..");
    }
}

#[test]
#[serial]
fn walk_relative_2() {
    for parallelism in parallelism_options() {
        let (test_dir, _temp_dir) = test_dir();

        env::set_current_dir(test_dir.join("group 1")).unwrap();

        let paths = local_paths(
            WalkDir::new("..")
                .sort(true)
                .parallelism(parallelism.clone()),
        );

        assert_eq!(
            paths,
            vec![
                " (0)",
                "a.txt (1)",
                "b.txt (1)",
                "c.txt (1)",
                "group 1 (1)",
                "group 1/d.txt (2)",
                "group 2 (1)",
                "group 2/e.txt (2)",
            ]
        );

        let root_dir_entry = WalkDir::new(".")
            .parallelism(parallelism)
            .into_iter()
            .next()
            .unwrap()
            .unwrap();
        assert_eq!(&root_dir_entry.file_name, ".");
    }
}