Source file src/go/ast/issues_test.go

     1  // Copyright 2019 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 ast_test
     6  
     7  import (
     8  	"go/ast"
     9  	"go/parser"
    10  	"go/token"
    11  	"testing"
    12  )
    13  
    14  func TestIssue33649(t *testing.T) {
    15  	for _, src := range []string{
    16  		`package p; func _()`,
    17  		`package p; func _() {`,
    18  		`package p; func _() { _ = 0`,
    19  		`package p; func _() { _ = 0 }`,
    20  	} {
    21  		fset := token.NewFileSet()
    22  		f, _ := parser.ParseFile(fset, "", src, parser.AllErrors)
    23  		if f == nil {
    24  			panic("invalid test setup: parser didn't return an AST")
    25  		}
    26  
    27  		// find corresponding token.File
    28  		var tf *token.File
    29  		fset.Iterate(func(f *token.File) bool {
    30  			tf = f
    31  			return true
    32  		})
    33  		tfEnd := tf.Base() + tf.Size()
    34  
    35  		fd := f.Decls[len(f.Decls)-1].(*ast.FuncDecl)
    36  		fdEnd := int(fd.End())
    37  
    38  		if fdEnd != tfEnd {
    39  			t.Errorf("%q: got fdEnd = %d; want %d (base = %d, size = %d)", src, fdEnd, tfEnd, tf.Base(), tf.Size())
    40  		}
    41  	}
    42  }
    43  

View as plain text