blob: 9ae510ab1ed3c51d5f66569481af5252f365206e [file] [edit]
// Copyright (c) 2022, Google Inc. Please see the AUTHORS file
// for details. All rights reserved. Use of this source is governed by a
// BSD-style license that can be found in the LICENSE file.
import "package:test/test.dart";
import "../bin/src/argc.dart";
void main() {
test("empty", () {
var argc = CmdLineScanner([]);
expect(argc.moveNext(), false);
});
test("one short flag", () {
var argc = CmdLineScanner(["-f"]);
expect(argc.moveNext(), true);
expect(argc.isOption, true);
expect(argc.isShort, true);
expect(argc.current, "f");
expect(argc.currentFlagCharCode, 0x66 /*f*/);
expect(argc.hasValue, false);
expect(argc.moveNext(), false);
});
test("one long flag", () {
var argc = CmdLineScanner(["--fidelius"]);
expect(argc.moveNext(), true);
expect(argc.isOption, true);
expect(argc.isShort, false);
expect(argc.current, "fidelius");
expect(() => argc.currentFlagCharCode, throwsStateError);
expect(argc.hasValue, false);
expect(argc.moveNext(), false);
});
test("one literal", () {
var argc = CmdLineScanner(["leviosa"]);
expect(argc.moveNext(), true);
expect(argc.isOption, false);
expect(argc.isShort, false);
expect(argc.current, "leviosa");
expect(() => argc.currentFlagCharCode, throwsStateError);
expect(argc.hasValue, false);
expect(argc.moveNext(), false);
});
test("single - is a literal", () {
var argc = CmdLineScanner(["-"]);
expect(argc.moveNext(), true);
expect(argc.isOption, false);
expect(argc.isShort, false);
expect(argc.current, "-");
expect(() => argc.currentFlagCharCode, throwsStateError);
expect(argc.hasValue, false);
expect(argc.moveNext(), false);
});
test("single -- is an empty option", () {
var argc = CmdLineScanner(["--"]);
expect(argc.moveNext(), true);
expect(argc.isOption, true);
expect(argc.isShort, false);
expect(argc.current, "");
expect(() => argc.currentFlagCharCode, throwsStateError);
expect(argc.hasValue, false);
expect(argc.moveNext(), false);
});
test("combined short with value", () {
var argc = CmdLineScanner(["-xyval"]);
expect(argc.moveNext(), true);
expect(argc.isOption, true);
expect(argc.isShort, true);
expect(argc.current, "x");
expect(argc.currentFlagCharCode, "x".codeUnitAt(0));
expect(argc.hasValue, true);
expect(argc.moveNext(), true);
expect(argc.isOption, true);
expect(argc.isShort, true);
expect(argc.current, "y");
expect(argc.currentFlagCharCode, "y".codeUnitAt(0));
expect(argc.hasValue, true);
expect(argc.moveNextValue(), true);
expect(argc.isValue, true);
expect(argc.currentValue, "val");
expect(argc.moveNextValue(), false);
});
test("multiple short with values", () {
var argc = CmdLineScanner(["-xval1", "-y", "val2", "-z"]);
expect(argc.moveNext(), true);
expect(argc.isOption, true);
expect(argc.isShort, true);
expect(argc.current, "x");
expect(argc.currentFlagCharCode, "x".codeUnitAt(0));
expect(argc.hasValue, true);
expect(argc.moveNextValue(), true);
expect(argc.isValue, true);
expect(argc.currentValue, "val1");
expect(argc.moveNext(), true);
expect(argc.isOption, true);
expect(argc.isShort, true);
expect(argc.current, "y");
expect(argc.currentFlagCharCode, "y".codeUnitAt(0));
expect(argc.hasValue, true);
expect(argc.moveNextValue(), true);
expect(argc.isValue, true);
expect(argc.currentValue, "val2");
expect(argc.moveNext(), true);
expect(argc.isOption, true);
expect(argc.isShort, true);
expect(argc.current, "z");
expect(argc.hasValue, false);
expect(argc.moveNextValue(), false);
expect(argc.isValue, false);
expect(argc.moveNext(), false);
});
test("multiple longs with values", () {
var argc = CmdLineScanner(["--xx=val1", "--yy", "val2", "--zz"]);
expect(argc.moveNext(), true);
expect(argc.isOption, true);
expect(argc.isShort, false);
expect(argc.current, "xx");
expect(() => argc.currentFlagCharCode, throwsStateError);
expect(argc.hasValue, true);
expect(argc.moveNextValue(), true);
expect(argc.isValue, true);
expect(argc.currentValue, "val1");
expect(argc.moveNext(), true);
expect(argc.isOption, true);
expect(argc.isShort, false);
expect(argc.current, "yy");
expect(() => argc.currentFlagCharCode, throwsStateError);
expect(argc.hasValue, true);
expect(argc.moveNextValue(), true);
expect(argc.isValue, true);
expect(argc.currentValue, "val2");
expect(argc.moveNext(), true);
expect(argc.isOption, true);
expect(argc.isShort, false);
expect(argc.current, "zz");
expect(argc.hasValue, false);
expect(argc.moveNextValue(), false);
expect(argc.isValue, false);
expect(argc.moveNext(), false);
});
test("next not value", () {
var argc = CmdLineScanner(["-x", "--y", "-z"]);
expect(argc.moveNext(), true);
expect(argc.current, "x");
expect(argc.hasValue, false);
expect(argc.moveNextValue(), false);
expect(argc.moveNext(), true);
expect(argc.current, "y");
expect(argc.hasValue, false);
expect(argc.moveNextValue(), false);
expect(argc.moveNext(), true);
expect(argc.current, "z");
expect(argc.hasValue, false);
expect(argc.moveNext(), false);
});
}