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

// +build !plan9

package main

import (
	"io/ioutil"
	"os"
	"path/filepath"
	"strings"
	"testing"
)

func TestAppendPath(t *testing.T) {
	tmpd, err := ioutil.TempDir("", "go")
	if err != nil {
		t.Fatal(err)
	}
	defer os.RemoveAll(tmpd)

	if err := os.Setenv("HOME", tmpd); err != nil {
		t.Fatal(err)
	}

	GOPATH := os.Getenv("GOPATH")
	if err := appendToPATH(filepath.Join(GOPATH, "bin")); err != nil {
		t.Fatal(err)
	}

	shellConfig, err := shellConfigFile()
	if err != nil {
		t.Fatal(err)
	}
	b, err := ioutil.ReadFile(shellConfig)
	if err != nil {
		t.Fatal(err)
	}

	expected := "export PATH=" + pathVar + envSeparator + filepath.Join(GOPATH, "bin")
	if strings.TrimSpace(string(b)) != expected {
		t.Fatalf("expected: %q, got %q", expected, strings.TrimSpace(string(b)))
	}

	// Check that appendToPATH is idempotent.
	if err := appendToPATH(filepath.Join(GOPATH, "bin")); err != nil {
		t.Fatal(err)
	}
	b, err = ioutil.ReadFile(shellConfig)
	if err != nil {
		t.Fatal(err)
	}
	if strings.TrimSpace(string(b)) != expected {
		t.Fatalf("expected: %q, got %q", expected, strings.TrimSpace(string(b)))
	}
}
