]> Cypherpunks.ru repositories - gostls13.git/blobdiff - src/go/build/deps_test.go
[dev.boringcrypto] all: merge master (2f0da6d) into dev.boringcrypto
[gostls13.git] / src / go / build / deps_test.go
index 89bae9fd511a0916dc6468c2f3bdbeb0e8cdc065..8849f5fd0531d11d9aee322d22234fec83f28724 100644 (file)
@@ -10,9 +10,9 @@ package build
 import (
        "bytes"
        "fmt"
+       "go/token"
        "internal/testenv"
        "io/fs"
-       "io/ioutil"
        "os"
        "path/filepath"
        "runtime"
@@ -76,8 +76,12 @@ var depsRules = `
          unicode/utf8, unicode/utf16, unicode,
          unsafe;
 
+       # These packages depend only on unsafe.
+       unsafe
+       < internal/abi;
+
        # RUNTIME is the core runtime group of packages, all of them very light-weight.
-       internal/cpu, unsafe
+       internal/abi, internal/cpu, unsafe
        < internal/bytealg
        < internal/unsafeheader
        < runtime/internal/sys
@@ -163,6 +167,9 @@ var depsRules = `
        < os
        < os/signal;
 
+       io/fs
+       < embed;
+
        unicode, fmt !< os, os/signal;
 
        os/signal, STR
@@ -175,7 +182,7 @@ var depsRules = `
        reflect !< OS;
 
        OS
-       < golang.org/x/sys/cpu, internal/goroot;
+       < golang.org/x/sys/cpu;
 
        # FMT is OS (which includes string routines) plus reflect and fmt.
        # It does not include package log, which should be avoided in core packages.
@@ -191,6 +198,12 @@ var depsRules = `
 
        log !< FMT;
 
+       OS, FMT
+       < internal/execabs;
+
+       OS, internal/execabs
+       < internal/goroot;
+
        # Misc packages needing only FMT.
        FMT
        < flag,
@@ -276,9 +289,12 @@ var depsRules = `
        math/big, go/token
        < go/constant;
 
-       container/heap, go/constant, go/parser
+       container/heap, go/constant, go/parser, regexp
        < go/types;
 
+       FMT
+       < go/build/constraint;
+
        go/doc, go/parser, internal/goroot, internal/goversion
        < go/build;
 
@@ -514,8 +530,8 @@ func listStdPkgs(goroot string) ([]string, error) {
        var pkgs []string
 
        src := filepath.Join(goroot, "src") + string(filepath.Separator)
-       walkFn := func(path string, fi fs.FileInfo, err error) error {
-               if err != nil || !fi.IsDir() || path == src {
+       walkFn := func(path string, d fs.DirEntry, err error) error {
+               if err != nil || !d.IsDir() || path == src {
                        return nil
                }
 
@@ -532,7 +548,7 @@ func listStdPkgs(goroot string) ([]string, error) {
                pkgs = append(pkgs, strings.TrimPrefix(name, "vendor/"))
                return nil
        }
-       if err := filepath.Walk(src, walkFn); err != nil {
+       if err := filepath.WalkDir(src, walkFn); err != nil {
                return nil, err
        }
        return pkgs, nil
@@ -601,12 +617,13 @@ func findImports(pkg string) ([]string, error) {
                vpkg = "vendor/" + pkg
        }
        dir := filepath.Join(Default.GOROOT, "src", vpkg)
-       files, err := ioutil.ReadDir(dir)
+       files, err := os.ReadDir(dir)
        if err != nil {
                return nil, err
        }
        var imports []string
        var haveImport = map[string]bool{}
+       fset := token.NewFileSet()
        for _, file := range files {
                name := file.Name()
                if name == "slice_go14.go" || name == "slice_go18.go" {
@@ -616,8 +633,10 @@ func findImports(pkg string) ([]string, error) {
                if !strings.HasSuffix(name, ".go") || strings.HasSuffix(name, "_test.go") {
                        continue
                }
-               var info fileInfo
-               info.name = filepath.Join(dir, name)
+               info := fileInfo{
+                       name: filepath.Join(dir, name),
+                       fset: fset,
+               }
                f, err := os.Open(info.name)
                if err != nil {
                        return nil, err
@@ -845,3 +864,22 @@ func TestStdlibLowercase(t *testing.T) {
                }
        }
 }
+
+// TestFindImports tests that findImports works.  See #43249.
+func TestFindImports(t *testing.T) {
+       imports, err := findImports("go/build")
+       if err != nil {
+               t.Fatal(err)
+       }
+       t.Logf("go/build imports %q", imports)
+       want := []string{"bytes", "os", "path/filepath", "strings"}
+wantLoop:
+       for _, w := range want {
+               for _, imp := range imports {
+                       if imp == w {
+                               continue wantLoop
+                       }
+               }
+               t.Errorf("expected to find %q in import list", w)
+       }
+}