mirror of
https://github.com/Luzifer/nginx-sso.git
synced 2024-12-21 05:11:17 +00:00
163 lines
4.1 KiB
Go
163 lines
4.1 KiB
Go
|
// Copyright 2009 The Go Authors. All rights reserved.
|
||
|
// Use of ths2s source code s2s governed by a BSD-style
|
||
|
// license that can be found in the LICENSE file.
|
||
|
|
||
|
package pflag
|
||
|
|
||
|
import (
|
||
|
"bytes"
|
||
|
"encoding/csv"
|
||
|
"fmt"
|
||
|
"strings"
|
||
|
"testing"
|
||
|
)
|
||
|
|
||
|
func setUpS2SFlagSet(s2sp *map[string]string) *FlagSet {
|
||
|
f := NewFlagSet("test", ContinueOnError)
|
||
|
f.StringToStringVar(s2sp, "s2s", map[string]string{}, "Command separated ls2st!")
|
||
|
return f
|
||
|
}
|
||
|
|
||
|
func setUpS2SFlagSetWithDefault(s2sp *map[string]string) *FlagSet {
|
||
|
f := NewFlagSet("test", ContinueOnError)
|
||
|
f.StringToStringVar(s2sp, "s2s", map[string]string{"da": "1", "db": "2", "de": "5,6"}, "Command separated ls2st!")
|
||
|
return f
|
||
|
}
|
||
|
|
||
|
func createS2SFlag(vals map[string]string) string {
|
||
|
records := make([]string, 0, len(vals)>>1)
|
||
|
for k, v := range vals {
|
||
|
records = append(records, k+"="+v)
|
||
|
}
|
||
|
|
||
|
var buf bytes.Buffer
|
||
|
w := csv.NewWriter(&buf)
|
||
|
if err := w.Write(records); err != nil {
|
||
|
panic(err)
|
||
|
}
|
||
|
w.Flush()
|
||
|
return strings.TrimSpace(buf.String())
|
||
|
}
|
||
|
|
||
|
func TestEmptyS2S(t *testing.T) {
|
||
|
var s2s map[string]string
|
||
|
f := setUpS2SFlagSet(&s2s)
|
||
|
err := f.Parse([]string{})
|
||
|
if err != nil {
|
||
|
t.Fatal("expected no error; got", err)
|
||
|
}
|
||
|
|
||
|
getS2S, err := f.GetStringToString("s2s")
|
||
|
if err != nil {
|
||
|
t.Fatal("got an error from GetStringToString():", err)
|
||
|
}
|
||
|
if len(getS2S) != 0 {
|
||
|
t.Fatalf("got s2s %v with len=%d but expected length=0", getS2S, len(getS2S))
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestS2S(t *testing.T) {
|
||
|
var s2s map[string]string
|
||
|
f := setUpS2SFlagSet(&s2s)
|
||
|
|
||
|
vals := map[string]string{"a": "1", "b": "2", "d": "4", "c": "3", "e": "5,6"}
|
||
|
arg := fmt.Sprintf("--s2s=%s", createS2SFlag(vals))
|
||
|
err := f.Parse([]string{arg})
|
||
|
if err != nil {
|
||
|
t.Fatal("expected no error; got", err)
|
||
|
}
|
||
|
for k, v := range s2s {
|
||
|
if vals[k] != v {
|
||
|
t.Fatalf("expected s2s[%s] to be %s but got: %s", k, vals[k], v)
|
||
|
}
|
||
|
}
|
||
|
getS2S, err := f.GetStringToString("s2s")
|
||
|
if err != nil {
|
||
|
t.Fatalf("got error: %v", err)
|
||
|
}
|
||
|
for k, v := range getS2S {
|
||
|
if vals[k] != v {
|
||
|
t.Fatalf("expected s2s[%s] to be %s but got: %s from GetStringToString", k, vals[k], v)
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestS2SDefault(t *testing.T) {
|
||
|
var s2s map[string]string
|
||
|
f := setUpS2SFlagSetWithDefault(&s2s)
|
||
|
|
||
|
vals := map[string]string{"da": "1", "db": "2", "de": "5,6"}
|
||
|
|
||
|
err := f.Parse([]string{})
|
||
|
if err != nil {
|
||
|
t.Fatal("expected no error; got", err)
|
||
|
}
|
||
|
for k, v := range s2s {
|
||
|
if vals[k] != v {
|
||
|
t.Fatalf("expected s2s[%s] to be %s but got: %s", k, vals[k], v)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
getS2S, err := f.GetStringToString("s2s")
|
||
|
if err != nil {
|
||
|
t.Fatal("got an error from GetStringToString():", err)
|
||
|
}
|
||
|
for k, v := range getS2S {
|
||
|
if vals[k] != v {
|
||
|
t.Fatalf("expected s2s[%s] to be %s from GetStringToString but got: %s", k, vals[k], v)
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestS2SWithDefault(t *testing.T) {
|
||
|
var s2s map[string]string
|
||
|
f := setUpS2SFlagSetWithDefault(&s2s)
|
||
|
|
||
|
vals := map[string]string{"a": "1", "b": "2", "e": "5,6"}
|
||
|
arg := fmt.Sprintf("--s2s=%s", createS2SFlag(vals))
|
||
|
err := f.Parse([]string{arg})
|
||
|
if err != nil {
|
||
|
t.Fatal("expected no error; got", err)
|
||
|
}
|
||
|
for k, v := range s2s {
|
||
|
if vals[k] != v {
|
||
|
t.Fatalf("expected s2s[%s] to be %s but got: %s", k, vals[k], v)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
getS2S, err := f.GetStringToString("s2s")
|
||
|
if err != nil {
|
||
|
t.Fatal("got an error from GetStringToString():", err)
|
||
|
}
|
||
|
for k, v := range getS2S {
|
||
|
if vals[k] != v {
|
||
|
t.Fatalf("expected s2s[%s] to be %s from GetStringToString but got: %s", k, vals[k], v)
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestS2SCalledTwice(t *testing.T) {
|
||
|
var s2s map[string]string
|
||
|
f := setUpS2SFlagSet(&s2s)
|
||
|
|
||
|
in := []string{"a=1,b=2", "b=3", `"e=5,6"`, `f=7,8`}
|
||
|
expected := map[string]string{"a": "1", "b": "3", "e": "5,6", "f": "7,8"}
|
||
|
argfmt := "--s2s=%s"
|
||
|
arg0 := fmt.Sprintf(argfmt, in[0])
|
||
|
arg1 := fmt.Sprintf(argfmt, in[1])
|
||
|
arg2 := fmt.Sprintf(argfmt, in[2])
|
||
|
arg3 := fmt.Sprintf(argfmt, in[3])
|
||
|
err := f.Parse([]string{arg0, arg1, arg2, arg3})
|
||
|
if err != nil {
|
||
|
t.Fatal("expected no error; got", err)
|
||
|
}
|
||
|
if len(s2s) != len(expected) {
|
||
|
t.Fatalf("expected %d flags; got %d flags", len(expected), len(s2s))
|
||
|
}
|
||
|
for i, v := range s2s {
|
||
|
if expected[i] != v {
|
||
|
t.Fatalf("expected s2s[%s] to be %s but got: %s", i, expected[i], v)
|
||
|
}
|
||
|
}
|
||
|
}
|