summaryrefslogtreecommitdiff
path: root/fs/glob_test.ts
diff options
context:
space:
mode:
Diffstat (limited to 'fs/glob_test.ts')
-rw-r--r--fs/glob_test.ts134
1 files changed, 134 insertions, 0 deletions
diff --git a/fs/glob_test.ts b/fs/glob_test.ts
new file mode 100644
index 000000000..50e6abef8
--- /dev/null
+++ b/fs/glob_test.ts
@@ -0,0 +1,134 @@
+const { mkdir, open } = Deno;
+import { FileInfo } from "deno";
+import { test, assert } from "../testing/mod.ts";
+import { glob } from "./glob.ts";
+import { join } from "./path.ts";
+import { testWalk } from "./walk_test.ts";
+import { walk, walkSync, WalkOptions } from "./walk.ts";
+
+async function touch(path: string): Promise<void> {
+ await open(path, "w");
+}
+
+async function walkArray(
+ dirname: string = ".",
+ options: WalkOptions = {}
+): Promise<Array<string>> {
+ const arr: string[] = [];
+ for await (const f of walk(dirname, { ...options })) {
+ arr.push(f.path.replace(/\\/g, "/"));
+ }
+ arr.sort();
+ const arr_sync = Array.from(walkSync(dirname, options), (f: FileInfo) =>
+ f.path.replace(/\\/g, "/")
+ ).sort();
+ assert.equal(arr, arr_sync);
+ return arr;
+}
+
+test({
+ name: "glob: glob to regex",
+ fn() {
+ assert.equal(glob("unicorn.*") instanceof RegExp, true);
+ assert.equal(glob("unicorn.*").test("poney.ts"), false);
+ assert.equal(glob("unicorn.*").test("unicorn.py"), true);
+ assert.equal(glob("*.ts").test("poney.ts"), true);
+ assert.equal(glob("*.ts").test("unicorn.js"), false);
+ assert.equal(
+ glob(join("unicorn", "**", "cathedral.ts")).test(
+ join("unicorn", "in", "the", "cathedral.ts")
+ ),
+ true
+ );
+ assert.equal(
+ glob(join("unicorn", "**", "cathedral.ts")).test(
+ join("unicorn", "in", "the", "kitchen.ts")
+ ),
+ false
+ );
+ assert.equal(
+ glob(join("unicorn", "**", "bathroom.*")).test(
+ join("unicorn", "sleeping", "in", "bathroom.py")
+ ),
+ true
+ );
+ assert.equal(
+ glob(join("unicorn", "!(sleeping)", "bathroom.ts"), {
+ extended: true
+ }).test(join("unicorn", "flying", "bathroom.ts")),
+ true
+ );
+ assert.equal(
+ glob(join("unicorn", "(!sleeping)", "bathroom.ts"), {
+ extended: true
+ }).test(join("unicorn", "sleeping", "bathroom.ts")),
+ false
+ );
+ }
+});
+
+testWalk(
+ async (d: string) => {
+ await mkdir(d + "/a");
+ await touch(d + "/a/x.ts");
+ },
+ async function globInWalk() {
+ const arr = await walkArray(".", { match: [glob("*.ts")] });
+ assert.equal(arr.length, 1);
+ assert.equal(arr[0], "./a/x.ts");
+ }
+);
+
+testWalk(
+ async (d: string) => {
+ await mkdir(d + "/a");
+ await mkdir(d + "/b");
+ await touch(d + "/a/x.ts");
+ await touch(d + "/b/z.ts");
+ await touch(d + "/b/z.js");
+ },
+ async function globInWalkWildcardFiles() {
+ const arr = await walkArray(".", { match: [glob("*.ts")] });
+ assert.equal(arr.length, 2);
+ assert.equal(arr[0], "./a/x.ts");
+ assert.equal(arr[1], "./b/z.ts");
+ }
+);
+
+testWalk(
+ async (d: string) => {
+ await mkdir(d + "/a");
+ await mkdir(d + "/a/yo");
+ await touch(d + "/a/yo/x.ts");
+ },
+ async function globInWalkFolderWildcard() {
+ const arr = await walkArray(".", {
+ match: [
+ glob(join("a", "**", "*.ts"), {
+ flags: "g",
+ extended: true,
+ globstar: true
+ })
+ ]
+ });
+ assert.equal(arr.length, 1);
+ assert.equal(arr[0], "./a/yo/x.ts");
+ }
+);
+
+testWalk(
+ async (d: string) => {
+ await touch(d + "/x.ts");
+ await touch(d + "/x.js");
+ await touch(d + "/b.js");
+ },
+ async function globInWalkWildcardExtension() {
+ const arr = await walkArray(".", {
+ match: [glob("x.*", { flags: "g", extended: true, globstar: true })]
+ });
+ console.log(arr);
+ assert.equal(arr.length, 2);
+ assert.equal(arr[0], "./x.js");
+ assert.equal(arr[1], "./x.ts");
+ }
+);