aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Donovan <adonovan@google.com>2015-02-27 17:05:06 -0500
committerAlan Donovan <adonovan@google.com>2015-02-27 22:39:28 +0000
commit8913eaef7527f8112f65ce5c73f1282354de5fe0 (patch)
tree8a4a0c3489ae90001ad593663b5465077b44e9ee
parent264bffc00c400ce4401cc2be15ed56e18a12e889 (diff)
downloadtools-8913eaef7527f8112f65ce5c73f1282354de5fe0.tar.gz
go/loader: name unnamed packages so errors make sense
Add tests for: - this naming - missing file in created package Change-Id: I07c66b66e845c52d4685509c362b34f1f0c92648 Reviewed-on: https://go-review.googlesource.com/6310 Reviewed-by: Robert Griesemer <gri@golang.org>
-rw-r--r--go/loader/loader.go8
-rw-r--r--go/loader/loader_test.go55
2 files changed, 56 insertions, 7 deletions
diff --git a/go/loader/loader.go b/go/loader/loader.go
index 74ac6ee..16ccd24 100644
--- a/go/loader/loader.go
+++ b/go/loader/loader.go
@@ -729,8 +729,12 @@ func (conf *Config) Load() (*Program, error) {
files = append(files, cp.Files...)
path := cp.Path
- if path == "" && len(files) > 0 {
- path = files[0].Name.Name
+ if path == "" {
+ if len(files) > 0 {
+ path = files[0].Name.Name
+ } else {
+ path = "(unnamed)"
+ }
}
createPkg(path, files, errs)
}
diff --git a/go/loader/loader_test.go b/go/loader/loader_test.go
index 4e9f7d3..aa8c15b 100644
--- a/go/loader/loader_test.go
+++ b/go/loader/loader_test.go
@@ -5,6 +5,7 @@
package loader_test
import (
+ "fmt"
"go/build"
"reflect"
"sort"
@@ -139,6 +140,49 @@ func TestLoad_MissingInitialPackage_AllowErrors(t *testing.T) {
}
}
+func TestCreateUnnamedPackage(t *testing.T) {
+ var conf loader.Config
+ conf.CreateFromFilenames("")
+ prog, err := conf.Load()
+ if err != nil {
+ t.Fatalf("Load failed: %v", err)
+ }
+ if got, want := fmt.Sprint(prog.InitialPackages()), "[(unnamed)]"; got != want {
+ t.Errorf("InitialPackages = %s, want %s", got, want)
+ }
+}
+
+func TestLoad_MissingFileInCreatedPackage(t *testing.T) {
+ var conf loader.Config
+ conf.CreateFromFilenames("", "missing.go")
+
+ const wantErr = "couldn't load packages due to errors: (unnamed)"
+
+ prog, err := conf.Load()
+ if prog != nil {
+ t.Errorf("Load unexpectedly returned a Program")
+ }
+ if err == nil {
+ t.Fatalf("Load succeeded unexpectedly, want %q", wantErr)
+ }
+ if err.Error() != wantErr {
+ t.Fatalf("Load failed with wrong error %q, want %q", err, wantErr)
+ }
+}
+
+func TestLoad_MissingFileInCreatedPackage_AllowErrors(t *testing.T) {
+ conf := loader.Config{AllowErrors: true}
+ conf.CreateFromFilenames("", "missing.go")
+
+ prog, err := conf.Load()
+ if err != nil {
+ t.Errorf("Load failed: %v", err)
+ }
+ if got, want := fmt.Sprint(prog.InitialPackages()), "[(unnamed)]"; got != want {
+ t.Fatalf("InitialPackages = %s, want %s", got, want)
+ }
+}
+
func TestLoad_ParseError(t *testing.T) {
var conf loader.Config
conf.CreateFromFilenames("badpkg", "testdata/badpkgdecl.go")
@@ -146,14 +190,15 @@ func TestLoad_ParseError(t *testing.T) {
const wantErr = "couldn't load packages due to errors: badpkg"
prog, err := conf.Load()
- if err == nil {
- t.Errorf("Load succeeded unexpectedly, want %q", wantErr)
- } else if err.Error() != wantErr {
- t.Errorf("Load failed with wrong error %q, want %q", err, wantErr)
- }
if prog != nil {
t.Errorf("Load unexpectedly returned a Program")
}
+ if err == nil {
+ t.Fatalf("Load succeeded unexpectedly, want %q", wantErr)
+ }
+ if err.Error() != wantErr {
+ t.Fatalf("Load failed with wrong error %q, want %q", err, wantErr)
+ }
}
func TestLoad_ParseError_AllowErrors(t *testing.T) {