github.com/powerman/golang-tools@v0.1.11-0.20220410185822-5ad214d8d803/go/packages/packagestest/expect_test.go (about)

     1  // Copyright 2018 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package packagestest_test
     6  
     7  import (
     8  	"go/token"
     9  	"testing"
    10  
    11  	"github.com/powerman/golang-tools/go/expect"
    12  	"github.com/powerman/golang-tools/go/packages/packagestest"
    13  	"github.com/powerman/golang-tools/internal/span"
    14  )
    15  
    16  func TestExpect(t *testing.T) {
    17  	exported := packagestest.Export(t, packagestest.GOPATH, []packagestest.Module{{
    18  		Name:  "golang.org/fake",
    19  		Files: packagestest.MustCopyFileTree("testdata"),
    20  	}})
    21  	defer exported.Cleanup()
    22  	checkCount := 0
    23  	if err := exported.Expect(map[string]interface{}{
    24  		"check": func(src, target token.Position) {
    25  			checkCount++
    26  		},
    27  		"boolArg": func(n *expect.Note, yes, no bool) {
    28  			if !yes {
    29  				t.Errorf("Expected boolArg first param to be true")
    30  			}
    31  			if no {
    32  				t.Errorf("Expected boolArg second param to be false")
    33  			}
    34  		},
    35  		"intArg": func(n *expect.Note, i int64) {
    36  			if i != 42 {
    37  				t.Errorf("Expected intarg to be 42")
    38  			}
    39  		},
    40  		"stringArg": func(n *expect.Note, name expect.Identifier, value string) {
    41  			if string(name) != value {
    42  				t.Errorf("Got string arg %v expected %v", value, name)
    43  			}
    44  		},
    45  		"directNote": func(n *expect.Note) {},
    46  		"range": func(r span.Range) {
    47  			if r.Start == token.NoPos || r.Start == 0 {
    48  				t.Errorf("Range had no valid starting position")
    49  			}
    50  			if r.End == token.NoPos || r.End == 0 {
    51  				t.Errorf("Range had no valid ending position")
    52  			} else if r.End <= r.Start {
    53  				t.Errorf("Range ending was not greater than start")
    54  			}
    55  		},
    56  		"checkEOF": func(n *expect.Note, p token.Pos) {
    57  			if p <= n.Pos {
    58  				t.Errorf("EOF was before the checkEOF note")
    59  			}
    60  		},
    61  	}); err != nil {
    62  		t.Fatal(err)
    63  	}
    64  	// We expect to have walked the @check annotations in all .go files,
    65  	// including _test.go files (XTest or otherwise). But to have walked the
    66  	// non-_test.go files only once. Hence wantCheck = 3 (testdata/test.go) + 1
    67  	// (testdata/test_test.go) + 1 (testdata/x_test.go)
    68  	wantCheck := 7
    69  	if wantCheck != checkCount {
    70  		t.Fatalf("Expected @check count of %v; got %v", wantCheck, checkCount)
    71  	}
    72  }