summaryrefslogtreecommitdiff
path: root/std/fs/expand_glob_test.ts
diff options
context:
space:
mode:
authorNayeem Rahman <muhammed.9939@gmail.com>2019-10-16 19:39:33 +0100
committerRyan Dahl <ry@tinyclouds.org>2019-10-16 14:39:33 -0400
commitf51dcc12d7a75a677529d63eb53d7a577d5b9289 (patch)
tree67c5ee1026a6da84e68b249a77067bfd0b313532 /std/fs/expand_glob_test.ts
parent99d8ac70dbf412ee5de9ad2370c75dcd51cc5def (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.ts120
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);