111501908Sopenharmony_ci// Copyright 2013-2014 The Rust Project Developers. See the COPYRIGHT
211501908Sopenharmony_ci// file at the top-level directory of this distribution and at
311501908Sopenharmony_ci// http://rust-lang.org/COPYRIGHT.
411501908Sopenharmony_ci//
511501908Sopenharmony_ci// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
611501908Sopenharmony_ci// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
711501908Sopenharmony_ci// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
811501908Sopenharmony_ci// option. This file may not be copied, modified, or distributed
911501908Sopenharmony_ci// except according to those terms.
1011501908Sopenharmony_ci
1111501908Sopenharmony_ci// ignore-windows TempDir may cause IoError on windows: #10462
1211501908Sopenharmony_ci
1311501908Sopenharmony_ci#![cfg_attr(test, deny(warnings))]
1411501908Sopenharmony_ci
1511501908Sopenharmony_ciextern crate glob;
1611501908Sopenharmony_ciextern crate tempdir;
1711501908Sopenharmony_ci
1811501908Sopenharmony_ciuse glob::glob;
1911501908Sopenharmony_ciuse std::env;
2011501908Sopenharmony_ciuse std::fs;
2111501908Sopenharmony_ciuse std::path::PathBuf;
2211501908Sopenharmony_ciuse tempdir::TempDir;
2311501908Sopenharmony_ci
2411501908Sopenharmony_ci#[test]
2511501908Sopenharmony_cifn main() {
2611501908Sopenharmony_ci    fn mk_file(path: &str, directory: bool) {
2711501908Sopenharmony_ci        if directory {
2811501908Sopenharmony_ci            fs::create_dir(path).unwrap();
2911501908Sopenharmony_ci        } else {
3011501908Sopenharmony_ci            fs::File::create(path).unwrap();
3111501908Sopenharmony_ci        }
3211501908Sopenharmony_ci    }
3311501908Sopenharmony_ci
3411501908Sopenharmony_ci    fn glob_vec(pattern: &str) -> Vec<PathBuf> {
3511501908Sopenharmony_ci        glob(pattern).unwrap().map(|r| r.unwrap()).collect()
3611501908Sopenharmony_ci    }
3711501908Sopenharmony_ci
3811501908Sopenharmony_ci    let root = TempDir::new("glob-tests");
3911501908Sopenharmony_ci    let root = root.ok().expect("Should have created a temp directory");
4011501908Sopenharmony_ci    assert!(env::set_current_dir(root.path()).is_ok());
4111501908Sopenharmony_ci
4211501908Sopenharmony_ci    mk_file("aaa", true);
4311501908Sopenharmony_ci    mk_file("aaa/apple", true);
4411501908Sopenharmony_ci    mk_file("aaa/orange", true);
4511501908Sopenharmony_ci    mk_file("aaa/tomato", true);
4611501908Sopenharmony_ci    mk_file("aaa/tomato/tomato.txt", false);
4711501908Sopenharmony_ci    mk_file("aaa/tomato/tomoto.txt", false);
4811501908Sopenharmony_ci    mk_file("bbb", true);
4911501908Sopenharmony_ci    mk_file("bbb/specials", true);
5011501908Sopenharmony_ci    mk_file("bbb/specials/!", false);
5111501908Sopenharmony_ci
5211501908Sopenharmony_ci    // windows does not allow `*` or `?` characters to exist in filenames
5311501908Sopenharmony_ci    if env::consts::FAMILY != "windows" {
5411501908Sopenharmony_ci        mk_file("bbb/specials/*", false);
5511501908Sopenharmony_ci        mk_file("bbb/specials/?", false);
5611501908Sopenharmony_ci    }
5711501908Sopenharmony_ci
5811501908Sopenharmony_ci    mk_file("bbb/specials/[", false);
5911501908Sopenharmony_ci    mk_file("bbb/specials/]", false);
6011501908Sopenharmony_ci    mk_file("ccc", true);
6111501908Sopenharmony_ci    mk_file("xyz", true);
6211501908Sopenharmony_ci    mk_file("xyz/x", false);
6311501908Sopenharmony_ci    mk_file("xyz/y", false);
6411501908Sopenharmony_ci    mk_file("xyz/z", false);
6511501908Sopenharmony_ci
6611501908Sopenharmony_ci    mk_file("r", true);
6711501908Sopenharmony_ci    mk_file("r/current_dir.md", false);
6811501908Sopenharmony_ci    mk_file("r/one", true);
6911501908Sopenharmony_ci    mk_file("r/one/a.md", false);
7011501908Sopenharmony_ci    mk_file("r/one/another", true);
7111501908Sopenharmony_ci    mk_file("r/one/another/a.md", false);
7211501908Sopenharmony_ci    mk_file("r/one/another/deep", true);
7311501908Sopenharmony_ci    mk_file("r/one/another/deep/spelunking.md", false);
7411501908Sopenharmony_ci    mk_file("r/another", true);
7511501908Sopenharmony_ci    mk_file("r/another/a.md", false);
7611501908Sopenharmony_ci    mk_file("r/two", true);
7711501908Sopenharmony_ci    mk_file("r/two/b.md", false);
7811501908Sopenharmony_ci    mk_file("r/three", true);
7911501908Sopenharmony_ci    mk_file("r/three/c.md", false);
8011501908Sopenharmony_ci
8111501908Sopenharmony_ci    // all recursive entities
8211501908Sopenharmony_ci    assert_eq!(
8311501908Sopenharmony_ci        glob_vec("r/**"),
8411501908Sopenharmony_ci        vec!(
8511501908Sopenharmony_ci            PathBuf::from("r/another"),
8611501908Sopenharmony_ci            PathBuf::from("r/one"),
8711501908Sopenharmony_ci            PathBuf::from("r/one/another"),
8811501908Sopenharmony_ci            PathBuf::from("r/one/another/deep"),
8911501908Sopenharmony_ci            PathBuf::from("r/three"),
9011501908Sopenharmony_ci            PathBuf::from("r/two")
9111501908Sopenharmony_ci        )
9211501908Sopenharmony_ci    );
9311501908Sopenharmony_ci
9411501908Sopenharmony_ci    // collapse consecutive recursive patterns
9511501908Sopenharmony_ci    assert_eq!(
9611501908Sopenharmony_ci        glob_vec("r/**/**"),
9711501908Sopenharmony_ci        vec!(
9811501908Sopenharmony_ci            PathBuf::from("r/another"),
9911501908Sopenharmony_ci            PathBuf::from("r/one"),
10011501908Sopenharmony_ci            PathBuf::from("r/one/another"),
10111501908Sopenharmony_ci            PathBuf::from("r/one/another/deep"),
10211501908Sopenharmony_ci            PathBuf::from("r/three"),
10311501908Sopenharmony_ci            PathBuf::from("r/two")
10411501908Sopenharmony_ci        )
10511501908Sopenharmony_ci    );
10611501908Sopenharmony_ci
10711501908Sopenharmony_ci    assert_eq!(
10811501908Sopenharmony_ci        glob_vec("r/**/*"),
10911501908Sopenharmony_ci        vec!(
11011501908Sopenharmony_ci            PathBuf::from("r/another"),
11111501908Sopenharmony_ci            PathBuf::from("r/another/a.md"),
11211501908Sopenharmony_ci            PathBuf::from("r/current_dir.md"),
11311501908Sopenharmony_ci            PathBuf::from("r/one"),
11411501908Sopenharmony_ci            PathBuf::from("r/one/a.md"),
11511501908Sopenharmony_ci            PathBuf::from("r/one/another"),
11611501908Sopenharmony_ci            PathBuf::from("r/one/another/a.md"),
11711501908Sopenharmony_ci            PathBuf::from("r/one/another/deep"),
11811501908Sopenharmony_ci            PathBuf::from("r/one/another/deep/spelunking.md"),
11911501908Sopenharmony_ci            PathBuf::from("r/three"),
12011501908Sopenharmony_ci            PathBuf::from("r/three/c.md"),
12111501908Sopenharmony_ci            PathBuf::from("r/two"),
12211501908Sopenharmony_ci            PathBuf::from("r/two/b.md")
12311501908Sopenharmony_ci        )
12411501908Sopenharmony_ci    );
12511501908Sopenharmony_ci
12611501908Sopenharmony_ci    // followed by a wildcard
12711501908Sopenharmony_ci    assert_eq!(
12811501908Sopenharmony_ci        glob_vec("r/**/*.md"),
12911501908Sopenharmony_ci        vec!(
13011501908Sopenharmony_ci            PathBuf::from("r/another/a.md"),
13111501908Sopenharmony_ci            PathBuf::from("r/current_dir.md"),
13211501908Sopenharmony_ci            PathBuf::from("r/one/a.md"),
13311501908Sopenharmony_ci            PathBuf::from("r/one/another/a.md"),
13411501908Sopenharmony_ci            PathBuf::from("r/one/another/deep/spelunking.md"),
13511501908Sopenharmony_ci            PathBuf::from("r/three/c.md"),
13611501908Sopenharmony_ci            PathBuf::from("r/two/b.md")
13711501908Sopenharmony_ci        )
13811501908Sopenharmony_ci    );
13911501908Sopenharmony_ci
14011501908Sopenharmony_ci    // followed by a precise pattern
14111501908Sopenharmony_ci    assert_eq!(
14211501908Sopenharmony_ci        glob_vec("r/one/**/a.md"),
14311501908Sopenharmony_ci        vec!(
14411501908Sopenharmony_ci            PathBuf::from("r/one/a.md"),
14511501908Sopenharmony_ci            PathBuf::from("r/one/another/a.md")
14611501908Sopenharmony_ci        )
14711501908Sopenharmony_ci    );
14811501908Sopenharmony_ci
14911501908Sopenharmony_ci    // followed by another recursive pattern
15011501908Sopenharmony_ci    // collapses consecutive recursives into one
15111501908Sopenharmony_ci    assert_eq!(
15211501908Sopenharmony_ci        glob_vec("r/one/**/**/a.md"),
15311501908Sopenharmony_ci        vec!(
15411501908Sopenharmony_ci            PathBuf::from("r/one/a.md"),
15511501908Sopenharmony_ci            PathBuf::from("r/one/another/a.md")
15611501908Sopenharmony_ci        )
15711501908Sopenharmony_ci    );
15811501908Sopenharmony_ci
15911501908Sopenharmony_ci    // followed by two precise patterns
16011501908Sopenharmony_ci    assert_eq!(
16111501908Sopenharmony_ci        glob_vec("r/**/another/a.md"),
16211501908Sopenharmony_ci        vec!(
16311501908Sopenharmony_ci            PathBuf::from("r/another/a.md"),
16411501908Sopenharmony_ci            PathBuf::from("r/one/another/a.md")
16511501908Sopenharmony_ci        )
16611501908Sopenharmony_ci    );
16711501908Sopenharmony_ci
16811501908Sopenharmony_ci    assert_eq!(glob_vec(""), Vec::<PathBuf>::new());
16911501908Sopenharmony_ci    assert_eq!(glob_vec("."), vec!(PathBuf::from(".")));
17011501908Sopenharmony_ci    assert_eq!(glob_vec(".."), vec!(PathBuf::from("..")));
17111501908Sopenharmony_ci
17211501908Sopenharmony_ci    assert_eq!(glob_vec("aaa"), vec!(PathBuf::from("aaa")));
17311501908Sopenharmony_ci    assert_eq!(glob_vec("aaa/"), vec!(PathBuf::from("aaa")));
17411501908Sopenharmony_ci    assert_eq!(glob_vec("a"), Vec::<PathBuf>::new());
17511501908Sopenharmony_ci    assert_eq!(glob_vec("aa"), Vec::<PathBuf>::new());
17611501908Sopenharmony_ci    assert_eq!(glob_vec("aaaa"), Vec::<PathBuf>::new());
17711501908Sopenharmony_ci
17811501908Sopenharmony_ci    assert_eq!(glob_vec("aaa/apple"), vec!(PathBuf::from("aaa/apple")));
17911501908Sopenharmony_ci    assert_eq!(glob_vec("aaa/apple/nope"), Vec::<PathBuf>::new());
18011501908Sopenharmony_ci
18111501908Sopenharmony_ci    // windows should support both / and \ as directory separators
18211501908Sopenharmony_ci    if env::consts::FAMILY == "windows" {
18311501908Sopenharmony_ci        assert_eq!(glob_vec("aaa\\apple"), vec!(PathBuf::from("aaa/apple")));
18411501908Sopenharmony_ci    }
18511501908Sopenharmony_ci
18611501908Sopenharmony_ci    assert_eq!(
18711501908Sopenharmony_ci        glob_vec("???/"),
18811501908Sopenharmony_ci        vec!(
18911501908Sopenharmony_ci            PathBuf::from("aaa"),
19011501908Sopenharmony_ci            PathBuf::from("bbb"),
19111501908Sopenharmony_ci            PathBuf::from("ccc"),
19211501908Sopenharmony_ci            PathBuf::from("xyz")
19311501908Sopenharmony_ci        )
19411501908Sopenharmony_ci    );
19511501908Sopenharmony_ci
19611501908Sopenharmony_ci    assert_eq!(
19711501908Sopenharmony_ci        glob_vec("aaa/tomato/tom?to.txt"),
19811501908Sopenharmony_ci        vec!(
19911501908Sopenharmony_ci            PathBuf::from("aaa/tomato/tomato.txt"),
20011501908Sopenharmony_ci            PathBuf::from("aaa/tomato/tomoto.txt")
20111501908Sopenharmony_ci        )
20211501908Sopenharmony_ci    );
20311501908Sopenharmony_ci
20411501908Sopenharmony_ci    assert_eq!(
20511501908Sopenharmony_ci        glob_vec("xyz/?"),
20611501908Sopenharmony_ci        vec!(
20711501908Sopenharmony_ci            PathBuf::from("xyz/x"),
20811501908Sopenharmony_ci            PathBuf::from("xyz/y"),
20911501908Sopenharmony_ci            PathBuf::from("xyz/z")
21011501908Sopenharmony_ci        )
21111501908Sopenharmony_ci    );
21211501908Sopenharmony_ci
21311501908Sopenharmony_ci    assert_eq!(glob_vec("a*"), vec!(PathBuf::from("aaa")));
21411501908Sopenharmony_ci    assert_eq!(glob_vec("*a*"), vec!(PathBuf::from("aaa")));
21511501908Sopenharmony_ci    assert_eq!(glob_vec("a*a"), vec!(PathBuf::from("aaa")));
21611501908Sopenharmony_ci    assert_eq!(glob_vec("aaa*"), vec!(PathBuf::from("aaa")));
21711501908Sopenharmony_ci    assert_eq!(glob_vec("*aaa"), vec!(PathBuf::from("aaa")));
21811501908Sopenharmony_ci    assert_eq!(glob_vec("*aaa*"), vec!(PathBuf::from("aaa")));
21911501908Sopenharmony_ci    assert_eq!(glob_vec("*a*a*a*"), vec!(PathBuf::from("aaa")));
22011501908Sopenharmony_ci    assert_eq!(glob_vec("aaa*/"), vec!(PathBuf::from("aaa")));
22111501908Sopenharmony_ci
22211501908Sopenharmony_ci    assert_eq!(
22311501908Sopenharmony_ci        glob_vec("aaa/*"),
22411501908Sopenharmony_ci        vec!(
22511501908Sopenharmony_ci            PathBuf::from("aaa/apple"),
22611501908Sopenharmony_ci            PathBuf::from("aaa/orange"),
22711501908Sopenharmony_ci            PathBuf::from("aaa/tomato")
22811501908Sopenharmony_ci        )
22911501908Sopenharmony_ci    );
23011501908Sopenharmony_ci
23111501908Sopenharmony_ci    assert_eq!(
23211501908Sopenharmony_ci        glob_vec("aaa/*a*"),
23311501908Sopenharmony_ci        vec!(
23411501908Sopenharmony_ci            PathBuf::from("aaa/apple"),
23511501908Sopenharmony_ci            PathBuf::from("aaa/orange"),
23611501908Sopenharmony_ci            PathBuf::from("aaa/tomato")
23711501908Sopenharmony_ci        )
23811501908Sopenharmony_ci    );
23911501908Sopenharmony_ci
24011501908Sopenharmony_ci    assert_eq!(
24111501908Sopenharmony_ci        glob_vec("*/*/*.txt"),
24211501908Sopenharmony_ci        vec!(
24311501908Sopenharmony_ci            PathBuf::from("aaa/tomato/tomato.txt"),
24411501908Sopenharmony_ci            PathBuf::from("aaa/tomato/tomoto.txt")
24511501908Sopenharmony_ci        )
24611501908Sopenharmony_ci    );
24711501908Sopenharmony_ci
24811501908Sopenharmony_ci    assert_eq!(
24911501908Sopenharmony_ci        glob_vec("*/*/t[aob]m?to[.]t[!y]t"),
25011501908Sopenharmony_ci        vec!(
25111501908Sopenharmony_ci            PathBuf::from("aaa/tomato/tomato.txt"),
25211501908Sopenharmony_ci            PathBuf::from("aaa/tomato/tomoto.txt")
25311501908Sopenharmony_ci        )
25411501908Sopenharmony_ci    );
25511501908Sopenharmony_ci
25611501908Sopenharmony_ci    assert_eq!(glob_vec("./aaa"), vec!(PathBuf::from("aaa")));
25711501908Sopenharmony_ci    assert_eq!(glob_vec("./*"), glob_vec("*"));
25811501908Sopenharmony_ci    assert_eq!(glob_vec("*/..").pop().unwrap(), PathBuf::from("xyz/.."));
25911501908Sopenharmony_ci    assert_eq!(glob_vec("aaa/../bbb"), vec!(PathBuf::from("aaa/../bbb")));
26011501908Sopenharmony_ci    assert_eq!(glob_vec("nonexistent/../bbb"), Vec::<PathBuf>::new());
26111501908Sopenharmony_ci    assert_eq!(glob_vec("aaa/tomato/tomato.txt/.."), Vec::<PathBuf>::new());
26211501908Sopenharmony_ci
26311501908Sopenharmony_ci    assert_eq!(glob_vec("aaa/tomato/tomato.txt/"), Vec::<PathBuf>::new());
26411501908Sopenharmony_ci
26511501908Sopenharmony_ci    assert_eq!(glob_vec("aa[a]"), vec!(PathBuf::from("aaa")));
26611501908Sopenharmony_ci    assert_eq!(glob_vec("aa[abc]"), vec!(PathBuf::from("aaa")));
26711501908Sopenharmony_ci    assert_eq!(glob_vec("a[bca]a"), vec!(PathBuf::from("aaa")));
26811501908Sopenharmony_ci    assert_eq!(glob_vec("aa[b]"), Vec::<PathBuf>::new());
26911501908Sopenharmony_ci    assert_eq!(glob_vec("aa[xyz]"), Vec::<PathBuf>::new());
27011501908Sopenharmony_ci    assert_eq!(glob_vec("aa[]]"), Vec::<PathBuf>::new());
27111501908Sopenharmony_ci
27211501908Sopenharmony_ci    assert_eq!(glob_vec("aa[!b]"), vec!(PathBuf::from("aaa")));
27311501908Sopenharmony_ci    assert_eq!(glob_vec("aa[!bcd]"), vec!(PathBuf::from("aaa")));
27411501908Sopenharmony_ci    assert_eq!(glob_vec("a[!bcd]a"), vec!(PathBuf::from("aaa")));
27511501908Sopenharmony_ci    assert_eq!(glob_vec("aa[!a]"), Vec::<PathBuf>::new());
27611501908Sopenharmony_ci    assert_eq!(glob_vec("aa[!abc]"), Vec::<PathBuf>::new());
27711501908Sopenharmony_ci
27811501908Sopenharmony_ci    assert_eq!(
27911501908Sopenharmony_ci        glob_vec("bbb/specials/[[]"),
28011501908Sopenharmony_ci        vec!(PathBuf::from("bbb/specials/["))
28111501908Sopenharmony_ci    );
28211501908Sopenharmony_ci    assert_eq!(
28311501908Sopenharmony_ci        glob_vec("bbb/specials/!"),
28411501908Sopenharmony_ci        vec!(PathBuf::from("bbb/specials/!"))
28511501908Sopenharmony_ci    );
28611501908Sopenharmony_ci    assert_eq!(
28711501908Sopenharmony_ci        glob_vec("bbb/specials/[]]"),
28811501908Sopenharmony_ci        vec!(PathBuf::from("bbb/specials/]"))
28911501908Sopenharmony_ci    );
29011501908Sopenharmony_ci
29111501908Sopenharmony_ci    if env::consts::FAMILY != "windows" {
29211501908Sopenharmony_ci        assert_eq!(
29311501908Sopenharmony_ci            glob_vec("bbb/specials/[*]"),
29411501908Sopenharmony_ci            vec!(PathBuf::from("bbb/specials/*"))
29511501908Sopenharmony_ci        );
29611501908Sopenharmony_ci        assert_eq!(
29711501908Sopenharmony_ci            glob_vec("bbb/specials/[?]"),
29811501908Sopenharmony_ci            vec!(PathBuf::from("bbb/specials/?"))
29911501908Sopenharmony_ci        );
30011501908Sopenharmony_ci    }
30111501908Sopenharmony_ci
30211501908Sopenharmony_ci    if env::consts::FAMILY == "windows" {
30311501908Sopenharmony_ci        assert_eq!(
30411501908Sopenharmony_ci            glob_vec("bbb/specials/[![]"),
30511501908Sopenharmony_ci            vec!(
30611501908Sopenharmony_ci                PathBuf::from("bbb/specials/!"),
30711501908Sopenharmony_ci                PathBuf::from("bbb/specials/]")
30811501908Sopenharmony_ci            )
30911501908Sopenharmony_ci        );
31011501908Sopenharmony_ci
31111501908Sopenharmony_ci        assert_eq!(
31211501908Sopenharmony_ci            glob_vec("bbb/specials/[!]]"),
31311501908Sopenharmony_ci            vec!(
31411501908Sopenharmony_ci                PathBuf::from("bbb/specials/!"),
31511501908Sopenharmony_ci                PathBuf::from("bbb/specials/[")
31611501908Sopenharmony_ci            )
31711501908Sopenharmony_ci        );
31811501908Sopenharmony_ci
31911501908Sopenharmony_ci        assert_eq!(
32011501908Sopenharmony_ci            glob_vec("bbb/specials/[!!]"),
32111501908Sopenharmony_ci            vec!(
32211501908Sopenharmony_ci                PathBuf::from("bbb/specials/["),
32311501908Sopenharmony_ci                PathBuf::from("bbb/specials/]")
32411501908Sopenharmony_ci            )
32511501908Sopenharmony_ci        );
32611501908Sopenharmony_ci    } else {
32711501908Sopenharmony_ci        assert_eq!(
32811501908Sopenharmony_ci            glob_vec("bbb/specials/[![]"),
32911501908Sopenharmony_ci            vec!(
33011501908Sopenharmony_ci                PathBuf::from("bbb/specials/!"),
33111501908Sopenharmony_ci                PathBuf::from("bbb/specials/*"),
33211501908Sopenharmony_ci                PathBuf::from("bbb/specials/?"),
33311501908Sopenharmony_ci                PathBuf::from("bbb/specials/]")
33411501908Sopenharmony_ci            )
33511501908Sopenharmony_ci        );
33611501908Sopenharmony_ci
33711501908Sopenharmony_ci        assert_eq!(
33811501908Sopenharmony_ci            glob_vec("bbb/specials/[!]]"),
33911501908Sopenharmony_ci            vec!(
34011501908Sopenharmony_ci                PathBuf::from("bbb/specials/!"),
34111501908Sopenharmony_ci                PathBuf::from("bbb/specials/*"),
34211501908Sopenharmony_ci                PathBuf::from("bbb/specials/?"),
34311501908Sopenharmony_ci                PathBuf::from("bbb/specials/[")
34411501908Sopenharmony_ci            )
34511501908Sopenharmony_ci        );
34611501908Sopenharmony_ci
34711501908Sopenharmony_ci        assert_eq!(
34811501908Sopenharmony_ci            glob_vec("bbb/specials/[!!]"),
34911501908Sopenharmony_ci            vec!(
35011501908Sopenharmony_ci                PathBuf::from("bbb/specials/*"),
35111501908Sopenharmony_ci                PathBuf::from("bbb/specials/?"),
35211501908Sopenharmony_ci                PathBuf::from("bbb/specials/["),
35311501908Sopenharmony_ci                PathBuf::from("bbb/specials/]")
35411501908Sopenharmony_ci            )
35511501908Sopenharmony_ci        );
35611501908Sopenharmony_ci
35711501908Sopenharmony_ci        assert_eq!(
35811501908Sopenharmony_ci            glob_vec("bbb/specials/[!*]"),
35911501908Sopenharmony_ci            vec!(
36011501908Sopenharmony_ci                PathBuf::from("bbb/specials/!"),
36111501908Sopenharmony_ci                PathBuf::from("bbb/specials/?"),
36211501908Sopenharmony_ci                PathBuf::from("bbb/specials/["),
36311501908Sopenharmony_ci                PathBuf::from("bbb/specials/]")
36411501908Sopenharmony_ci            )
36511501908Sopenharmony_ci        );
36611501908Sopenharmony_ci
36711501908Sopenharmony_ci        assert_eq!(
36811501908Sopenharmony_ci            glob_vec("bbb/specials/[!?]"),
36911501908Sopenharmony_ci            vec!(
37011501908Sopenharmony_ci                PathBuf::from("bbb/specials/!"),
37111501908Sopenharmony_ci                PathBuf::from("bbb/specials/*"),
37211501908Sopenharmony_ci                PathBuf::from("bbb/specials/["),
37311501908Sopenharmony_ci                PathBuf::from("bbb/specials/]")
37411501908Sopenharmony_ci            )
37511501908Sopenharmony_ci        );
37611501908Sopenharmony_ci    }
37711501908Sopenharmony_ci}
378