162 lines
4.4 KiB
Go
162 lines
4.4 KiB
Go
package camfish
|
|
|
|
import "errors"
|
|
import "testing"
|
|
import "git.tebibyte.media/sashakoshka/go-cli"
|
|
|
|
func TestFlagSet(test *testing.T) {
|
|
set := flagSet { }
|
|
flag0 := set.Flag('a', "flag-0", "some help", nil)
|
|
flag1 := set.Flag('b', "flag-1", "some help", nil)
|
|
flag2 := set.Flag('c', "flag-2", "some help", nil)
|
|
flag6 := set.Flag('d', "flag-3", "some help", nil)
|
|
flag3 := set.Flag('d', "flag-3", "some help", nil)
|
|
flag4v := set.Flag('e', "flag-4v", "some help", cli.ValString)
|
|
flag5 := set.Flag('f', "flag-5", "some help", nil)
|
|
err := set.parse([]string {
|
|
"thing",
|
|
"-baf",
|
|
"-e", "value 4 a",
|
|
"-d", "-ff",
|
|
"--flag-4v", "value 4 b",
|
|
})
|
|
if err != nil { test.Fatal(err) }
|
|
|
|
if value, ok := flag0.First(); ok {
|
|
if value != "true" { test.Fatalf("not equal: %s", value) }
|
|
} else { test.Fatal("not found") }
|
|
for index, value := range flag0.All() {
|
|
if index != 0 { test.Fatalf("extra value: %s", value) }
|
|
if value != "true" { test.Fatalf("not equal: %s", value) }
|
|
}
|
|
|
|
if value, ok := flag1.First(); ok {
|
|
if value != "true" { test.Fatalf("not equal: %s", value) }
|
|
} else { test.Fatal("not found") }
|
|
for index, value := range flag1.All() {
|
|
if index != 0 { test.Fatalf("extra value: %s", value) }
|
|
if value != "true" { test.Fatalf("not equal: %s", value) }
|
|
}
|
|
|
|
if value, ok := flag2.First(); ok {
|
|
if value != "" { test.Fatalf("found: %s", value) }
|
|
}
|
|
for _, value := range flag2.All() {
|
|
test.Fatalf("extra value: %s", value)
|
|
}
|
|
|
|
if value, ok := flag3.First(); ok {
|
|
if value != "true" { test.Fatalf("not equal: %s", value) }
|
|
} else { test.Fatal("not found") }
|
|
for index, value := range flag3.All() {
|
|
if index != 0 { test.Fatalf("extra value: %s", value) }
|
|
if value != "true" { test.Fatalf("not equal: %s", value) }
|
|
}
|
|
|
|
if value, ok := flag4v.First(); ok {
|
|
if value != "value 4 a" { test.Fatalf("not equal: %s", value) }
|
|
} else { test.Fatal("not found") }
|
|
for index, value := range flag4v.All() {
|
|
switch index {
|
|
case 0: if value != "value 4 a" { test.Fatalf("not equal: %s", value) }
|
|
case 1: if value != "value 4 b" { test.Fatalf("not equal: %s", value) }
|
|
default: test.Fatalf("extra value: %s", value)
|
|
}
|
|
}
|
|
|
|
if value, ok := flag5.First(); ok {
|
|
if value != "true" { test.Fatalf("not equal: %s", value) }
|
|
} else { test.Fatal("not found") }
|
|
for index, value := range flag5.All() {
|
|
if index > 3 { test.Fatalf("extra value: %s", value) }
|
|
if value != "true" { test.Fatalf("not equal: %s", value) }
|
|
}
|
|
|
|
if value, ok := flag6.First(); ok {
|
|
if value != "" { test.Fatalf("found: %s", value) }
|
|
}
|
|
for _, value := range flag6.All() {
|
|
test.Fatalf("extra value: %s", value)
|
|
}
|
|
|
|
err = set.fullyReceived()
|
|
if err != nil { test.Fatal(err) }
|
|
}
|
|
|
|
func TestFlagSetErrExtraneousValuesA(test *testing.T) {
|
|
set := flagSet { }
|
|
flag0 := set.Flag('a', "flag-0", "some help", cli.ValString)
|
|
err := set.parse([]string {
|
|
"thing",
|
|
"--flag-0", "value 0",
|
|
"--flag-0", "value 1",
|
|
"--flag-0", "value 2",
|
|
})
|
|
if err != nil { test.Fatal(err) }
|
|
|
|
// access the first value
|
|
flag0.First()
|
|
|
|
err = set.fullyReceived()
|
|
test.Log(err)
|
|
if !errors.Is(err, ErrExtraneousValues) {
|
|
test.Fatal("error is not ErrExtraneousValues")
|
|
}
|
|
var flagErr FlagError
|
|
if !errors.As(err, &flagErr) {
|
|
test.Fatal("error is not FlagError")
|
|
}
|
|
if flagErr.Long != "flag-0" {
|
|
test.Fatal("not equal")
|
|
}
|
|
}
|
|
|
|
func TestFlagSetErrExtraneousValuesB(test *testing.T) {
|
|
set := flagSet { }
|
|
flag0 := set.Flag('a', "flag-0", "some help", cli.ValString)
|
|
err := set.parse([]string {
|
|
"thing",
|
|
"--flag-0", "value 0",
|
|
"--flag-0", "value 1",
|
|
"--flag-0", "value 2",
|
|
})
|
|
if err != nil { test.Fatal(err) }
|
|
|
|
// access the first two values
|
|
for index, _ := range flag0.All() {
|
|
if index >= 1 { break }
|
|
}
|
|
|
|
err = set.fullyReceived()
|
|
test.Log(err)
|
|
if !errors.Is(err, ErrExtraneousValues) {
|
|
test.Fatal("error is not ErrExtraneousValues")
|
|
}
|
|
var flagErr FlagError
|
|
if !errors.As(err, &flagErr) {
|
|
test.Fatal("error is not FlagError")
|
|
}
|
|
if flagErr.Long != "flag-0" {
|
|
test.Fatal("not equal")
|
|
}
|
|
}
|
|
|
|
func TestFlagSetErrExtraneousValuesC(test *testing.T) {
|
|
set := flagSet { }
|
|
flag0 := set.Flag('a', "flag-0", "some help", cli.ValString)
|
|
err := set.parse([]string {
|
|
"thing",
|
|
"--flag-0", "value 0", "value 1", "value 2",
|
|
})
|
|
if err != nil { test.Fatal(err) }
|
|
|
|
// access the value
|
|
flag0.First()
|
|
|
|
err = set.fullyReceived()
|
|
test.Log(err)
|
|
if !errors.Is(err, ErrExtraneousValues) {
|
|
test.Fatal("error is not ErrExtraneousValues")
|
|
}
|
|
}
|