go index_test 源码

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

golang index_test 代码

文件路径:/src/cmd/go/internal/modindex/index_test.go

// Copyright 2022 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 modindex

import (
	"encoding/hex"
	"encoding/json"
	"go/build"
	"internal/diff"
	"path/filepath"
	"reflect"
	"runtime"
	"testing"
)

func init() {
	isTest = true
	enabled = true // to allow GODEBUG=goindex=0 go test, when things are very broken
}

func TestIndex(t *testing.T) {
	src := filepath.Join(runtime.GOROOT(), "src")
	checkPkg := func(t *testing.T, m *Module, pkg string, data []byte) {
		p := m.Package(pkg)
		bp, err := p.Import(build.Default, build.ImportComment)
		if err != nil {
			t.Fatal(err)
		}
		bp1, err := build.Default.Import(pkg, filepath.Join(src, pkg), build.ImportComment)
		if err != nil {
			t.Fatal(err)
		}

		if !reflect.DeepEqual(bp, bp1) {
			t.Errorf("mismatch")
			t.Logf("index:\n%s", hex.Dump(data))

			js, err := json.MarshalIndent(bp, "", "\t")
			if err != nil {
				t.Fatal(err)
			}
			js1, err := json.MarshalIndent(bp1, "", "\t")
			if err != nil {
				t.Fatal(err)
			}
			t.Logf("diff:\n%s", diff.Diff("index", js, "correct", js1))
			t.FailNow()
		}
	}

	// Check packages in increasing complexity, one at a time.
	pkgs := []string{
		"crypto",
		"encoding",
		"unsafe",
		"encoding/json",
		"runtime",
		"net",
	}
	var raws []*rawPackage
	for _, pkg := range pkgs {
		raw := importRaw(src, pkg)
		raws = append(raws, raw)
		t.Run(pkg, func(t *testing.T) {
			data := encodeModuleBytes([]*rawPackage{raw})
			m, err := fromBytes(src, data)
			if err != nil {
				t.Fatal(err)
			}
			checkPkg(t, m, pkg, data)
		})
	}

	// Check that a multi-package index works too.
	t.Run("all", func(t *testing.T) {
		data := encodeModuleBytes(raws)
		m, err := fromBytes(src, data)
		if err != nil {
			t.Fatal(err)
		}
		for _, pkg := range pkgs {
			checkPkg(t, m, pkg, data)
		}
	})
}

相关信息

go 源码目录

相关文章

go build 源码

go build_read 源码

go read 源码

go scan 源码

go syslist 源码

go syslist_test 源码

go write 源码

0  赞