secret-polar-reworks
Version:
Polar is a development environment to compile, deploy, test, run scrt contracts on different networks.
425 lines (378 loc) • 12.2 kB
text/typescript
/* eslint-disable */
import { assert } from "chai";
import { ErrorDescriptor, ERRORS } from "../../../src/internal/core/errors-list";
import { ArgumentsParser } from "../../../src/internal/cli/arguments-parser";
import {
boolean,
int,
string
} from "../../../src/internal/core/params/argument-types";
import {
POLAR_PARAM_DEFINITIONS,
POLAR_SHORT_PARAM_SUBSTITUTIONS
} from "../../../src/internal/core/params/polar-params";
import {
OverriddenTaskDefinition,
SimpleTaskDefinition
} from "../../../src/internal/core/tasks/task-definitions";
import {
RuntimeArgs,
TaskArguments,
TaskDefinition
} from "../../../src/types";
import { expectPolarError } from "../../helpers/errors";
const SHOW_STACK = "--show-stack-traces";
function parseAndexpectPolarError (
argumentsParser: ArgumentsParser,
envArgs: RuntimeArgs,
rawCLAs: string[],
errorDescriptor: ErrorDescriptor): void {
expectPolarError(
() =>
argumentsParser.parseRuntimeArgs(
POLAR_PARAM_DEFINITIONS,
POLAR_SHORT_PARAM_SUBSTITUTIONS,
envArgs,
rawCLAs
),
errorDescriptor
);
}
describe("ArgumentsParser", () => {
let argumentsParser: ArgumentsParser;
let envArgs: RuntimeArgs;
let taskDefinition: TaskDefinition;
let overridenTaskDefinition: OverriddenTaskDefinition;
beforeEach(() => {
argumentsParser = new ArgumentsParser();
envArgs = {
network: "test",
showStackTraces: false,
version: false,
help: false,
verbose: false
};
taskDefinition = new SimpleTaskDefinition("compile", true)
.addParam("param", "just a param", "a default value", string)
.addParam("bleep", "useless param", 1602, int, true);
const baseTaskDefinition = new SimpleTaskDefinition("overriddenTask")
.addParam("strParam", "a str param", "defaultValue", string)
.addFlag("aFlag", "a flag param");
overridenTaskDefinition = new OverriddenTaskDefinition(baseTaskDefinition)
.addFlag("overriddenFlag", "added flag param")
.addOptionalParam("overriddenOptParam", "added opt param");
});
it("should transform a param name into CLA", () => {
assert.equal(
ArgumentsParser.paramNameToCLA("showStackTraces"),
SHOW_STACK
);
assert.equal(ArgumentsParser.paramNameToCLA("version"), "--version");
});
it("Should throw if a param name CLA isn't all lowercase", () => {
expectPolarError(
() => ArgumentsParser.cLAToParamName("--show-Stack-traces"),
ERRORS.ARGUMENTS.PARAM_NAME_INVALID_CASING
);
expectPolarError(
() => ArgumentsParser.cLAToParamName("--shOw-stack-traces"),
ERRORS.ARGUMENTS.PARAM_NAME_INVALID_CASING
);
expectPolarError(
() => ArgumentsParser.cLAToParamName("--show-stack-tRaces"),
ERRORS.ARGUMENTS.PARAM_NAME_INVALID_CASING
);
});
it("should transform CLA into a param name", () => {
assert.equal(ArgumentsParser.cLAToParamName("--run"), "run");
assert.equal(
ArgumentsParser.cLAToParamName(SHOW_STACK),
"showStackTraces"
);
});
it("should detect param name format", () => {
assert.isTrue(argumentsParser._hasCLAParamNameFormat("--run"));
assert.isFalse(argumentsParser._hasCLAParamNameFormat("run"));
});
it("should detect parameter names", () => {
assert.isTrue(
argumentsParser._isCLAParamName(
"--show-stack-traces",
POLAR_PARAM_DEFINITIONS
)
);
assert.isFalse(
argumentsParser._isCLAParamName("sarasa", POLAR_PARAM_DEFINITIONS)
);
assert.isFalse(
argumentsParser._isCLAParamName("--sarasa", POLAR_PARAM_DEFINITIONS)
);
});
describe("polar arguments", () => {
it("should parse polar arguments with task", () => {
const rawCLAs: string[] = [
SHOW_STACK,
"--network",
"local",
"compile",
"--task-param"
];
const {
runtimeArgs,
taskName,
unparsedCLAs
} = argumentsParser.parseRuntimeArgs(
POLAR_PARAM_DEFINITIONS,
POLAR_SHORT_PARAM_SUBSTITUTIONS,
envArgs,
rawCLAs
);
assert.equal(taskName, "compile");
assert.equal(runtimeArgs.showStackTraces, true);
assert.equal(runtimeArgs.network, "local");
assert.equal(unparsedCLAs.length, 1);
assert.equal("--task-param", unparsedCLAs[0]);
});
it("should parse polar arguments after taskname", () => {
const rawCLAs: string[] = [
"compile",
"--task-param",
"--show-stack-traces",
"--network",
"local"
];
const {
runtimeArgs,
taskName,
unparsedCLAs
} = argumentsParser.parseRuntimeArgs(
POLAR_PARAM_DEFINITIONS,
POLAR_SHORT_PARAM_SUBSTITUTIONS,
envArgs,
rawCLAs
);
assert.equal(taskName, "compile");
assert.equal(runtimeArgs.showStackTraces, true);
assert.equal(runtimeArgs.network, "local");
assert.equal(unparsedCLAs.length, 1);
assert.equal("--task-param", unparsedCLAs[0]);
});
it("should fail trying to parse task arguments before taskname", () => {
const rawCLAs: string[] = [
"--task-param",
"compile",
"--show-stack-traces",
"--network",
"local"
];
parseAndexpectPolarError(
argumentsParser,
envArgs,
rawCLAs,
ERRORS.ARGUMENTS.UNRECOGNIZED_COMMAND_LINE_ARG);
});
it("should parse a polar argument", () => {
const rawCLAs: string[] = [
"--show-stack-traces",
"--network",
"local",
"compile"
];
const runtimeArgs: TaskArguments = {};
assert.equal(
0,
argumentsParser._parseArgumentAt(
rawCLAs,
0,
POLAR_PARAM_DEFINITIONS,
runtimeArgs
)
);
assert.equal(runtimeArgs.showStackTraces, true);
assert.equal(
2,
argumentsParser._parseArgumentAt(
rawCLAs,
1,
POLAR_PARAM_DEFINITIONS,
runtimeArgs
)
);
assert.equal(runtimeArgs.network, "local");
});
it("should fail trying to parse polar with invalid argument", () => {
const rawCLAs: string[] = [
SHOW_STACK,
"--network",
"local",
"--invalid-param"
];
parseAndexpectPolarError(
argumentsParser,
envArgs,
rawCLAs,
ERRORS.ARGUMENTS.UNRECOGNIZED_COMMAND_LINE_ARG);
});
it("should fail trying to parse a repeated argument", () => {
const rawCLAs: string[] = [
SHOW_STACK,
"--network",
"local",
"--network",
"local",
"compile"
];
parseAndexpectPolarError(
argumentsParser,
envArgs,
rawCLAs,
ERRORS.ARGUMENTS.REPEATED_PARAM);
});
it("should only add non-present arguments", () => {
const runtimeArgs = argumentsParser._addBuilderDefaultArguments(
POLAR_PARAM_DEFINITIONS,
envArgs,
{
showStackTraces: true
}
);
assert.isTrue(runtimeArgs.showStackTraces);
});
it("should not change network unless specified by user", () => {
const rawCLAs: string[] = [
SHOW_STACK,
"compile",
"--task-param"
];
const {
runtimeArgs,
taskName,
unparsedCLAs
} = argumentsParser.parseRuntimeArgs(
POLAR_PARAM_DEFINITIONS,
POLAR_SHORT_PARAM_SUBSTITUTIONS,
envArgs,
rawCLAs
);
assert.equal(taskName, "compile");
assert.equal(runtimeArgs.showStackTraces, true);
assert.equal(runtimeArgs.network, "test");
assert.equal(unparsedCLAs.length, 1);
assert.equal("--task-param", unparsedCLAs[0]);
});
});
describe("tasks arguments", () => {
it("should parse tasks arguments", () => {
const rawCLAs: string[] = ["--param", "testing", "--bleep", "1337"];
const { paramArguments, rawPositionalArguments } =
argumentsParser._parseTaskParamArguments(taskDefinition, rawCLAs);
assert.deepEqual(paramArguments, { param: "testing", bleep: 1337 });
assert.equal(rawPositionalArguments.length, 0);
});
it("should parse overridden tasks arguments", () => {
const rawCLAs: string[] = [
"--str-param",
"testing",
"--a-flag",
"--overridden-flag",
"--overridden-opt-param",
"optValue"
];
const { paramArguments, rawPositionalArguments } =
argumentsParser._parseTaskParamArguments(overridenTaskDefinition, rawCLAs);
assert.deepEqual(paramArguments, {
strParam: "testing",
aFlag: true,
overriddenFlag: true,
overriddenOptParam: "optValue"
});
assert.equal(rawPositionalArguments.length, 0);
});
it("should parse task with variadic arguments", () => {
taskDefinition.addVariadicPositionalParam(
"variadic",
"a variadic params",
[],
int
);
const rawPositionalArguments = ["16", "02"];
const positionalArguments = argumentsParser._parsePositionalParamArgs(
rawPositionalArguments,
taskDefinition.positionalParamDefinitions
);
assert.deepEqual(positionalArguments.variadic, [16, 2]);
});
it("should parse task with default variadic arguments", () => {
taskDefinition.addVariadicPositionalParam(
"variadic",
"a variadic params",
[1729],
int
);
const rawPositionalArguments: string[] = [];
// tslint:disable-next-line:no-string-literal
const positionalArguments = argumentsParser._parsePositionalParamArgs(
rawPositionalArguments,
taskDefinition.positionalParamDefinitions
);
assert.deepEqual(positionalArguments.variadic, [1729]);
});
it("should fail when passing invalid parameter", () => {
expectPolarError(() => {
argumentsParser.parseTaskArguments(
taskDefinition,
["--invalid-parameter", "not_valid"]);
}, ERRORS.ARGUMENTS.UNRECOGNIZED_PARAM_NAME);
});
it("should fail to parse task without non optional variadic arguments", () => {
taskDefinition.addVariadicPositionalParam(
"variadic",
"a variadic params"
);
expectPolarError(() => {
argumentsParser.parseTaskArguments(
taskDefinition,
["--param", "testing", "--bleep", "1337"]);
}, ERRORS.ARGUMENTS.MISSING_POSITIONAL_ARG);
});
it("should fail to parse task without non optional argument", () => {
const definition = new SimpleTaskDefinition("compile", true);
definition.addParam("param", "just a param");
definition.addParam("bleep", "useless param", 1602, int, true);
expectPolarError(() => {
argumentsParser.parseTaskArguments(definition, []);
}, ERRORS.ARGUMENTS.MISSING_TASK_ARGUMENT);
});
it("should fail when passing unneeded arguments", () => {
expectPolarError(() => {
argumentsParser.parseTaskArguments(taskDefinition, ["more", "arguments"]);
}, ERRORS.ARGUMENTS.UNRECOGNIZED_POSITIONAL_ARG);
});
it("should parse task with positional arguments", () => {
const rawCLAs: string[] = [
"--param",
"testing",
"--bleep",
"1337",
"foobar"
];
taskDefinition.addPositionalParam("positional", "a posititon param");
const args = argumentsParser.parseTaskArguments(taskDefinition, rawCLAs);
assert.deepEqual(args, {
param: "testing",
bleep: 1337,
positional: "foobar"
});
});
it("Should throw the right error if the last CLA is a non-flag --param", () => {
const rawCLAs: string[] = ["--b"];
taskDefinition = new SimpleTaskDefinition("t", false)
.addOptionalParam("b", "A boolean", true, boolean)
.setAction(async () => {});
expectPolarError(
() => argumentsParser.parseTaskArguments(taskDefinition, rawCLAs),
ERRORS.ARGUMENTS.MISSING_TASK_ARGUMENT
);
});
});
});