appcenter-cli
Version:
Command line tool for Visual Studio App Center
117 lines (95 loc) • 3.47 kB
text/typescript
import { expect } from "chai";
import {
getOptionsDescription, getPositionalOptionsDescription, getClassHelpText,
shortName, longName, name, defaultValue, required, hasArg, help, position,
common
} from "../../../src/util/commandline/option-decorators";
describe("Command line option parsing", function () {
describe("options decorators", function () {
it("should return empty description for class without decorators", function () {
class Sample {
public value: string;
}
const source = new Sample();
const opts = getOptionsDescription(Object.getPrototypeOf(source));
expect(Object.keys(opts)).to.have.length(0);
});
it("should return correct description for one parameter", function () {
class Sample {
public value: string;
}
const opts = getOptionsDescription(Sample.prototype);
expect(opts).to.have.property("value");
expect(opts["value"].shortName).to.equal("v");
});
it("should return correct descriptions for multiple parameters", function () {
class Sample {
public flag: boolean;
public value: string;
public anotherArg: string;
}
const opts = getOptionsDescription(Object.getPrototypeOf(new Sample()));
expect(opts).to.have.property("flag");
expect(opts).to.have.property("value");
expect(opts).to.have.property("anotherArg");
const flagOpt = opts["flag"];
expect(flagOpt).to.have.property("shortName", "f");
expect(flagOpt.required).to.be.true;
const valueOpt = opts["value"];
expect(valueOpt).to.have.property("shortName", "v");
expect(valueOpt).to.have.property("longName", "value");
expect(valueOpt).to.have.property("defaultValue", "this is the default");
const anotherOpt = opts["anotherArg"];
expect(anotherOpt).to.have.property("longName", "another");
expect(anotherOpt.required).to.be.true;
expect(anotherOpt.hasArg).to.be.true;
expect(anotherOpt.common).to.be.true;
});
it("should return all args for base classes", function () {
class BaseSample {
public help: boolean;
public logLevel: string;
}
class Sample extends BaseSample {
public input: string;
}
const opts = getOptionsDescription(Sample.prototype);
expect(Object.keys(opts)).to.include("help")
.and.to.include("logLevel")
.and.to.include("input");
});
it("should return help string for command", function () {
class SampleWithHelp {
}
const text = getClassHelpText(SampleWithHelp);
expect(text).to.equal("This is the help text");
});
it("should create correct description for rest option", function () {
class Sample {
public rest: string[];
}
const opts = getPositionalOptionsDescription(Sample.prototype);
expect(opts).to.be.instanceof(Array).and.to.have.lengthOf(1);
});
});
});