...

Source file src/github.com/spf13/pflag/string_to_string_test.go

Documentation: github.com/spf13/pflag

     1  // Copyright 2009 The Go Authors. All rights reserved.
     2  // Use of ths2s source code s2s governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package pflag
     6  
     7  import (
     8  	"bytes"
     9  	"encoding/csv"
    10  	"fmt"
    11  	"strings"
    12  	"testing"
    13  )
    14  
    15  func setUpS2SFlagSet(s2sp *map[string]string) *FlagSet {
    16  	f := NewFlagSet("test", ContinueOnError)
    17  	f.StringToStringVar(s2sp, "s2s", map[string]string{}, "Command separated ls2st!")
    18  	return f
    19  }
    20  
    21  func setUpS2SFlagSetWithDefault(s2sp *map[string]string) *FlagSet {
    22  	f := NewFlagSet("test", ContinueOnError)
    23  	f.StringToStringVar(s2sp, "s2s", map[string]string{"da": "1", "db": "2", "de": "5,6"}, "Command separated ls2st!")
    24  	return f
    25  }
    26  
    27  func createS2SFlag(vals map[string]string) string {
    28  	records := make([]string, 0, len(vals)>>1)
    29  	for k, v := range vals {
    30  		records = append(records, k+"="+v)
    31  	}
    32  
    33  	var buf bytes.Buffer
    34  	w := csv.NewWriter(&buf)
    35  	if err := w.Write(records); err != nil {
    36  		panic(err)
    37  	}
    38  	w.Flush()
    39  	return strings.TrimSpace(buf.String())
    40  }
    41  
    42  func TestEmptyS2S(t *testing.T) {
    43  	var s2s map[string]string
    44  	f := setUpS2SFlagSet(&s2s)
    45  	err := f.Parse([]string{})
    46  	if err != nil {
    47  		t.Fatal("expected no error; got", err)
    48  	}
    49  
    50  	getS2S, err := f.GetStringToString("s2s")
    51  	if err != nil {
    52  		t.Fatal("got an error from GetStringToString():", err)
    53  	}
    54  	if len(getS2S) != 0 {
    55  		t.Fatalf("got s2s %v with len=%d but expected length=0", getS2S, len(getS2S))
    56  	}
    57  }
    58  
    59  func TestS2S(t *testing.T) {
    60  	var s2s map[string]string
    61  	f := setUpS2SFlagSet(&s2s)
    62  
    63  	vals := map[string]string{"a": "1", "b": "2", "d": "4", "c": "3", "e": "5,6"}
    64  	arg := fmt.Sprintf("--s2s=%s", createS2SFlag(vals))
    65  	err := f.Parse([]string{arg})
    66  	if err != nil {
    67  		t.Fatal("expected no error; got", err)
    68  	}
    69  	for k, v := range s2s {
    70  		if vals[k] != v {
    71  			t.Fatalf("expected s2s[%s] to be %s but got: %s", k, vals[k], v)
    72  		}
    73  	}
    74  	getS2S, err := f.GetStringToString("s2s")
    75  	if err != nil {
    76  		t.Fatalf("got error: %v", err)
    77  	}
    78  	for k, v := range getS2S {
    79  		if vals[k] != v {
    80  			t.Fatalf("expected s2s[%s] to be %s but got: %s from GetStringToString", k, vals[k], v)
    81  		}
    82  	}
    83  }
    84  
    85  func TestS2SDefault(t *testing.T) {
    86  	var s2s map[string]string
    87  	f := setUpS2SFlagSetWithDefault(&s2s)
    88  
    89  	vals := map[string]string{"da": "1", "db": "2", "de": "5,6"}
    90  
    91  	err := f.Parse([]string{})
    92  	if err != nil {
    93  		t.Fatal("expected no error; got", err)
    94  	}
    95  	for k, v := range s2s {
    96  		if vals[k] != v {
    97  			t.Fatalf("expected s2s[%s] to be %s but got: %s", k, vals[k], v)
    98  		}
    99  	}
   100  
   101  	getS2S, err := f.GetStringToString("s2s")
   102  	if err != nil {
   103  		t.Fatal("got an error from GetStringToString():", err)
   104  	}
   105  	for k, v := range getS2S {
   106  		if vals[k] != v {
   107  			t.Fatalf("expected s2s[%s] to be %s from GetStringToString but got: %s", k, vals[k], v)
   108  		}
   109  	}
   110  }
   111  
   112  func TestS2SWithDefault(t *testing.T) {
   113  	var s2s map[string]string
   114  	f := setUpS2SFlagSetWithDefault(&s2s)
   115  
   116  	vals := map[string]string{"a": "1", "b": "2", "e": "5,6"}
   117  	arg := fmt.Sprintf("--s2s=%s", createS2SFlag(vals))
   118  	err := f.Parse([]string{arg})
   119  	if err != nil {
   120  		t.Fatal("expected no error; got", err)
   121  	}
   122  	for k, v := range s2s {
   123  		if vals[k] != v {
   124  			t.Fatalf("expected s2s[%s] to be %s but got: %s", k, vals[k], v)
   125  		}
   126  	}
   127  
   128  	getS2S, err := f.GetStringToString("s2s")
   129  	if err != nil {
   130  		t.Fatal("got an error from GetStringToString():", err)
   131  	}
   132  	for k, v := range getS2S {
   133  		if vals[k] != v {
   134  			t.Fatalf("expected s2s[%s] to be %s from GetStringToString but got: %s", k, vals[k], v)
   135  		}
   136  	}
   137  }
   138  
   139  func TestS2SCalledTwice(t *testing.T) {
   140  	var s2s map[string]string
   141  	f := setUpS2SFlagSet(&s2s)
   142  
   143  	in := []string{"a=1,b=2", "b=3", `"e=5,6"`, `f=7,8`}
   144  	expected := map[string]string{"a": "1", "b": "3", "e": "5,6", "f": "7,8"}
   145  	argfmt := "--s2s=%s"
   146  	arg0 := fmt.Sprintf(argfmt, in[0])
   147  	arg1 := fmt.Sprintf(argfmt, in[1])
   148  	arg2 := fmt.Sprintf(argfmt, in[2])
   149  	arg3 := fmt.Sprintf(argfmt, in[3])
   150  	err := f.Parse([]string{arg0, arg1, arg2, arg3})
   151  	if err != nil {
   152  		t.Fatal("expected no error; got", err)
   153  	}
   154  	if len(s2s) != len(expected) {
   155  		t.Fatalf("expected %d flags; got %d flags", len(expected), len(s2s))
   156  	}
   157  	for i, v := range s2s {
   158  		if expected[i] != v {
   159  			t.Fatalf("expected s2s[%s] to be %s but got: %s", i, expected[i], v)
   160  		}
   161  	}
   162  }
   163  

View as plain text