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  }