github.com/gwaycc/gometalinter@v3.0.0+incompatible/regressiontests/vet_test.go (about)

     1  package regressiontests
     2  
     3  import (
     4  	"runtime"
     5  	"strings"
     6  	"testing"
     7  
     8  	"gotest.tools/fs"
     9  	"github.com/stretchr/testify/assert"
    10  )
    11  
    12  func TestVet(t *testing.T) {
    13  	t.Parallel()
    14  
    15  	dir := fs.NewDir(t, "test-vet",
    16  		fs.WithFile("file.go", vetFile("root")),
    17  		fs.WithFile("file_test.go", vetExternalPackageFile("root_test")),
    18  		fs.WithDir("sub",
    19  			fs.WithFile("file.go", vetFile("sub"))),
    20  		fs.WithDir("excluded",
    21  			fs.WithFile("file.go", vetFile("excluded"))))
    22  	defer dir.Remove()
    23  
    24  	var expected Issues
    25  	version := runtime.Version()
    26  
    27  	switch {
    28  	case strings.HasPrefix(version, "go1.8"), strings.HasPrefix(version, "go1.9"):
    29  		expected = Issues{
    30  			{Linter: "vet", Severity: "error", Path: "file.go", Line: 7, Col: 0, Message: "missing argument for Printf(\"%d\"): format reads arg 1, have only 0 args"},
    31  			{Linter: "vet", Severity: "error", Path: "file.go", Line: 7, Col: 0, Message: "unreachable code"},
    32  			{Linter: "vet", Severity: "error", Path: "file_test.go", Line: 5, Col: 0, Message: "unreachable code"},
    33  			{Linter: "vet", Severity: "error", Path: "sub/file.go", Line: 7, Col: 0, Message: "missing argument for Printf(\"%d\"): format reads arg 1, have only 0 args"},
    34  			{Linter: "vet", Severity: "error", Path: "sub/file.go", Line: 7, Col: 0, Message: "unreachable code"},
    35  		}
    36  	case  strings.HasPrefix(version, "go1.10"):
    37  		expected = Issues{
    38  			{Linter: "vet", Severity: "error", Path: "file.go", Line: 7, Col: 0, Message: "Printf format %d reads arg #1, but call has only 0 args"},
    39  			{Linter: "vet", Severity: "error", Path: "file.go", Line: 7, Col: 0, Message: "unreachable code"},
    40  			{Linter: "vet", Severity: "error", Path: "file_test.go", Line: 5, Col: 0, Message: "unreachable code"},
    41  			{Linter: "vet", Severity: "error", Path: "sub/file.go", Line: 7, Col: 0, Message: "Printf format %d reads arg #1, but call has only 0 args"},
    42  			{Linter: "vet", Severity: "error", Path: "sub/file.go", Line: 7, Col: 0, Message: "unreachable code"},
    43  		}
    44  	default:
    45  		expected = Issues{
    46  			{Linter: "vet", Severity: "error", Path: "file.go", Line: 7, Col: 0, Message: "Printf format %d reads arg #1, but call has 0 args"},
    47  			{Linter: "vet", Severity: "error", Path: "file.go", Line: 7, Col: 0, Message: "unreachable code"},
    48  			{Linter: "vet", Severity: "error", Path: "file_test.go", Line: 5, Col: 0, Message: "unreachable code"},
    49  			{Linter: "vet", Severity: "error", Path: "sub/file.go", Line: 7, Col: 0, Message: "Printf format %d reads arg #1, but call has 0 args"},
    50  			{Linter: "vet", Severity: "error", Path: "sub/file.go", Line: 7, Col: 0, Message: "unreachable code"},
    51  		}
    52  	}
    53  
    54  	actual := RunLinter(t, "vet", dir.Path(), "--skip=excluded")
    55  	assert.Equal(t, expected, actual)
    56  }
    57  
    58  func vetFile(pkg string) string {
    59  	return `package ` + pkg + `
    60  
    61  import "fmt"
    62  
    63  func Something() {
    64  	return
    65  	fmt.Printf("%d")
    66  }
    67  `
    68  }
    69  
    70  func vetExternalPackageFile(pkg string) string {
    71  	return `package ` + pkg + `
    72  
    73  func Example() {
    74  	return
    75  	println("example")
    76  }
    77  `
    78  }