// Copyright 2019 The ChromiumOS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

package main

import (
	"reflect"
	"sort"
	"testing"
)

func TestMergeEnvValues(t *testing.T) {
	testData := []struct {
		values  []string
		updates []string
		result  []string
	}{
		{[]string{}, []string{}, []string{}},
		{[]string{"A=1"}, []string{}, []string{"A=1"}},
		{[]string{"A=1=2=3"}, []string{}, []string{"A=1=2=3"}},
		{[]string{}, []string{"A=1"}, []string{"A=1"}},
		{[]string{}, []string{"A=1=2=3"}, []string{"A=1=2=3"}},
		{[]string{"A=1"}, []string{"A=2"}, []string{"A=2"}},
		{[]string{"A="}, []string{}, []string{"A="}},
		{[]string{"A="}, []string{"A=2"}, []string{"A=2"}},
		{[]string{"A=1"}, []string{"A="}, []string{}},
		{[]string{}, []string{"A=1", "A="}, []string{}},
		{[]string{}, []string{"A=1", "A=", "A=2"}, []string{"A=2"}},
		{[]string{"A=1", "B=2"}, []string{"C=3", "D=4"}, []string{"A=1", "B=2", "C=3", "D=4"}},
	}
	for _, tt := range testData {
		result := mergeEnvValues(tt.values, tt.updates)
		sort.Strings(result)
		if !reflect.DeepEqual(tt.result, result) {
			t.Errorf("unexpected result: %s", result)
		}
	}
}
