// Copyright 2020 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.

package main

import (
	"runtime"
	"strings"
	"testing"
)

func TestBuildList(t *testing.T) {
	gowork := strings.TrimSpace(string(runner{"."}.runOut("go", "env", "GOWORK")))
	if gowork != "" && gowork != "off" {
		t.Skipf("must be run outside a workspace. GOWORK=%q", gowork)
	}
	// This test is in the golang.org/x/build module.
	// Check that buildList(".") returns sensible results.
	main, deps := buildList(".")
	if want := (module{
		Path:     "golang.org/x/build",
		Main:     true,
		Indirect: false,
	}); main != want {
		t.Errorf("got main = %+v, want %+v", main, want)
	}
	for i, m := range deps {
		if m.Path == "" {
			t.Errorf("deps[%d]: module path is empty", i)
		}
		if m.Main {
			t.Errorf("deps[%d]: unexpectedly a main module", i)
		}
	}
	if len(deps) < 10 {
		t.Errorf("buildList returned %d (less than 10) non-main modules in build list of x/build; "+
			"either buildList is broken or TestBuildList needs to be updated (that'll be the day)",
			len(deps))
	}
}

func TestGOROOTVersion(t *testing.T) {
	// This test requires Go 1.14 or higher to run.
	// Verify gorootVersion(runtime.GOROOT()) returns a fitting version.
	v, err := gorootVersion(runtime.GOROOT())
	if err != nil {
		t.Fatal("gorootVersion returned non-nil error:", err)
	}
	if v < 14 {
		t.Errorf("gorootVersion returned unexpectedly low version %d", v)
	}
}
