1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-12-28 01:59:06 -05:00
denoland-deno/std/flags/bool_test.ts

203 lines
5.1 KiB
TypeScript
Executable file

// 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 flagBooleanDefaultFalse(): void {
const argv = parse(["moo"], {
boolean: ["t", "verbose"],
default: { verbose: false, t: false },
});
assertEquals(argv, {
verbose: false,
t: false,
_: ["moo"],
});
assertEquals(typeof argv.verbose, "boolean");
assertEquals(typeof argv.t, "boolean");
});
Deno.test(function booleanGroups(): void {
const argv = parse(["-x", "-z", "one", "two", "three"], {
boolean: ["x", "y", "z"],
});
assertEquals(argv, {
x: true,
y: false,
z: true,
_: ["one", "two", "three"],
});
assertEquals(typeof argv.x, "boolean");
assertEquals(typeof argv.y, "boolean");
assertEquals(typeof argv.z, "boolean");
});
Deno.test(function booleanAndAliasWithChainableApi(): void {
const aliased = ["-h", "derp"];
const regular = ["--herp", "derp"];
const aliasedArgv = parse(aliased, {
boolean: "herp",
alias: { h: "herp" },
});
const propertyArgv = parse(regular, {
boolean: "herp",
alias: { h: "herp" },
});
const expected = {
herp: true,
h: true,
_: ["derp"],
};
assertEquals(aliasedArgv, expected);
assertEquals(propertyArgv, expected);
});
Deno.test(function booleanAndAliasWithOptionsHash(): void {
const aliased = ["-h", "derp"];
const regular = ["--herp", "derp"];
const opts = {
alias: { h: "herp" },
boolean: "herp",
};
const aliasedArgv = parse(aliased, opts);
const propertyArgv = parse(regular, opts);
const expected = {
herp: true,
h: true,
_: ["derp"],
};
assertEquals(aliasedArgv, expected);
assertEquals(propertyArgv, expected);
});
Deno.test(function booleanAndAliasArrayWithOptionsHash(): void {
const aliased = ["-h", "derp"];
const regular = ["--herp", "derp"];
const alt = ["--harp", "derp"];
const opts = {
alias: { h: ["herp", "harp"] },
boolean: "h",
};
const aliasedArgv = parse(aliased, opts);
const propertyArgv = parse(regular, opts);
const altPropertyArgv = parse(alt, opts);
const expected = {
harp: true,
herp: true,
h: true,
_: ["derp"],
};
assertEquals(aliasedArgv, expected);
assertEquals(propertyArgv, expected);
assertEquals(altPropertyArgv, expected);
});
Deno.test(function booleanAndAliasUsingExplicitTrue(): void {
const aliased = ["-h", "true"];
const regular = ["--herp", "true"];
const opts = {
alias: { h: "herp" },
boolean: "h",
};
const aliasedArgv = parse(aliased, opts);
const propertyArgv = parse(regular, opts);
const expected = {
herp: true,
h: true,
_: [],
};
assertEquals(aliasedArgv, expected);
assertEquals(propertyArgv, expected);
});
// regression, see https://github.com/substack/node-optimist/issues/71
// boolean and --x=true
Deno.test(function booleanAndNonBoolean(): void {
const parsed = parse(["--boool", "--other=true"], {
boolean: "boool",
});
assertEquals(parsed.boool, true);
assertEquals(parsed.other, "true");
const parsed2 = parse(["--boool", "--other=false"], {
boolean: "boool",
});
assertEquals(parsed2.boool, true);
assertEquals(parsed2.other, "false");
});
Deno.test(function booleanParsingTrue(): void {
const parsed = parse(["--boool=true"], {
default: {
boool: false,
},
boolean: ["boool"],
});
assertEquals(parsed.boool, true);
});
Deno.test(function booleanParsingFalse(): void {
const parsed = parse(["--boool=false"], {
default: {
boool: true,
},
boolean: ["boool"],
});
assertEquals(parsed.boool, false);
});
Deno.test(function booleanParsingTrueLike(): void {
const parsed = parse(["-t", "true123"], { boolean: ["t"] });
assertEquals(parsed.t, true);
const parsed2 = parse(["-t", "123"], { boolean: ["t"] });
assertEquals(parsed2.t, true);
const parsed3 = parse(["-t", "false123"], { boolean: ["t"] });
assertEquals(parsed3.t, true);
});
Deno.test(function booleanNegationAfterBoolean(): void {
const parsed = parse(["--foo", "--no-foo"], { boolean: ["foo"] });
assertEquals(parsed.foo, false);
const parsed2 = parse(["--foo", "--no-foo", "123"], { boolean: ["foo"] });
assertEquals(parsed2.foo, false);
});
Deno.test(function booleanAfterBooleanNegation(): void {
const parsed = parse(["--no--foo", "--foo"], { boolean: ["foo"] });
assertEquals(parsed.foo, true);
const parsed2 = parse(["--no--foo", "--foo", "123"], { boolean: ["foo"] });
assertEquals(parsed2.foo, true);
});
Deno.test(function latestFlagIsBooleanNegation(): void {
const parsed = parse(["--no-foo", "--foo", "--no-foo"], { boolean: ["foo"] });
assertEquals(parsed.foo, false);
const parsed2 = parse(["--no-foo", "--foo", "--no-foo", "123"], {
boolean: ["foo"],
});
assertEquals(parsed2.foo, false);
});
Deno.test(function latestFlagIsBoolean(): void {
const parsed = parse(["--foo", "--no-foo", "--foo"], { boolean: ["foo"] });
assertEquals(parsed.foo, true);
const parsed2 = parse(["--foo", "--no-foo", "--foo", "123"], {
boolean: ["foo"],
});
assertEquals(parsed2.foo, true);
});