github.com/go-asm/go@v1.21.1-0.20240213172139-40c5ead50c48/cmd/compile/syntax/testing_test.go (about) 1 // Copyright 2020 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 syntax 6 7 import ( 8 "fmt" 9 "regexp" 10 "strings" 11 "testing" 12 ) 13 14 func TestCommentMap(t *testing.T) { 15 const src = `/* ERROR "0:0" */ /* ERROR "0:0" */ // ERROR "0:0" 16 // ERROR "0:0" 17 x /* ERROR "3:1" */ // ignore automatically inserted semicolon here 18 /* ERROR "3:1" */ // position of x on previous line 19 x /* ERROR "5:4" */ ; // do not ignore this semicolon 20 /* ERROR "5:24" */ // position of ; on previous line 21 package /* ERROR "7:2" */ // indented with tab 22 import /* ERROR "8:9" */ // indented with blanks 23 ` 24 m := CommentMap(strings.NewReader(src), regexp.MustCompile("^ ERROR ")) 25 found := 0 // number of errors found 26 for line, errlist := range m { 27 for _, err := range errlist { 28 if err.Pos.Line() != line { 29 t.Errorf("%v: got map line %d; want %d", err, err.Pos.Line(), line) 30 continue 31 } 32 // err.Pos.Line() == line 33 34 got := strings.TrimSpace(err.Msg[len(" ERROR "):]) 35 want := fmt.Sprintf(`"%d:%d"`, line, err.Pos.Col()) 36 if got != want { 37 t.Errorf("%v: got msg %q; want %q", err, got, want) 38 continue 39 } 40 found++ 41 } 42 } 43 44 want := strings.Count(src, " ERROR ") 45 if found != want { 46 t.Errorf("CommentMap got %d errors; want %d", found, want) 47 } 48 }