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  }