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