From 294697330deb01521906c34b516d1c215edbbe2a Mon Sep 17 00:00:00 2001 From: Alberto Ricart Date: Tue, 24 Aug 2021 15:05:32 -0500 Subject: [PATCH] [FIX] when getting array values, the expected result is an empty array if a flag was not specified. --- mod.ts | 3 ++- test.ts | 40 ++++++++++++++++++++++++++++++++++++++-- 2 files changed, 40 insertions(+), 3 deletions(-) diff --git a/mod.ts b/mod.ts index c8a48e3..5c2f095 100644 --- a/mod.ts +++ b/mod.ts @@ -103,7 +103,7 @@ export class FlagsImpl implements Flags { if (!f) { throw new Error(`unknown flag ${n}`); } - let v = f.value ?? f.default ?? this.defaultValue(f); + let v = f.value ?? []; if (!Array.isArray(v)) { v = [v]; } @@ -386,6 +386,7 @@ export class RootCommand extends Command implements Execute { // deno-lint-ignore no-explicit-any const parseOpts = { "--": true } as any; flags.forEach((f) => { + f.value = null; const key = f.short.length ? f.short : f.name; if (f.short && f.name) { diff --git a/test.ts b/test.ts index 18db1a7..88bc854 100644 --- a/test.ts +++ b/test.ts @@ -1,5 +1,6 @@ import { assert, + assertArrayIncludes, assertEquals, assertThrows, } from "https://deno.land/std/testing/asserts.ts"; @@ -221,13 +222,13 @@ Deno.test("flags - array values returns array", async () => { assertEquals(rv, 0); }); -Deno.test("flags - array values returns default", async () => { +Deno.test("flags - array values returns empty", async () => { const root = cli({ use: "test" }); const t = root.addCommand({ use: "t", run: (_cmd, _args, flags): Promise => { const v = flags.values("x"); - assertEquals(v, [0]); + assertEquals(v, []); return Promise.resolve(0); }, }); @@ -260,3 +261,38 @@ Deno.test("flags - unknown values throws", async () => { const rv = await root.execute(["t"]); assertEquals(rv, 0); }); + +Deno.test("flags - values with no value set returns empty", async () => { + const root = cli({ use: "test" }); + let values: string[] = []; + const t = root.addCommand({ + use: "t", + run: (_cmd, _args, flags): Promise => { + values = flags.values("v"); + return Promise.resolve(0); + }, + }); + t.addFlag({ + name: "v", + type: "string", + }); + + let rv = await root.execute(["t"]); + assertEquals(rv, 0); + console.log(values); + assertEquals(values.length, 0); + + rv = await root.execute(["t", "--v", "a"]); + assertEquals(rv, 0); + assertEquals(values.length, 1); + assertArrayIncludes(values, ["a"]); + + rv = await root.execute(["t", "--v", "a", "--v", "b"]); + assertEquals(rv, 0); + assertEquals(values.length, 2); + assertArrayIncludes(values, ["a", "b"]); + + rv = await root.execute(["t"]); + assertEquals(rv, 0); + assertEquals(values.length, 0); +});