github.com/powerman/golang-tools@v0.1.11-0.20220410185822-5ad214d8d803/internal/lsp/source/format_test.go (about)

     1  // Copyright 2020 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package source
     6  
     7  import (
     8  	"fmt"
     9  	"strings"
    10  	"testing"
    11  
    12  	"github.com/powerman/golang-tools/internal/lsp/diff"
    13  	"github.com/powerman/golang-tools/internal/lsp/diff/myers"
    14  )
    15  
    16  func TestImportPrefix(t *testing.T) {
    17  	for i, tt := range []struct {
    18  		input, want string
    19  	}{
    20  		{"package foo", "package foo"},
    21  		{"package foo\n", "package foo\n"},
    22  		{"package foo\n\nfunc f(){}\n", "package foo\n"},
    23  		{"package foo\n\nimport \"fmt\"\n", "package foo\n\nimport \"fmt\""},
    24  		{"package foo\nimport (\n\"fmt\"\n)\n", "package foo\nimport (\n\"fmt\"\n)"},
    25  		{"\n\n\npackage foo\n", "\n\n\npackage foo\n"},
    26  		{"// hi \n\npackage foo //xx\nfunc _(){}\n", "// hi \n\npackage foo //xx\n"},
    27  		{"package foo //hi\n", "package foo //hi\n"},
    28  		{"//hi\npackage foo\n//a\n\n//b\n", "//hi\npackage foo\n//a\n\n//b\n"},
    29  		{
    30  			"package a\n\nimport (\n  \"fmt\"\n)\n//hi\n",
    31  			"package a\n\nimport (\n  \"fmt\"\n)\n//hi\n",
    32  		},
    33  		{`package a /*hi*/`, `package a /*hi*/`},
    34  		{"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"},
    35  		{"package x; import \"os\"; func f() {}\n\n", "package x; import \"os\""},
    36  		{"package x; func f() {fmt.Println()}\n\n", "package x"},
    37  	} {
    38  		got, err := importPrefix([]byte(tt.input))
    39  		if err != nil {
    40  			t.Fatal(err)
    41  		}
    42  		if got != tt.want {
    43  			t.Errorf("%d: failed for %q:\n%s", i, tt.input, diffStr(t, tt.want, got))
    44  		}
    45  	}
    46  }
    47  
    48  func TestCRLFFile(t *testing.T) {
    49  	for i, tt := range []struct {
    50  		input, want string
    51  	}{
    52  		{
    53  			input: `package main
    54  
    55  /*
    56  Hi description
    57  */
    58  func Hi() {
    59  }
    60  `,
    61  			want: `package main
    62  
    63  /*
    64  Hi description
    65  */`,
    66  		},
    67  	} {
    68  		got, err := importPrefix([]byte(strings.ReplaceAll(tt.input, "\n", "\r\n")))
    69  		if err != nil {
    70  			t.Fatal(err)
    71  		}
    72  		want := strings.ReplaceAll(tt.want, "\n", "\r\n")
    73  		if got != want {
    74  			t.Errorf("%d: failed for %q:\n%s", i, tt.input, diffStr(t, want, got))
    75  		}
    76  	}
    77  }
    78  
    79  func diffStr(t *testing.T, want, got string) string {
    80  	if want == got {
    81  		return ""
    82  	}
    83  	// Add newlines to avoid newline messages in diff.
    84  	want += "\n"
    85  	got += "\n"
    86  	d, err := myers.ComputeEdits("", want, got)
    87  	if err != nil {
    88  		t.Fatal(err)
    89  	}
    90  	return fmt.Sprintf("%q", diff.ToUnified("want", "got", want, d))
    91  }