github.com/opentofu/opentofu@v1.7.1/internal/command/flag_kv_test.go (about)

     1  // Copyright (c) The OpenTofu Authors
     2  // SPDX-License-Identifier: MPL-2.0
     3  // Copyright (c) 2023 HashiCorp, Inc.
     4  // SPDX-License-Identifier: MPL-2.0
     5  
     6  package command
     7  
     8  import (
     9  	"flag"
    10  	"reflect"
    11  	"testing"
    12  )
    13  
    14  func TestFlagStringKV_impl(t *testing.T) {
    15  	var _ flag.Value = new(FlagStringKV)
    16  }
    17  
    18  func TestFlagStringKV(t *testing.T) {
    19  	cases := []struct {
    20  		Input  string
    21  		Output map[string]string
    22  		Error  bool
    23  	}{
    24  		{
    25  			"key=value",
    26  			map[string]string{"key": "value"},
    27  			false,
    28  		},
    29  
    30  		{
    31  			"key=",
    32  			map[string]string{"key": ""},
    33  			false,
    34  		},
    35  
    36  		{
    37  			"key=foo=bar",
    38  			map[string]string{"key": "foo=bar"},
    39  			false,
    40  		},
    41  
    42  		{
    43  			"map.key=foo",
    44  			map[string]string{"map.key": "foo"},
    45  			false,
    46  		},
    47  
    48  		{
    49  			"key",
    50  			nil,
    51  			true,
    52  		},
    53  
    54  		{
    55  			"key=/path",
    56  			map[string]string{"key": "/path"},
    57  			false,
    58  		},
    59  	}
    60  
    61  	for _, tc := range cases {
    62  		f := new(FlagStringKV)
    63  		err := f.Set(tc.Input)
    64  		if err != nil != tc.Error {
    65  			t.Fatalf("bad error. Input: %#v\n\nError: %s", tc.Input, err)
    66  		}
    67  
    68  		actual := map[string]string(*f)
    69  		if !reflect.DeepEqual(actual, tc.Output) {
    70  			t.Fatalf("bad: %#v", actual)
    71  		}
    72  	}
    73  }