package kvflag

import (
	"flag"
	"reflect"
	"testing"
)

func TestFlag_impl(t *testing.T) {
	var _ flag.Value = new(Flag)
}

func TestFlag(t *testing.T) {
	cases := []struct {
		Input  string
		Output map[string]string
		Error  bool
	}{
		{
			"key=value",
			map[string]string{"key": "value"},
			false,
		},

		{
			"key=",
			map[string]string{"key": ""},
			false,
		},

		{
			"key=foo=bar",
			map[string]string{"key": "foo=bar"},
			false,
		},

		{
			"key",
			nil,
			true,
		},
	}

	for _, tc := range cases {
		f := new(Flag)
		err := f.Set(tc.Input)
		if (err != nil) != tc.Error {
			t.Fatalf("bad error. Input: %#v", tc.Input)
		}

		actual := map[string]string(*f)
		if !reflect.DeepEqual(actual, tc.Output) {
			t.Fatalf("bad: %#v", actual)
		}
	}
}
