aboutsummaryrefslogtreecommitdiff
path: root/golangflag_test.go
diff options
context:
space:
mode:
authorTomas Aschan <[email protected]>2025-08-02 06:39:23 +0200
committerGitHub <[email protected]>2025-08-02 06:39:23 +0200
commit1db553c27f5b9952dbb6484ed9999547b9e7dfb2 (patch)
tree0fe75c2d543516d4194bd6c5e0d864c1b5a3ba27 /golangflag_test.go
parentbfb56184cc124b2a206273c751d7144ec4a8533a (diff)
parent44aa4aa86e19d69d62479bfa1a244d4858a62ee5 (diff)
Merge pull request #330 from pohly/copy-to-go-flagset
implement CopyToGoFlagSet
Diffstat (limited to 'golangflag_test.go')
-rw-r--r--golangflag_test.go74
1 files changed, 74 insertions, 0 deletions
diff --git a/golangflag_test.go b/golangflag_test.go
index 2ecefef..7309808 100644
--- a/golangflag_test.go
+++ b/golangflag_test.go
@@ -7,6 +7,7 @@ package pflag
import (
goflag "flag"
"testing"
+ "time"
)
func TestGoflags(t *testing.T) {
@@ -59,3 +60,76 @@ func TestGoflags(t *testing.T) {
t.Fatal("goflag.CommandLine.Parsed() return false after f.Parse() called")
}
}
+
+func TestToGoflags(t *testing.T) {
+ pfs := FlagSet{}
+ gfs := goflag.FlagSet{}
+ pfs.String("StringFlag", "String value", "String flag usage")
+ pfs.Int("IntFlag", 1, "Int flag usage")
+ pfs.Uint("UintFlag", 2, "Uint flag usage")
+ pfs.Int64("Int64Flag", 3, "Int64 flag usage")
+ pfs.Uint64("Uint64Flag", 4, "Uint64 flag usage")
+ pfs.Int8("Int8Flag", 5, "Int8 flag usage")
+ pfs.Float64("Float64Flag", 6.0, "Float64 flag usage")
+ pfs.Duration("DurationFlag", time.Second, "Duration flag usage")
+ pfs.Bool("BoolFlag", true, "Bool flag usage")
+ pfs.String("deprecated", "Deprecated value", "Deprecated flag usage")
+ pfs.MarkDeprecated("deprecated", "obsolete")
+
+ pfs.CopyToGoFlagSet(&gfs)
+
+ // Modify via pfs. Should be visible via gfs because both share the
+ // same values.
+ for name, value := range map[string]string{
+ "StringFlag": "Modified String value",
+ "IntFlag": "11",
+ "UintFlag": "12",
+ "Int64Flag": "13",
+ "Uint64Flag": "14",
+ "Int8Flag": "15",
+ "Float64Flag": "16.0",
+ "BoolFlag": "false",
+ } {
+ pf := pfs.Lookup(name)
+ if pf == nil {
+ t.Errorf("%s: not found in pflag flag set", name)
+ continue
+ }
+ if err := pf.Value.Set(value); err != nil {
+ t.Errorf("error setting %s = %s: %v", name, value, err)
+ }
+ }
+
+ // Check that all flags were added and share the same value.
+ pfs.VisitAll(func(pf *Flag) {
+ gf := gfs.Lookup(pf.Name)
+ if gf == nil {
+ t.Errorf("%s: not found in Go flag set", pf.Name)
+ return
+ }
+ if gf.Value.String() != pf.Value.String() {
+ t.Errorf("%s: expected value %v from Go flag set, got %v",
+ pf.Name, pf.Value, gf.Value)
+ return
+ }
+ })
+
+ // Check for unexpected additional flags.
+ gfs.VisitAll(func(gf *goflag.Flag) {
+ pf := gfs.Lookup(gf.Name)
+ if pf == nil {
+ t.Errorf("%s: not found in pflag flag set", gf.Name)
+ return
+ }
+ })
+
+ deprecated := gfs.Lookup("deprecated")
+ if deprecated == nil {
+ t.Error("deprecated: not found in Go flag set")
+ } else {
+ expectedUsage := "Deprecated flag usage (DEPRECATED: obsolete)"
+ if deprecated.Usage != expectedUsage {
+ t.Errorf("deprecation remark not added, expected usage %q, got %q", expectedUsage, deprecated.Usage)
+ }
+ }
+}