cmdflag_test.go 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. package cmdflag_test
  2. import (
  3. "flag"
  4. "os"
  5. "testing"
  6. "github.com/pierrec/lz4/internal/cmdflag"
  7. )
  8. func TestGlobalFlagOnly(t *testing.T) {
  9. cmd, args := flag.CommandLine, os.Args
  10. defer func() { flag.CommandLine, os.Args = cmd, args }()
  11. flag.CommandLine = flag.NewFlagSet("", flag.ExitOnError)
  12. var gv1 string
  13. flag.StringVar(&gv1, "v1", "val1", "usage1")
  14. os.Args = []string{"program", "-v1=gcli1"}
  15. if err := cmdflag.Parse(); err != nil {
  16. t.Fatal(err)
  17. }
  18. if got, want := gv1, "gcli1"; got != want {
  19. t.Fatalf("got %s; want %s", got, want)
  20. }
  21. }
  22. func TestInvalidcmdflag(t *testing.T) {
  23. cmd, args := flag.CommandLine, os.Args
  24. defer func() { flag.CommandLine, os.Args = cmd, args }()
  25. flag.CommandLine = flag.NewFlagSet("", flag.ExitOnError)
  26. os.Args = []string{"program", "invalidsub"}
  27. if err := cmdflag.Parse(); err == nil {
  28. t.Fatal("expected invalid command error")
  29. }
  30. }
  31. func TestOnecmdflag(t *testing.T) {
  32. h1 := 0
  33. handle1 := func(fset *flag.FlagSet) cmdflag.Handler {
  34. return func(args ...string) error {
  35. h1++
  36. return nil
  37. }
  38. }
  39. cmdflag.New("sub1", "", "", flag.ExitOnError, handle1)
  40. args := os.Args
  41. defer func() { os.Args = args }()
  42. os.Args = []string{"program", "sub1"}
  43. if err := cmdflag.Parse(); err != nil {
  44. t.Fatal(err)
  45. }
  46. if got, want := h1, 1; got != want {
  47. t.Fatalf("got %d; want %d", got, want)
  48. }
  49. }
  50. func TestOnecmdflagOneFlag(t *testing.T) {
  51. h1 := 0
  52. handle1 := func(fset *flag.FlagSet) cmdflag.Handler {
  53. h1++
  54. var v1 string
  55. fset.StringVar(&v1, "v1", "val1", "usage1")
  56. return func(args ...string) error {
  57. if got, want := v1, "cli1"; got != want {
  58. t.Fatalf("got %s; want %s", got, want)
  59. }
  60. return nil
  61. }
  62. }
  63. cmdflag.New("sub1flag", "", "", flag.ExitOnError, handle1)
  64. args := os.Args
  65. defer func() { os.Args = args }()
  66. os.Args = []string{"program", "sub1flag", "-v1=cli1"}
  67. if err := cmdflag.Parse(); err != nil {
  68. t.Fatal(err)
  69. }
  70. if got, want := h1, 1; got != want {
  71. t.Fatalf("got %d; want %d", got, want)
  72. }
  73. }
  74. func TestGlobalFlagOnecmdflag(t *testing.T) {
  75. h1 := 0
  76. handle1 := func(fset *flag.FlagSet) cmdflag.Handler {
  77. h1++
  78. var v1 string
  79. fset.StringVar(&v1, "v1", "val1", "usage1")
  80. return func(args ...string) error {
  81. return nil
  82. }
  83. }
  84. cmdflag.New("subglobal", "", "", flag.ExitOnError, handle1)
  85. cmd, args := flag.CommandLine, os.Args
  86. defer func() { flag.CommandLine, os.Args = cmd, args }()
  87. flag.CommandLine = flag.NewFlagSet("", flag.ExitOnError)
  88. var gv1 string
  89. flag.StringVar(&gv1, "v1", "val1", "usage1")
  90. os.Args = []string{"program", "-v1=gcli1", "subglobal"}
  91. if err := cmdflag.Parse(); err != nil {
  92. t.Fatal(err)
  93. }
  94. if got, want := h1, 1; got != want {
  95. t.Fatalf("got %d; want %d", got, want)
  96. }
  97. if got, want := gv1, "gcli1"; got != want {
  98. t.Fatalf("got %s; want %s", got, want)
  99. }
  100. }
  101. func TestGlobalFlagOnecmdflagOneFlag(t *testing.T) {
  102. h1 := 0
  103. handle1 := func(fset *flag.FlagSet) cmdflag.Handler {
  104. h1++
  105. var v1 string
  106. fset.StringVar(&v1, "v1", "val1", "usage1")
  107. return func(args ...string) error {
  108. if got, want := v1, "cli1"; got != want {
  109. t.Fatalf("got %s; want %s", got, want)
  110. }
  111. return nil
  112. }
  113. }
  114. cmdflag.New("subglobal1flag", "", "", flag.ExitOnError, handle1)
  115. cmd, args := flag.CommandLine, os.Args
  116. defer func() { flag.CommandLine, os.Args = cmd, args }()
  117. flag.CommandLine = flag.NewFlagSet("", flag.ExitOnError)
  118. var gv1 string
  119. flag.StringVar(&gv1, "v1", "val1", "usage1")
  120. os.Args = []string{"program", "subglobal1flag", "-v1=cli1"}
  121. if err := cmdflag.Parse(); err != nil {
  122. t.Fatal(err)
  123. }
  124. if got, want := h1, 1; got != want {
  125. t.Fatalf("got %d; want %d", got, want)
  126. }
  127. }