package addrs

import (
	"fmt"
	"testing"
)

func TestInstanceKeyString(t *testing.T) {
	tests := []struct {
		Key  InstanceKey
		Want string
	}{
		{
			IntKey(0),
			`[0]`,
		},
		{
			IntKey(5),
			`[5]`,
		},
		{
			StringKey(""),
			`[""]`,
		},
		{
			StringKey("hi"),
			`["hi"]`,
		},
		{
			StringKey("0"),
			`["0"]`, // intentionally distinct from IntKey(0)
		},
		{
			// Quotes must be escaped
			StringKey(`"`),
			`["\""]`,
		},
		{
			// Escape sequences must themselves be escaped
			StringKey(`\r\n`),
			`["\\r\\n"]`,
		},
		{
			// Template interpolation sequences "${" must be escaped.
			StringKey(`${hello}`),
			`["$${hello}"]`,
		},
		{
			// Template control sequences "%{" must be escaped.
			StringKey(`%{ for something in something }%{ endfor }`),
			`["%%{ for something in something }%%{ endfor }"]`,
		},
		{
			// Dollar signs that aren't followed by { are not interpolation sequences
			StringKey(`$hello`),
			`["$hello"]`,
		},
		{
			// Percent signs that aren't followed by { are not control sequences
			StringKey(`%hello`),
			`["%hello"]`,
		},
	}

	for _, test := range tests {
		testName := fmt.Sprintf("%#v", test.Key)
		t.Run(testName, func(t *testing.T) {
			got := test.Key.String()
			want := test.Want
			if got != want {
				t.Errorf("wrong result\nreciever: %s\ngot:      %s\nwant:     %s", testName, got, want)
			}
		})
	}
}
