2020-01-16 17:45:26 -07:00
|
|
|
package source
|
|
|
|
|
|
|
|
import (
|
2020-07-26 18:14:33 -06:00
|
|
|
"fmt"
|
2020-09-01 22:43:45 -06:00
|
|
|
"strings"
|
2020-01-16 17:45:26 -07:00
|
|
|
"testing"
|
|
|
|
|
2020-07-26 18:14:33 -06:00
|
|
|
"golang.org/x/tools/internal/lsp/diff"
|
|
|
|
"golang.org/x/tools/internal/lsp/diff/myers"
|
|
|
|
)
|
2020-01-16 17:45:26 -07:00
|
|
|
|
2020-05-09 06:54:23 -06:00
|
|
|
func TestImportPrefix(t *testing.T) {
|
2020-07-26 18:14:33 -06:00
|
|
|
for i, tt := range []struct {
|
|
|
|
input, want string
|
|
|
|
}{
|
2020-07-14 12:15:32 -06:00
|
|
|
{"package foo", "package foo"},
|
2020-05-09 06:54:23 -06:00
|
|
|
{"package foo\n", "package foo\n"},
|
|
|
|
{"package foo\n\nfunc f(){}\n", "package foo\n"},
|
|
|
|
{"package foo\n\nimport \"fmt\"\n", "package foo\n\nimport \"fmt\""},
|
|
|
|
{"package foo\nimport (\n\"fmt\"\n)\n", "package foo\nimport (\n\"fmt\"\n)"},
|
|
|
|
{"\n\n\npackage foo\n", "\n\n\npackage foo\n"},
|
|
|
|
{"// hi \n\npackage foo //xx\nfunc _(){}\n", "// hi \n\npackage foo //xx\n"},
|
|
|
|
{"package foo //hi\n", "package foo //hi\n"},
|
|
|
|
{"//hi\npackage foo\n//a\n\n//b\n", "//hi\npackage foo\n//a\n\n//b\n"},
|
2020-07-26 18:14:33 -06:00
|
|
|
{
|
|
|
|
"package a\n\nimport (\n \"fmt\"\n)\n//hi\n",
|
|
|
|
"package a\n\nimport (\n \"fmt\"\n)\n//hi\n",
|
|
|
|
},
|
|
|
|
{`package a /*hi*/`, `package a /*hi*/`},
|
|
|
|
{"package main\r\n\r\nimport \"go/types\"\r\n\r\n/*\r\n\r\n */\r\n", "package main\r\n\r\nimport \"go/types\"\r\n\r\n/*\r\n\r\n */\r\n"},
|
|
|
|
{"package x; import \"os\"; func f() {}\n\n", "package x; import \"os\""},
|
|
|
|
{"package x; func f() {fmt.Println()}\n\n", "package x"},
|
|
|
|
} {
|
|
|
|
got := importPrefix([]byte(tt.input))
|
|
|
|
if got != tt.want {
|
|
|
|
t.Errorf("%d: failed for %q:\n%s", i, tt.input, diffStr(tt.want, got))
|
2020-05-09 06:54:23 -06:00
|
|
|
}
|
|
|
|
}
|
2020-01-16 17:45:26 -07:00
|
|
|
}
|
2020-07-26 18:14:33 -06:00
|
|
|
|
2020-09-01 22:43:45 -06:00
|
|
|
func TestCRLFFile(t *testing.T) {
|
|
|
|
for i, tt := range []struct {
|
|
|
|
input, want string
|
|
|
|
}{
|
|
|
|
{
|
|
|
|
input: `package main
|
|
|
|
|
|
|
|
/*
|
|
|
|
Hi description
|
|
|
|
*/
|
|
|
|
func Hi() {
|
|
|
|
}
|
|
|
|
`,
|
|
|
|
want: `package main
|
|
|
|
|
|
|
|
/*
|
|
|
|
Hi description
|
|
|
|
*/`,
|
|
|
|
},
|
|
|
|
} {
|
|
|
|
got := importPrefix([]byte(strings.ReplaceAll(tt.input, "\n", "\r\n")))
|
|
|
|
want := strings.ReplaceAll(tt.want, "\n", "\r\n")
|
|
|
|
if got != want {
|
|
|
|
t.Errorf("%d: failed for %q:\n%s", i, tt.input, diffStr(want, got))
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-07-26 18:14:33 -06:00
|
|
|
func diffStr(want, got string) string {
|
|
|
|
if want == got {
|
|
|
|
return ""
|
|
|
|
}
|
|
|
|
// Add newlines to avoid newline messages in diff.
|
|
|
|
want += "\n"
|
|
|
|
got += "\n"
|
|
|
|
d := myers.ComputeEdits("", want, got)
|
|
|
|
return fmt.Sprintf("%q", diff.ToUnified("want", "got", want, d))
|
|
|
|
}
|