// Copyright 2011 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 (
	"path/filepath"
	"runtime"
	"testing"
)


func runTest(t *testing.T, path, pkg string) {
	exitCode = 0
	*pkgName = pkg
	*recursive = false

	if pkg == "" {
		processFiles([]string{path}, true)
	} else {
		processDirectory(path)
	}

	if exitCode != 0 {
		t.Errorf("processing %s failed: exitCode = %d", path, exitCode)
	}
}


var tests = []struct {
	path string
	pkg  string
}{
	// individual files
	{"testdata/test1.go", ""},

	// directories
	{filepath.Join(runtime.GOROOT(), "src/pkg/go/ast"), "ast"},
	{filepath.Join(runtime.GOROOT(), "src/pkg/go/doc"), "doc"},
	{filepath.Join(runtime.GOROOT(), "src/pkg/go/token"), "scanner"},
	{filepath.Join(runtime.GOROOT(), "src/pkg/go/scanner"), "scanner"},
	{filepath.Join(runtime.GOROOT(), "src/pkg/go/parser"), "parser"},
	{filepath.Join(runtime.GOROOT(), "src/pkg/go/types"), "types"},
}


func Test(t *testing.T) {
	for _, test := range tests {
		runTest(t, test.path, test.pkg)
	}
}
