// Copyright 2015 The Vanadium 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 (
	"fmt"
	"path/filepath"
	"testing"

	"v.io/x/lib/gosh"
)

func TestWhich(t *testing.T) {
	sh := gosh.NewShell(t)
	sh.PropagateChildOutput = true
	defer sh.Cleanup()

	jiriBinary := gosh.BuildGoPkg(sh, sh.MakeTempDir(), "v.io/jiri/cmd/jiri")
	stdout, stderr := sh.Cmd(jiriBinary, []string{"which"}...).StdoutStderr()
	if got, want := stdout, fmt.Sprintf("# binary\n%s\n", jiriBinary); got != want {
		t.Errorf("stdout got %q, want %q", got, want)
	}
	if got, want := stderr, ""; got != want {
		t.Errorf("stderr got %q, want %q", got, want)
	}
}

// TestWhichScript tests the behavior of "jiri which" for the shim script.
func TestWhichScript(t *testing.T) {
	sh := gosh.NewShell(t)
	sh.PropagateChildOutput = true
	defer sh.Cleanup()

	jiriScript, err := filepath.Abs("./scripts/jiri")
	if err != nil {
		t.Fatalf("couldn't determine absolute path to jiri script")
	}
	stdout, stderr := sh.Cmd(jiriScript, "which").StdoutStderr()
	if got, want := stdout, fmt.Sprintf("# script\n%s\n", jiriScript); got != want {
		t.Errorf("stdout got %q, want %q", got, want)
	}
	if got, want := stderr, ""; got != want {
		t.Errorf("stderr got %q, want %q", got, want)
	}
}
