138 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			138 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package testshared
 | |
| 
 | |
| import (
 | |
| 	"regexp"
 | |
| 	"testing"
 | |
| 
 | |
| 	"github.com/stretchr/testify/assert"
 | |
| 	"github.com/stretchr/testify/require"
 | |
| )
 | |
| 
 | |
| func Test_parseComments(t *testing.T) {
 | |
| 	testCases := []struct {
 | |
| 		filename string
 | |
| 		data     string
 | |
| 		expected map[key][]expectation
 | |
| 	}{
 | |
| 		{
 | |
| 			filename: "a/b.go",
 | |
| 			data: `package main // want package:"found"
 | |
| 
 | |
| `,
 | |
| 			expected: map[key][]expectation{
 | |
| 				{file: "a/b.go", line: 1}: {
 | |
| 					{kind: "diagnostic", name: "package", rx: regexp.MustCompile(`found`)},
 | |
| 				},
 | |
| 			},
 | |
| 		},
 | |
| 		{
 | |
| 			filename: "a/c.go",
 | |
| 			data: `package main
 | |
| 
 | |
| func main() {
 | |
| 	println("hello, world") // want "call of println"
 | |
| }
 | |
| `,
 | |
| 			expected: map[key][]expectation{
 | |
| 				{file: "a/c.go", line: 4}: {
 | |
| 					{kind: "diagnostic", name: "", rx: regexp.MustCompile(`call of println`)},
 | |
| 				},
 | |
| 			},
 | |
| 		},
 | |
| 		{
 | |
| 			filename: "a/d.go",
 | |
| 			data: `package main
 | |
| 
 | |
| func main() {
 | |
| 	// OK /* */-form.
 | |
| 	println("hello") /* want "call of println" */
 | |
| }
 | |
| `,
 | |
| 			expected: map[key][]expectation{
 | |
| 				{file: "a/d.go", line: 5}: {
 | |
| 					{kind: "diagnostic", name: "", rx: regexp.MustCompile(`call of println`)},
 | |
| 				},
 | |
| 			},
 | |
| 		},
 | |
| 		{
 | |
| 			filename: "a/e.go",
 | |
| 			data: `package main
 | |
| 
 | |
| func main() {
 | |
| 	// OK  (nested comment)
 | |
| 	println("hello") // some comment // want "call of println"
 | |
| }
 | |
| `,
 | |
| 			expected: map[key][]expectation{
 | |
| 				{file: "a/e.go", line: 5}: {
 | |
| 					{kind: "diagnostic", name: "", rx: regexp.MustCompile(`call of println`)},
 | |
| 				},
 | |
| 			},
 | |
| 		},
 | |
| 		{
 | |
| 			filename: "a/f.go",
 | |
| 			data: `package main
 | |
| 
 | |
| func main() {
 | |
| 	// OK (nested comment in /**/)
 | |
| 	println("hello") /* some comment // want "call of println" */
 | |
| }
 | |
| `,
 | |
| 			expected: map[key][]expectation{
 | |
| 				{file: "a/f.go", line: 5}: {
 | |
| 					{kind: "diagnostic", name: "", rx: regexp.MustCompile(`call of println`)},
 | |
| 				},
 | |
| 			},
 | |
| 		},
 | |
| 		{
 | |
| 			filename: "a/g.go",
 | |
| 			data: `package main
 | |
| 
 | |
| func main() {
 | |
| 	// OK (multiple expectations on same line)
 | |
| 	println(); println() // want "call of println(...)" "call of println(...)"
 | |
| }
 | |
| `,
 | |
| 			expected: map[key][]expectation{
 | |
| 				{file: "a/g.go", line: 5}: {
 | |
| 					{kind: "diagnostic", name: "", rx: regexp.MustCompile(`call of println(...)`)},
 | |
| 					{kind: "diagnostic", name: "", rx: regexp.MustCompile(`call of println(...)`)},
 | |
| 				},
 | |
| 			},
 | |
| 		},
 | |
| 		{
 | |
| 			filename: "a/h.go",
 | |
| 			data: `package main
 | |
| 
 | |
| func println(...interface{}) { println() } // want println:"found" "call of println(...)"
 | |
| `,
 | |
| 			expected: map[key][]expectation{
 | |
| 				{file: "a/h.go", line: 3}: {
 | |
| 					{kind: "diagnostic", name: "println", rx: regexp.MustCompile(`found`)},
 | |
| 					{kind: "diagnostic", name: "", rx: regexp.MustCompile(`call of println(...)`)},
 | |
| 				},
 | |
| 			},
 | |
| 		},
 | |
| 		{
 | |
| 			filename: "a/b_test.go",
 | |
| 			data: `package main
 | |
| 
 | |
| // Test file shouldn't mess with things
 | |
| `,
 | |
| 			expected: map[key][]expectation{},
 | |
| 		},
 | |
| 	}
 | |
| 
 | |
| 	for _, test := range testCases {
 | |
| 		test := test
 | |
| 		t.Run(test.filename, func(t *testing.T) {
 | |
| 			t.Parallel()
 | |
| 
 | |
| 			expectations, err := parseComments(test.filename, []byte(test.data))
 | |
| 			require.NoError(t, err)
 | |
| 
 | |
| 			assert.Equal(t, test.expected, expectations)
 | |
| 		})
 | |
| 	}
 | |
| }
 | 
