// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license. import { assertEquals } from "../testing/asserts.ts"; import { parse } from "./mod.ts"; Deno.test(function booleanAndAliasIsNotUnknown(): void { const unknown: unknown[] = []; function unknownFn(arg: string, k?: string, v?: unknown): boolean { unknown.push({ arg, k, v }); return false; } const aliased = ["-h", "true", "--derp", "true"]; const regular = ["--herp", "true", "-d", "false"]; const opts = { alias: { h: "herp" }, boolean: "h", unknown: unknownFn, }; parse(aliased, opts); parse(regular, opts); assertEquals(unknown, [ { arg: "--derp", k: "derp", v: "true" }, { arg: "-d", k: "d", v: "false" }, ]); }); Deno.test(function flagBooleanTrueAnyDoubleHyphenArgumentIsNotUnknown(): void { const unknown: unknown[] = []; function unknownFn(arg: string, k?: string, v?: unknown): boolean { unknown.push({ arg, k, v }); return false; } const argv = parse(["--honk", "--tacos=good", "cow", "-p", "55"], { boolean: true, unknown: unknownFn, }); assertEquals(unknown, [ { arg: "--tacos=good", k: "tacos", v: "good" }, { arg: "cow", k: undefined, v: undefined }, { arg: "-p", k: "p", v: "55" }, ]); assertEquals(argv, { honk: true, _: [], }); }); Deno.test(function stringAndAliasIsNotUnkown(): void { const unknown: unknown[] = []; function unknownFn(arg: string, k?: string, v?: unknown): boolean { unknown.push({ arg, k, v }); return false; } const aliased = ["-h", "hello", "--derp", "goodbye"]; const regular = ["--herp", "hello", "-d", "moon"]; const opts = { alias: { h: "herp" }, string: "h", unknown: unknownFn, }; parse(aliased, opts); parse(regular, opts); assertEquals(unknown, [ { arg: "--derp", k: "derp", v: "goodbye" }, { arg: "-d", k: "d", v: "moon" }, ]); }); Deno.test(function defaultAndAliasIsNotUnknown(): void { const unknown: unknown[] = []; function unknownFn(arg: string, k?: string, v?: unknown): boolean { unknown.push({ arg, k, v }); return false; } const aliased = ["-h", "hello"]; const regular = ["--herp", "hello"]; const opts = { default: { h: "bar" }, alias: { h: "herp" }, unknown: unknownFn, }; parse(aliased, opts); parse(regular, opts); assertEquals(unknown, []); }); Deno.test(function valueFollowingDoubleHyphenIsNotUnknown(): void { const unknown: unknown[] = []; function unknownFn(arg: string, k?: string, v?: unknown): boolean { unknown.push({ arg, k, v }); return false; } const aliased = ["--bad", "--", "good", "arg"]; const opts = { "--": true, unknown: unknownFn, }; const argv = parse(aliased, opts); assertEquals(unknown, [{ arg: "--bad", k: "bad", v: true }]); assertEquals(argv, { "--": ["good", "arg"], _: [], }); });