diff options
author | Nayeem Rahman <muhammed.9939@gmail.com> | 2019-10-16 19:39:33 +0100 |
---|---|---|
committer | Ryan Dahl <ry@tinyclouds.org> | 2019-10-16 14:39:33 -0400 |
commit | f51dcc12d7a75a677529d63eb53d7a577d5b9289 (patch) | |
tree | 67c5ee1026a6da84e68b249a77067bfd0b313532 /std/fs/expand_glob_test.ts | |
parent | 99d8ac70dbf412ee5de9ad2370c75dcd51cc5def (diff) |
std: Move fs/path to the top-level (#3100)
Diffstat (limited to 'std/fs/expand_glob_test.ts')
-rw-r--r-- | std/fs/expand_glob_test.ts | 120 |
1 files changed, 120 insertions, 0 deletions
diff --git a/std/fs/expand_glob_test.ts b/std/fs/expand_glob_test.ts new file mode 100644 index 000000000..12b0b3d1a --- /dev/null +++ b/std/fs/expand_glob_test.ts @@ -0,0 +1,120 @@ +const { cwd } = Deno; +import { test, runIfMain } from "../testing/mod.ts"; +import { assert, assertEquals } from "../testing/asserts.ts"; +import { + isWindows, + join, + joinGlobs, + normalize, + relative +} from "../path/mod.ts"; +import { + ExpandGlobOptions, + expandGlob, + expandGlobSync +} from "./expand_glob.ts"; + +async function expandGlobArray( + globString: string, + options: ExpandGlobOptions +): Promise<string[]> { + const paths: string[] = []; + for await (const { filename } of expandGlob(globString, options)) { + paths.push(filename); + } + paths.sort(); + const pathsSync = [...expandGlobSync(globString, options)].map( + ({ filename }): string => filename + ); + pathsSync.sort(); + assertEquals(paths, pathsSync); + const root = normalize(options.root || cwd()); + for (const path of paths) { + assert(path.startsWith(root)); + } + const relativePaths = paths.map( + (path: string): string => relative(root, path) || "." + ); + relativePaths.sort(); + return relativePaths; +} + +function urlToFilePath(url: URL): string { + // Since `new URL('file:///C:/a').pathname` is `/C:/a`, remove leading slash. + return url.pathname.slice(url.protocol == "file:" && isWindows ? 1 : 0); +} + +const EG_OPTIONS: ExpandGlobOptions = { + root: urlToFilePath(new URL(join("testdata", "glob"), import.meta.url)), + includeDirs: true, + extended: false, + globstar: false +}; + +test(async function expandGlobWildcard(): Promise<void> { + const options = EG_OPTIONS; + assertEquals(await expandGlobArray("*", options), [ + "abc", + "abcdef", + "abcdefghi", + "subdir" + ]); +}); + +test(async function expandGlobTrailingSeparator(): Promise<void> { + const options = EG_OPTIONS; + assertEquals(await expandGlobArray("*/", options), ["subdir"]); +}); + +test(async function expandGlobParent(): Promise<void> { + const options = EG_OPTIONS; + assertEquals(await expandGlobArray("subdir/../*", options), [ + "abc", + "abcdef", + "abcdefghi", + "subdir" + ]); +}); + +test(async function expandGlobExt(): Promise<void> { + const options = { ...EG_OPTIONS, extended: true }; + assertEquals(await expandGlobArray("abc?(def|ghi)", options), [ + "abc", + "abcdef" + ]); + assertEquals(await expandGlobArray("abc*(def|ghi)", options), [ + "abc", + "abcdef", + "abcdefghi" + ]); + assertEquals(await expandGlobArray("abc+(def|ghi)", options), [ + "abcdef", + "abcdefghi" + ]); + assertEquals(await expandGlobArray("abc@(def|ghi)", options), ["abcdef"]); + assertEquals(await expandGlobArray("abc{def,ghi}", options), ["abcdef"]); + assertEquals(await expandGlobArray("abc!(def|ghi)", options), ["abc"]); +}); + +test(async function expandGlobGlobstar(): Promise<void> { + const options = { ...EG_OPTIONS, globstar: true }; + assertEquals( + await expandGlobArray(joinGlobs(["**", "abc"], options), options), + ["abc", join("subdir", "abc")] + ); +}); + +test(async function expandGlobGlobstarParent(): Promise<void> { + const options = { ...EG_OPTIONS, globstar: true }; + assertEquals( + await expandGlobArray(joinGlobs(["subdir", "**", ".."], options), options), + ["."] + ); +}); + +test(async function expandGlobIncludeDirs(): Promise<void> { + const options = { ...EG_OPTIONS, includeDirs: false }; + assertEquals(await expandGlobArray("subdir", options), []); +}); + +runIfMain(import.meta); |