X-Git-Url: https://git.josue.xyz/?a=blobdiff_plain;f=.config%2Fcoc%2Fextensions%2Fcoc-go-data%2Ftools%2Fpkg%2Fmod%2Fgolang.org%2Fx%2Ftools%40v0.0.0-20201105173854-bc9fc8d8c4bc%2Fgodoc%2Fversions_test.go;fp=.config%2Fcoc%2Fextensions%2Fcoc-go-data%2Ftools%2Fpkg%2Fmod%2Fgolang.org%2Fx%2Ftools%40v0.0.0-20201105173854-bc9fc8d8c4bc%2Fgodoc%2Fversions_test.go;h=ad2d5e434d6beebd07993755c03c10e3b1f74eda;hb=4d07c77cf4d78cab8639e13ddc3c22495e585b0b;hp=0000000000000000000000000000000000000000;hpb=b3950616b54221c40a7dab9099bda675007e5b6e;p=dotfiles%2F.git diff --git a/.config/coc/extensions/coc-go-data/tools/pkg/mod/golang.org/x/tools@v0.0.0-20201105173854-bc9fc8d8c4bc/godoc/versions_test.go b/.config/coc/extensions/coc-go-data/tools/pkg/mod/golang.org/x/tools@v0.0.0-20201105173854-bc9fc8d8c4bc/godoc/versions_test.go new file mode 100644 index 00000000..ad2d5e43 --- /dev/null +++ b/.config/coc/extensions/coc-go-data/tools/pkg/mod/golang.org/x/tools@v0.0.0-20201105173854-bc9fc8d8c4bc/godoc/versions_test.go @@ -0,0 +1,132 @@ +// 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 godoc + +import ( + "go/build" + "testing" +) + +func TestParseVersionRow(t *testing.T) { + tests := []struct { + row string + want versionedRow + }{ + { + row: "# comment", + }, + { + row: "", + }, + { + row: "pkg archive/tar, type Writer struct", + want: versionedRow{ + pkg: "archive/tar", + kind: "type", + name: "Writer", + }, + }, + { + row: "pkg archive/tar, type Header struct, AccessTime time.Time", + want: versionedRow{ + pkg: "archive/tar", + kind: "field", + structName: "Header", + name: "AccessTime", + }, + }, + { + row: "pkg archive/tar, method (*Reader) Read([]uint8) (int, error)", + want: versionedRow{ + pkg: "archive/tar", + kind: "method", + name: "Read", + recv: "*Reader", + }, + }, + { + row: "pkg archive/zip, func FileInfoHeader(os.FileInfo) (*FileHeader, error)", + want: versionedRow{ + pkg: "archive/zip", + kind: "func", + name: "FileInfoHeader", + }, + }, + { + row: "pkg encoding/base32, method (Encoding) WithPadding(int32) *Encoding", + want: versionedRow{ + pkg: "encoding/base32", + kind: "method", + name: "WithPadding", + recv: "Encoding", + }, + }, + } + + for i, tt := range tests { + got, ok := parseRow(tt.row) + if !ok { + got = versionedRow{} + } + if got != tt.want { + t.Errorf("%d. parseRow(%q) = %+v; want %+v", i, tt.row, got, tt.want) + } + } +} + +// hasTag checks whether a given release tag is contained in the current version +// of the go binary. +func hasTag(t string) bool { + for _, v := range build.Default.ReleaseTags { + if t == v { + return true + } + } + return false +} + +func TestAPIVersion(t *testing.T) { + av, err := parsePackageAPIInfo() + if err != nil { + t.Fatal(err) + } + for _, tc := range []struct { + kind string + pkg string + name string + receiver string + want string + }{ + // Things that were added post-1.0 should appear + {"func", "archive/tar", "FileInfoHeader", "", "1.1"}, + {"type", "bufio", "Scanner", "", "1.1"}, + {"method", "bufio", "WriteTo", "*Reader", "1.1"}, + + {"func", "bytes", "LastIndexByte", "", "1.5"}, + {"type", "crypto", "Decrypter", "", "1.5"}, + {"method", "crypto/rsa", "Decrypt", "*PrivateKey", "1.5"}, + {"method", "debug/dwarf", "GoString", "Class", "1.5"}, + + {"func", "os", "IsTimeout", "", "1.10"}, + {"type", "strings", "Builder", "", "1.10"}, + {"method", "strings", "WriteString", "*Builder", "1.10"}, + + // Things from package syscall should never appear + {"func", "syscall", "FchFlags", "", ""}, + {"type", "syscall", "Inet4Pktinfo", "", ""}, + + // Things added in Go 1 should never appear + {"func", "archive/tar", "NewReader", "", ""}, + {"type", "archive/tar", "Header", "", ""}, + {"method", "archive/tar", "Next", "*Reader", ""}, + } { + if tc.want != "" && !hasTag("go"+tc.want) { + continue + } + if got := av.sinceVersionFunc(tc.kind, tc.receiver, tc.name, tc.pkg); got != tc.want { + t.Errorf(`sinceFunc("%s", "%s", "%s", "%s") = "%s"; want "%s"`, tc.kind, tc.receiver, tc.name, tc.pkg, got, tc.want) + } + } +}