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