Giant blob of minor changes
[dotfiles/.git] / .config / coc / extensions / coc-go-data / tools / pkg / mod / golang.org / x / tools@v0.0.0-20201105173854-bc9fc8d8c4bc / internal / lsp / source / format_test.go
diff --git a/.config/coc/extensions/coc-go-data/tools/pkg/mod/golang.org/x/tools@v0.0.0-20201105173854-bc9fc8d8c4bc/internal/lsp/source/format_test.go b/.config/coc/extensions/coc-go-data/tools/pkg/mod/golang.org/x/tools@v0.0.0-20201105173854-bc9fc8d8c4bc/internal/lsp/source/format_test.go
new file mode 100644 (file)
index 0000000..e0dfe15
--- /dev/null
@@ -0,0 +1,78 @@
+package source
+
+import (
+       "fmt"
+       "strings"
+       "testing"
+
+       "golang.org/x/tools/internal/lsp/diff"
+       "golang.org/x/tools/internal/lsp/diff/myers"
+)
+
+func TestImportPrefix(t *testing.T) {
+       for i, tt := range []struct {
+               input, want string
+       }{
+               {"package foo", "package foo"},
+               {"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"},
+               {
+                       "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))
+               }
+       }
+}
+
+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))
+               }
+       }
+}
+
+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))
+}