A glob library for MoonBit, supporting wildcard pattern matching on file paths.
///|
test {
assert_eq(@glob.glob("*.txt", "notes.txt"), true)
assert_eq(@glob.glob("src/*.mbt", "src/main.mbt"), true)
assert_eq(@glob.glob("src/*.mbt", "src/lib/main.mbt"), false)
assert_eq(@glob.glob("src/**/*.mbt", "src/lib/main.mbt"), true)
}///|
test {
let files = ["README.md", "src/main.mbt", "src/lib/util.mbt"]
assert_eq(@glob.glob_match_any("src/**", files), true)
assert_eq(@glob.glob_filter("src/**/*.mbt", files), ["src/lib/util.mbt"])
assert_eq(@glob.match_any_pattern(["*.md", "**/*.mbt"], "README.md"), true)
}///|
test {
assert_eq(@glob.is_valid_pattern("[abc]*.txt"), true)
assert_eq(@glob.is_valid_pattern("[abc*.txt"), false)
assert_eq(@glob.escape_glob("file?.txt"), "file\\?.txt")
}fn escape_glob(text : String) -> Stringtest {
assert_eq(@glob.escape_glob("file*.txt"), "file\\*.txt")
assert_eq(@glob.escape_glob("test?[1].log"), "test\\?\\[1\\].log")
assert_eq(@glob.escape_glob("plain.txt"), "plain.txt")
}fn get_char(s : String, index : Int) -> Char?test {
assert_true(@glob.get_char("moon", 0) == Some('m'))
assert_true(@glob.get_char("moon", 3) == Some('n'))
assert_true(@glob.get_char("moon", 4) == None)
}fn glob(pattern : String, text : String) -> Bool raisetest {
assert_eq(@glob.glob("file?.log", "file1.log"), true)
assert_eq(@glob.glob("**/*.md", "docs/api/readme.md"), true)
assert_eq(@glob.glob("*.jpg", "images/logo.png"), false)
}test {
let files = ["README.md", "src/main.mbt", "src/lib/util.mbt"]
assert_true(@glob.glob_filter("src/*.mbt", files) == ["src/main.mbt"])
assert_true(@glob.glob_filter("src/**/*.mbt", files) == ["src/lib/util.mbt"])
}test {
let files = ["README.md", "src/main.mbt", "test/main_test.mbt"]
assert_eq(@glob.glob_match_any("**/*.mbt", files), true)
assert_eq(@glob.glob_match_any("**/*.rs", files), false)
}fn is_path_separator(c : Char) -> Booltest {
assert_eq(@glob.is_path_separator('/'), true)
assert_eq(@glob.is_path_separator('\\'), true)
assert_eq(@glob.is_path_separator('a'), false)
}fn is_valid_pattern(pattern : String) -> Booltest {
assert_eq(@glob.is_valid_pattern("*.mbt"), true)
assert_eq(@glob.is_valid_pattern("[abc]*.txt"), true)
assert_eq(@glob.is_valid_pattern("[abc*.txt"), false)
assert_eq(@glob.is_valid_pattern("abc]*.txt"), false)
}test {
let patterns = ["*.md", "**/*.mbt"]
assert_eq(@glob.match_any_pattern(patterns, "README.md"), true)
assert_eq(@glob.match_any_pattern(patterns, "src/main.mbt"), true)
assert_eq(@glob.match_any_pattern(patterns, "package.json"), false)
}fn match_char(pattern : Char, char : Char) -> Booltest {
assert_eq(@glob.match_char('a', 'a'), true)
assert_eq(@glob.match_char('?', 'x'), true)
assert_eq(@glob.match_char('a', 'b'), false)
}fn match_here(pattern : String, text : String) -> Bool raisetest {
assert_eq(@glob.match_here("**/*.mbt", "src/lib/main.mbt"), true)
assert_eq(@glob.match_here("*.mbt", "src/lib/main.mbt"), false)
}A glob library for MoonBit, supporting wildcard pattern matching on file paths.