package imports

import (
	"os"
	"testing"

	"golang.org/x/tools/internal/gocommand"
	"golang.org/x/tools/internal/testenv"
)

func TestMain(m *testing.M) {
	testenv.ExitIfSmallMachine()
	os.Exit(m.Run())
}

// TestNilOpts tests that process does not crash with nil opts.
func TestNilOpts(t *testing.T) {
	var testOpts = []struct {
		name string
		opt  *Options
	}{
		{
			name: "nil",
			opt:  nil,
		},
		{
			name: "nil env",
			opt:  &Options{Comments: true, TabIndent: true, TabWidth: 8},
		},
		{
			name: "default",
			opt: &Options{
				Env: &ProcessEnv{
					GocmdRunner: &gocommand.Runner{},
				},
				Comments:  true,
				TabIndent: true,
				TabWidth:  8,
			},
		},
	}

	input := `package p

func _() {
	fmt.Println()
}
`
	want := `package p

import "fmt"

func _() {
	fmt.Println()
}
`
	for _, test := range testOpts {
		// Test Process
		got, err := Process("", []byte(input), test.opt)
		if err != nil {
			t.Errorf("%s: %s", test.name, err.Error())
		}
		if string(got) != want {
			t.Errorf("%s: Process: Got:\n%s\nWant:\n%s\n", test.name, string(got), want)
		}

		// Test FixImports and ApplyFixes
		fixes, err := FixImports("", []byte(input), test.opt)
		if err != nil {
			t.Errorf("%s: %s", test.name, err.Error())
		}

		got, err = ApplyFixes(fixes, "", []byte(input), test.opt, 0)
		if err != nil {
			t.Errorf("%s: %s", test.name, err.Error())
		}
		if string(got) != want {
			t.Errorf("%s: ApplyFix: Got:\n%s\nWant:\n%s\n", test.name, string(got), want)
		}
	}
}
