camfish/flag_test.go
2024-12-31 01:27:53 -05:00

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")
}
}