// +build go1.12

package multichecker_test

import (
	"fmt"
	"os"
	"os/exec"
	"runtime"
	"strings"
	"testing"

	"golang.org/x/tools/go/analysis"
	"golang.org/x/tools/go/analysis/multichecker"
	"golang.org/x/tools/go/analysis/passes/findcall"
	"golang.org/x/tools/internal/testenv"
)

func main() {
	fail := &analysis.Analyzer{
		Name: "fail",
		Doc:  "always fail on a package 'sort'",
		Run: func(pass *analysis.Pass) (interface{}, error) {
			if pass.Pkg.Path() == "sort" {
				return nil, fmt.Errorf("failed")
			}
			return nil, nil
		},
	}
	multichecker.Main(findcall.Analyzer, fail)
}

var race = false

// TestExitCode ensures that analysis failures are reported correctly.
// This test fork/execs the main function above.
func TestExitCode(t *testing.T) {
	if v := runtime.Version(); strings.Contains(v, "devel") && race {
		t.Skip("golang.org/issue/31749: This test is broken on tip in race mode. Skip until it's fixed.")
	}

	if runtime.GOOS != "linux" {
		t.Skipf("skipping fork/exec test on this platform")
	}

	if os.Getenv("MULTICHECKER_CHILD") == "1" {
		// child process

		// replace [progname -test.run=TestExitCode -- ...]
		//      by [progname ...]
		os.Args = os.Args[2:]
		os.Args[0] = "vet"
		main()
		panic("unreachable")
	}

	testenv.NeedsTool(t, "go")

	for _, test := range []struct {
		args []string
		want int
	}{
		{[]string{"nosuchdir/..."}, 1},                      // matched no packages
		{[]string{"nosuchpkg"}, 1},                          // matched no packages
		{[]string{"-unknownflag"}, 2},                       // flag error
		{[]string{"-findcall.name=panic", "io"}, 3},         // finds diagnostics
		{[]string{"-findcall=0", "io"}, 0},                  // no checkers
		{[]string{"-findcall.name=nosuchfunc", "io"}, 0},    // no diagnostics
		{[]string{"-findcall.name=panic", "sort", "io"}, 1}, // 'fail' failed on 'sort'

		// -json: exits zero even in face of diagnostics or package errors.
		{[]string{"-findcall.name=panic", "-json", "io"}, 0},
		{[]string{"-findcall.name=panic", "-json", "io"}, 0},
		{[]string{"-findcall.name=panic", "-json", "sort", "io"}, 0},
	} {
		args := []string{"-test.run=TestExitCode", "--"}
		args = append(args, test.args...)
		cmd := exec.Command(os.Args[0], args...)
		cmd.Env = append(os.Environ(), "MULTICHECKER_CHILD=1")
		out, err := cmd.CombinedOutput()
		if len(out) > 0 {
			t.Logf("%s: out=<<%s>>", test.args, out)
		}
		var exitcode int
		if err, ok := err.(*exec.ExitError); ok {
			exitcode = err.ExitCode() // requires go1.12
		}
		if exitcode != test.want {
			t.Errorf("%s: exited %d, want %d", test.args, exitcode, test.want)
		}
	}
}
