package common

import (
	"testing"

	assert "github.com/stretchr/testify/require"
	"go.skia.org/infra/go/deepequal"
	"go.skia.org/infra/go/testutils/unittest"
)

func TestMultiString(t *testing.T) {
	unittest.SmallTest(t)

	// Test basic operation.
	defaults := []string{"mydefault", "mydefault2"}
	var values []string
	m := &multiString{
		values: &values,
	}
	addAndCheck := func(newVal string, expect []string) {
		assert.NoError(t, m.Set(newVal))
		deepequal.AssertDeepEqual(t, expect, *m.values)
		deepequal.AssertDeepEqual(t, expect, values)
		// Sanity check.
		deepequal.AssertDeepEqual(t, []string{"mydefault", "mydefault2"}, defaults)
	}

	addAndCheck("alpha", []string{"alpha"})
	addAndCheck("beta,gamma", []string{"alpha", "beta", "gamma"})
	addAndCheck("delta", []string{"alpha", "beta", "gamma", "delta"})

	// Test MultiStringFlagVar behavior.
	values = nil
	m = newMultiString(&values, defaults)
	deepequal.AssertDeepEqual(t, defaults, *m.values)
	deepequal.AssertDeepEqual(t, defaults, values)

	addAndCheck("alpha", []string{"alpha"})
	addAndCheck("beta,gamma", []string{"alpha", "beta", "gamma"})
	addAndCheck("delta", []string{"alpha", "beta", "gamma", "delta"})

	// Sanity check.
	deepequal.AssertDeepEqual(t, []string{"mydefault", "mydefault2"}, defaults)

	// Verify that changing the defaults does not change the flag values.
	values = nil
	m = newMultiString(&values, defaults)
	defaults[0] = "replaced"
	deepequal.AssertDeepEqual(t, []string{"mydefault", "mydefault2"}, *m.values)
	deepequal.AssertDeepEqual(t, []string{"mydefault", "mydefault2"}, values)

	// Verify that it's okay to pass nil for the defaults.
	values = nil
	newMultiString(&values, nil)
	assert.Nil(t, values)
}
