github.com/april1989/origin-go-tools@v0.0.32/internal/lsp/source/format_test.go (about) 1 package source 2 3 import ( 4 "fmt" 5 "strings" 6 "testing" 7 8 "github.com/april1989/origin-go-tools/internal/lsp/diff" 9 "github.com/april1989/origin-go-tools/internal/lsp/diff/myers" 10 ) 11 12 func TestImportPrefix(t *testing.T) { 13 for i, tt := range []struct { 14 input, want string 15 }{ 16 {"package foo", "package foo"}, 17 {"package foo\n", "package foo\n"}, 18 {"package foo\n\nfunc f(){}\n", "package foo\n"}, 19 {"package foo\n\nimport \"fmt\"\n", "package foo\n\nimport \"fmt\""}, 20 {"package foo\nimport (\n\"fmt\"\n)\n", "package foo\nimport (\n\"fmt\"\n)"}, 21 {"\n\n\npackage foo\n", "\n\n\npackage foo\n"}, 22 {"// hi \n\npackage foo //xx\nfunc _(){}\n", "// hi \n\npackage foo //xx\n"}, 23 {"package foo //hi\n", "package foo //hi\n"}, 24 {"//hi\npackage foo\n//a\n\n//b\n", "//hi\npackage foo\n//a\n\n//b\n"}, 25 { 26 "package a\n\nimport (\n \"fmt\"\n)\n//hi\n", 27 "package a\n\nimport (\n \"fmt\"\n)\n//hi\n", 28 }, 29 {`package a /*hi*/`, `package a /*hi*/`}, 30 {"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"}, 31 {"package x; import \"os\"; func f() {}\n\n", "package x; import \"os\""}, 32 {"package x; func f() {fmt.Println()}\n\n", "package x"}, 33 } { 34 got := importPrefix([]byte(tt.input)) 35 if got != tt.want { 36 t.Errorf("%d: failed for %q:\n%s", i, tt.input, diffStr(tt.want, got)) 37 } 38 } 39 } 40 41 func TestCRLFFile(t *testing.T) { 42 for i, tt := range []struct { 43 input, want string 44 }{ 45 { 46 input: `package main 47 48 /* 49 Hi description 50 */ 51 func Hi() { 52 } 53 `, 54 want: `package main 55 56 /* 57 Hi description 58 */`, 59 }, 60 } { 61 got := importPrefix([]byte(strings.ReplaceAll(tt.input, "\n", "\r\n"))) 62 want := strings.ReplaceAll(tt.want, "\n", "\r\n") 63 if got != want { 64 t.Errorf("%d: failed for %q:\n%s", i, tt.input, diffStr(want, got)) 65 } 66 } 67 } 68 69 func diffStr(want, got string) string { 70 if want == got { 71 return "" 72 } 73 // Add newlines to avoid newline messages in diff. 74 want += "\n" 75 got += "\n" 76 d := myers.ComputeEdits("", want, got) 77 return fmt.Sprintf("%q", diff.ToUnified("want", "got", want, d)) 78 }