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)
 | 
						|
		})
 | 
						|
	}
 | 
						|
}
 |