go import_test 源码

  • 2022-07-15
  • 浏览 (846)

golang import_test 代码

文件路径:/src/cmd/go/internal/modload/import_test.go

// Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package modload

import (
	"context"
	"internal/testenv"
	"regexp"
	"strings"
	"testing"

	"golang.org/x/mod/module"
)

var importTests = []struct {
	path string
	m    module.Version
	err  string
}{
	{
		path: "golang.org/x/net/context",
		m: module.Version{
			Path: "golang.org/x/net",
		},
	},
	{
		path: "golang.org/x/net",
		err:  `module golang.org/x/net@.* found \(v0.0.0-.*\), but does not contain package golang.org/x/net`,
	},
	{
		path: "golang.org/x/text",
		m: module.Version{
			Path: "golang.org/x/text",
		},
	},
	{
		path: "github.com/rsc/quote/buggy",
		m: module.Version{
			Path:    "github.com/rsc/quote",
			Version: "v1.5.2",
		},
	},
	{
		path: "github.com/rsc/quote",
		m: module.Version{
			Path:    "github.com/rsc/quote",
			Version: "v1.5.2",
		},
	},
	{
		path: "golang.org/x/foo/bar",
		err:  "cannot find module providing package golang.org/x/foo/bar",
	},
}

func TestQueryImport(t *testing.T) {
	testenv.MustHaveExternalNetwork(t)
	testenv.MustHaveExecPath(t, "git")

	oldAllowMissingModuleImports := allowMissingModuleImports
	oldRootMode := RootMode
	defer func() {
		allowMissingModuleImports = oldAllowMissingModuleImports
		RootMode = oldRootMode
	}()
	allowMissingModuleImports = true
	RootMode = NoRoot

	ctx := context.Background()
	rs := LoadModFile(ctx)

	for _, tt := range importTests {
		t.Run(strings.ReplaceAll(tt.path, "/", "_"), func(t *testing.T) {
			// Note that there is no build list, so Import should always fail.
			m, err := queryImport(ctx, tt.path, rs)

			if tt.err == "" {
				if err != nil {
					t.Fatalf("queryImport(_, %q): %v", tt.path, err)
				}
			} else {
				if err == nil {
					t.Fatalf("queryImport(_, %q) = %v, nil; expected error", tt.path, m)
				}
				if !regexp.MustCompile(tt.err).MatchString(err.Error()) {
					t.Fatalf("queryImport(_, %q): error %q, want error matching %#q", tt.path, err, tt.err)
				}
			}

			if m.Path != tt.m.Path || (tt.m.Version != "" && m.Version != tt.m.Version) {
				t.Errorf("queryImport(_, %q) = %v, _; want %v", tt.path, m, tt.m)
			}
		})
	}
}

相关信息

go 源码目录

相关文章

go build 源码

go buildlist 源码

go edit 源码

go help 源码

go import 源码

go init 源码

go list 源码

go load 源码

go modfile 源码

go mvs 源码

0  赞