github.phpd.cn/thought-machine/please@v12.2.0+incompatible/tools/please_go_test/gotest/write_test_main_test.go (about) 1 package gotest 2 3 import ( 4 "go/parser" 5 "go/token" 6 "testing" 7 8 "github.com/stretchr/testify/assert" 9 ) 10 11 func TestParseTestSources(t *testing.T) { 12 descr, err := parseTestSources([]string{"tools/please_go_test/gotest/test_data/example_test.go"}) 13 assert.NoError(t, err) 14 assert.Equal(t, "buildgo", descr.Package) 15 assert.Equal(t, "", descr.Main) 16 functions := []string{ 17 "TestReadPkgdef", 18 "TestReadCopiedPkgdef", 19 "TestFindCoverVars", 20 "TestFindCoverVarsFailsGracefully", 21 "TestFindCoverVarsReturnsNothingForEmptyPath", 22 } 23 assert.Equal(t, functions, descr.Functions) 24 } 25 26 func TestParseTestSourcesWithMain(t *testing.T) { 27 descr, err := parseTestSources([]string{"tools/please_go_test/gotest/test_data/example_test_main.go"}) 28 assert.NoError(t, err) 29 assert.Equal(t, "parse", descr.Package) 30 assert.Equal(t, "TestMain", descr.Main) 31 functions := []string{ 32 "TestParseSourceBuildLabel", 33 "TestParseSourceRelativeBuildLabel", 34 "TestParseSourceFromSubdirectory", 35 "TestParseSourceFromOwnedSubdirectory", 36 "TestParseSourceWithParentPath", 37 "TestParseSourceWithAbsolutePath", 38 "TestAddTarget", 39 } 40 assert.Equal(t, functions, descr.Functions) 41 } 42 43 func TestParseTestSourcesFailsGracefully(t *testing.T) { 44 _, err := parseTestSources([]string{"wibble"}) 45 assert.Error(t, err) 46 } 47 48 func TestWriteTestMain(t *testing.T) { 49 err := WriteTestMain( 50 "tools/please_go_test/gotest/test_data", 51 false, // not version 1.8 52 []string{"tools/please_go_test/gotest/test_data/example_test.go"}, 53 "test.go", 54 []CoverVar{}, 55 ) 56 assert.NoError(t, err) 57 // It's not really practical to assert the contents of the file in great detail. 58 // We'll do the obvious thing of asserting that it is valid Go source. 59 f, err := parser.ParseFile(token.NewFileSet(), "test.go", nil, 0) 60 assert.NoError(t, err) 61 assert.Equal(t, "main", f.Name.Name) 62 } 63 64 func TestWriteTestMainWithCoverage(t *testing.T) { 65 err := WriteTestMain( 66 "tools/please_go_test/gotest/test_data", 67 false, // not version 1.8 68 []string{"tools/please_go_test/gotest/test_data/example_test.go"}, 69 "test.go", 70 []CoverVar{{ 71 Dir: "tools/please_go_test/gotest/test_data", 72 ImportPath: "core", 73 Var: "GoCover_lock_go", 74 File: "tools/please_go_test/gotest/test_data/lock.go", 75 }}, 76 ) 77 assert.NoError(t, err) 78 // It's not really practical to assert the contents of the file in great detail. 79 // We'll do the obvious thing of asserting that it is valid Go source. 80 f, err := parser.ParseFile(token.NewFileSet(), "test.go", nil, 0) 81 assert.NoError(t, err) 82 assert.Equal(t, "main", f.Name.Name) 83 } 84 85 func TestExtraImportPaths(t *testing.T) { 86 assert.Equal(t, extraImportPaths("core", "src/core", []CoverVar{ 87 {ImportPath: "core"}, 88 {ImportPath: "output"}, 89 }), []string{ 90 "core \"core\"", 91 "_cover0 \"core\"", 92 "_cover1 \"output\"", 93 }) 94 } 95 96 func TestIsVersion18(t *testing.T) { 97 assert.True(t, isVersion18([]byte("go version go1.8beta2 linux/amd64"))) 98 assert.True(t, isVersion18([]byte("go version go1.8 linux/amd64"))) 99 assert.True(t, isVersion18([]byte("go version go1.8.2 linux/amd64"))) 100 assert.False(t, isVersion18([]byte("go version go1.7beta2 linux/amd64"))) 101 assert.False(t, isVersion18([]byte("go version go1.7 linux/amd64"))) 102 assert.False(t, isVersion18([]byte("go version go1.7.2 linux/amd64"))) 103 assert.True(t, isVersion18([]byte("go version go1.10beta2 linux/amd64"))) 104 assert.True(t, isVersion18([]byte("go version go1.10 linux/amd64"))) 105 assert.True(t, isVersion18([]byte("go version go1.10.2 linux/amd64"))) 106 }