summaryrefslogtreecommitdiffstats
path: root/src/cmd/go/internal/load/pkg_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd/go/internal/load/pkg_test.go')
-rw-r--r--src/cmd/go/internal/load/pkg_test.go78
1 files changed, 78 insertions, 0 deletions
diff --git a/src/cmd/go/internal/load/pkg_test.go b/src/cmd/go/internal/load/pkg_test.go
new file mode 100644
index 0000000..1e59fb9
--- /dev/null
+++ b/src/cmd/go/internal/load/pkg_test.go
@@ -0,0 +1,78 @@
+package load
+
+import (
+ "cmd/go/internal/cfg"
+ "testing"
+)
+
+func TestPkgDefaultExecName(t *testing.T) {
+ oldModulesEnabled := cfg.ModulesEnabled
+ defer func() { cfg.ModulesEnabled = oldModulesEnabled }()
+ for _, tt := range []struct {
+ in string
+ files []string
+ wantMod string
+ wantGopath string
+ }{
+ {"example.com/mycmd", []string{}, "mycmd", "mycmd"},
+ {"example.com/mycmd/v0", []string{}, "v0", "v0"},
+ {"example.com/mycmd/v1", []string{}, "v1", "v1"},
+ {"example.com/mycmd/v2", []string{}, "mycmd", "v2"}, // Semantic import versioning, use second last element in module mode.
+ {"example.com/mycmd/v3", []string{}, "mycmd", "v3"}, // Semantic import versioning, use second last element in module mode.
+ {"mycmd", []string{}, "mycmd", "mycmd"},
+ {"mycmd/v0", []string{}, "v0", "v0"},
+ {"mycmd/v1", []string{}, "v1", "v1"},
+ {"mycmd/v2", []string{}, "mycmd", "v2"}, // Semantic import versioning, use second last element in module mode.
+ {"v0", []string{}, "v0", "v0"},
+ {"v1", []string{}, "v1", "v1"},
+ {"v2", []string{}, "v2", "v2"},
+ {"command-line-arguments", []string{"output.go", "foo.go"}, "output", "output"},
+ } {
+ {
+ cfg.ModulesEnabled = true
+ pkg := new(Package)
+ pkg.ImportPath = tt.in
+ pkg.GoFiles = tt.files
+ pkg.Internal.CmdlineFiles = len(tt.files) > 0
+ gotMod := pkg.DefaultExecName()
+ if gotMod != tt.wantMod {
+ t.Errorf("pkg.DefaultExecName with ImportPath = %q in module mode = %v; want %v", tt.in, gotMod, tt.wantMod)
+ }
+ }
+ {
+ cfg.ModulesEnabled = false
+ pkg := new(Package)
+ pkg.ImportPath = tt.in
+ pkg.GoFiles = tt.files
+ pkg.Internal.CmdlineFiles = len(tt.files) > 0
+ gotGopath := pkg.DefaultExecName()
+ if gotGopath != tt.wantGopath {
+ t.Errorf("pkg.DefaultExecName with ImportPath = %q in gopath mode = %v; want %v", tt.in, gotGopath, tt.wantGopath)
+ }
+ }
+ }
+}
+
+func TestIsVersionElement(t *testing.T) {
+ t.Parallel()
+ for _, tt := range []struct {
+ in string
+ want bool
+ }{
+ {"v0", false},
+ {"v05", false},
+ {"v1", false},
+ {"v2", true},
+ {"v3", true},
+ {"v9", true},
+ {"v10", true},
+ {"v11", true},
+ {"v", false},
+ {"vx", false},
+ } {
+ got := isVersionElement(tt.in)
+ if got != tt.want {
+ t.Errorf("isVersionElement(%q) = %v; want %v", tt.in, got, tt.want)
+ }
+ }
+}