diff options
author | Alan Donovan <adonovan@google.com> | 2015-02-27 17:05:06 -0500 |
---|---|---|
committer | Alan Donovan <adonovan@google.com> | 2015-02-27 22:39:28 +0000 |
commit | 8913eaef7527f8112f65ce5c73f1282354de5fe0 (patch) | |
tree | 8a4a0c3489ae90001ad593663b5465077b44e9ee | |
parent | 264bffc00c400ce4401cc2be15ed56e18a12e889 (diff) | |
download | tools-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.go | 8 | ||||
-rw-r--r-- | go/loader/loader_test.go | 55 |
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) { |