From 8913eaef7527f8112f65ce5c73f1282354de5fe0 Mon Sep 17 00:00:00 2001 From: Alan Donovan Date: Fri, 27 Feb 2015 17:05:06 -0500 Subject: 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 --- go/loader/loader.go | 8 +++++-- 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) { -- cgit v1.2.3