}
}
+// Test the code to look up packages when given two args. First test case is
+// go doc binary BigEndian
+// This needs to find encoding/binary.BigEndian, which means
+// finding the package encoding/binary given only "binary".
+// Second case is
+// go doc rand Float64
+// which again needs to find math/rand and not give up after crypto/rand,
+// which has no such function.
+func TestTwoArgLookup(t *testing.T) {
+ if testing.Short() {
+ t.Skip("scanning file system takes too long")
+ }
+ maybeSkip(t)
+ var b bytes.Buffer // We don't care about the output.
+ {
+ var flagSet flag.FlagSet
+ err := do(&b, &flagSet, []string{"binary", "BigEndian"})
+ if err != nil {
+ t.Errorf("unexpected error %q from binary BigEndian", err)
+ }
+ }
+ {
+ var flagSet flag.FlagSet
+ err := do(&b, &flagSet, []string{"rand", "Float64"})
+ if err != nil {
+ t.Errorf("unexpected error %q from rand Float64", err)
+ }
+ }
+}
+
type trimTest struct {
path string
prefix string
case 1:
// Done below.
case 2:
- // Package must be importable.
- pkg, err := build.Import(args[0], "", build.ImportComment)
- if err != nil {
- log.Fatalf("%s", err)
+ // Package must be findable and importable.
+ packagePath, ok := findPackage(args[0])
+ if !ok {
+ log.Fatalf("no such package: %s", args[0])
}
- return pkg, args[0], args[1], false
+ return importDir(packagePath), args[0], args[1], true
}
// Usual case: one argument.
arg := args[0]
}
// See if we have the basename or tail of a package, as in json for encoding/json
// or ivy/value for robpike.io/ivy/value.
- // Launch findPackage as a goroutine so it can return multiple paths if required.
path, ok := findPackage(arg[0:period])
if ok {
return importDir(path), arg[0:period], symbol, true