package create

import (
	"reflect"
	"testing"
)

func TestParseAnnotationSelector(t *testing.T) {
	tests := []struct {
		input         string
		parsed        map[string]string
		errorExpected bool
	}{
		{
			input:  "",
			parsed: nil,
		},
		{
			input: "foo=bar",
			parsed: map[string]string{
				"foo": "bar",
			},
		},
		{
			input: "deads=deads,liggitt=liggitt",
			parsed: map[string]string{
				"deads":   "deads",
				"liggitt": "liggitt",
			},
		},
		{
			input:         "liggitt=liggitt,deadliggitt",
			errorExpected: true,
		},
		{
			input: `"us=deads,liggitt,ffranz"`,
			parsed: map[string]string{
				"us": "deads,liggitt,ffranz",
			},
		},
		{
			input: `"us=deads,liggitt,ffranz",deadliggitt=deadliggitt`,
			parsed: map[string]string{
				"us":          "deads,liggitt,ffranz",
				"deadliggitt": "deadliggitt",
			},
		},
	}
	for _, test := range tests {
		parsed, err := parseAnnotationSelector(test.input)
		if err != nil {
			if !test.errorExpected {
				t.Fatalf("unexpected error: %s", err)
			}
			continue
		}
		if test.errorExpected {
			t.Fatalf("expected error, got a parsed output: %q", parsed)
		}
		if !reflect.DeepEqual(parsed, test.parsed) {
			t.Error("expected parsed annotation selector ", test.parsed, ", got ", parsed)
		}
	}
}