5849898283
Unit tests functional and coverage back to 100% Add more routes to dictionary, add more credentials, add default port 5554, rename cameradar logs ENV variable, improve unit test readability, remove tmp file
180 lines
4.4 KiB
Go
180 lines
4.4 KiB
Go
// Copyright 2009 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package pflag
|
|
|
|
import (
|
|
"bytes"
|
|
"strconv"
|
|
"testing"
|
|
)
|
|
|
|
// This value can be a boolean ("true", "false") or "maybe"
|
|
type triStateValue int
|
|
|
|
const (
|
|
triStateFalse triStateValue = 0
|
|
triStateTrue triStateValue = 1
|
|
triStateMaybe triStateValue = 2
|
|
)
|
|
|
|
const strTriStateMaybe = "maybe"
|
|
|
|
func (v *triStateValue) IsBoolFlag() bool {
|
|
return true
|
|
}
|
|
|
|
func (v *triStateValue) Get() interface{} {
|
|
return triStateValue(*v)
|
|
}
|
|
|
|
func (v *triStateValue) Set(s string) error {
|
|
if s == strTriStateMaybe {
|
|
*v = triStateMaybe
|
|
return nil
|
|
}
|
|
boolVal, err := strconv.ParseBool(s)
|
|
if boolVal {
|
|
*v = triStateTrue
|
|
} else {
|
|
*v = triStateFalse
|
|
}
|
|
return err
|
|
}
|
|
|
|
func (v *triStateValue) String() string {
|
|
if *v == triStateMaybe {
|
|
return strTriStateMaybe
|
|
}
|
|
return strconv.FormatBool(*v == triStateTrue)
|
|
}
|
|
|
|
// The type of the flag as required by the pflag.Value interface
|
|
func (v *triStateValue) Type() string {
|
|
return "version"
|
|
}
|
|
|
|
func setUpFlagSet(tristate *triStateValue) *FlagSet {
|
|
f := NewFlagSet("test", ContinueOnError)
|
|
*tristate = triStateFalse
|
|
flag := f.VarPF(tristate, "tristate", "t", "tristate value (true, maybe or false)")
|
|
flag.NoOptDefVal = "true"
|
|
return f
|
|
}
|
|
|
|
func TestExplicitTrue(t *testing.T) {
|
|
var tristate triStateValue
|
|
f := setUpFlagSet(&tristate)
|
|
err := f.Parse([]string{"--tristate=true"})
|
|
if err != nil {
|
|
t.Fatal("expected no error; got", err)
|
|
}
|
|
if tristate != triStateTrue {
|
|
t.Fatal("expected", triStateTrue, "(triStateTrue) but got", tristate, "instead")
|
|
}
|
|
}
|
|
|
|
func TestImplicitTrue(t *testing.T) {
|
|
var tristate triStateValue
|
|
f := setUpFlagSet(&tristate)
|
|
err := f.Parse([]string{"--tristate"})
|
|
if err != nil {
|
|
t.Fatal("expected no error; got", err)
|
|
}
|
|
if tristate != triStateTrue {
|
|
t.Fatal("expected", triStateTrue, "(triStateTrue) but got", tristate, "instead")
|
|
}
|
|
}
|
|
|
|
func TestShortFlag(t *testing.T) {
|
|
var tristate triStateValue
|
|
f := setUpFlagSet(&tristate)
|
|
err := f.Parse([]string{"-t"})
|
|
if err != nil {
|
|
t.Fatal("expected no error; got", err)
|
|
}
|
|
if tristate != triStateTrue {
|
|
t.Fatal("expected", triStateTrue, "(triStateTrue) but got", tristate, "instead")
|
|
}
|
|
}
|
|
|
|
func TestShortFlagExtraArgument(t *testing.T) {
|
|
var tristate triStateValue
|
|
f := setUpFlagSet(&tristate)
|
|
// The"maybe"turns into an arg, since short boolean options will only do true/false
|
|
err := f.Parse([]string{"-t", "maybe"})
|
|
if err != nil {
|
|
t.Fatal("expected no error; got", err)
|
|
}
|
|
if tristate != triStateTrue {
|
|
t.Fatal("expected", triStateTrue, "(triStateTrue) but got", tristate, "instead")
|
|
}
|
|
args := f.Args()
|
|
if len(args) != 1 || args[0] != "maybe" {
|
|
t.Fatal("expected an extra 'maybe' argument to stick around")
|
|
}
|
|
}
|
|
|
|
func TestExplicitMaybe(t *testing.T) {
|
|
var tristate triStateValue
|
|
f := setUpFlagSet(&tristate)
|
|
err := f.Parse([]string{"--tristate=maybe"})
|
|
if err != nil {
|
|
t.Fatal("expected no error; got", err)
|
|
}
|
|
if tristate != triStateMaybe {
|
|
t.Fatal("expected", triStateMaybe, "(triStateMaybe) but got", tristate, "instead")
|
|
}
|
|
}
|
|
|
|
func TestExplicitFalse(t *testing.T) {
|
|
var tristate triStateValue
|
|
f := setUpFlagSet(&tristate)
|
|
err := f.Parse([]string{"--tristate=false"})
|
|
if err != nil {
|
|
t.Fatal("expected no error; got", err)
|
|
}
|
|
if tristate != triStateFalse {
|
|
t.Fatal("expected", triStateFalse, "(triStateFalse) but got", tristate, "instead")
|
|
}
|
|
}
|
|
|
|
func TestImplicitFalse(t *testing.T) {
|
|
var tristate triStateValue
|
|
f := setUpFlagSet(&tristate)
|
|
err := f.Parse([]string{})
|
|
if err != nil {
|
|
t.Fatal("expected no error; got", err)
|
|
}
|
|
if tristate != triStateFalse {
|
|
t.Fatal("expected", triStateFalse, "(triStateFalse) but got", tristate, "instead")
|
|
}
|
|
}
|
|
|
|
func TestInvalidValue(t *testing.T) {
|
|
var tristate triStateValue
|
|
f := setUpFlagSet(&tristate)
|
|
var buf bytes.Buffer
|
|
f.SetOutput(&buf)
|
|
err := f.Parse([]string{"--tristate=invalid"})
|
|
if err == nil {
|
|
t.Fatal("expected an error but did not get any, tristate has value", tristate)
|
|
}
|
|
}
|
|
|
|
func TestBoolP(t *testing.T) {
|
|
b := BoolP("bool", "b", false, "bool value in CommandLine")
|
|
c := BoolP("c", "c", false, "other bool value")
|
|
args := []string{"--bool"}
|
|
if err := CommandLine.Parse(args); err != nil {
|
|
t.Error("expected no error, got ", err)
|
|
}
|
|
if *b != true {
|
|
t.Errorf("expected b=true got b=%v", *b)
|
|
}
|
|
if *c != false {
|
|
t.Errorf("expect c=false got c=%v", *c)
|
|
}
|
|
}
|