github.com/chenfeining/golangci-lint@v1.0.2-0.20230730162517-14c6c67868df/test/fix_test.go (about)

     1  package test
     2  
     3  import (
     4  	"os"
     5  	"os/exec"
     6  	"path/filepath"
     7  	"testing"
     8  
     9  	"github.com/stretchr/testify/require"
    10  
    11  	"github.com/chenfeining/golangci-lint/test/testshared"
    12  )
    13  
    14  // value: "1"
    15  const envKeepTempFiles = "GL_KEEP_TEMP_FILES"
    16  
    17  func setupTestFix(t *testing.T) []string {
    18  	t.Helper()
    19  
    20  	testshared.SkipOnWindows(t)
    21  
    22  	tmpDir := filepath.Join(testdataDir, "fix.tmp")
    23  	_ = os.RemoveAll(tmpDir) // cleanup previous runs
    24  
    25  	if os.Getenv(envKeepTempFiles) == "1" {
    26  		t.Logf("Temp dir for fix test: %s", tmpDir)
    27  	} else {
    28  		t.Cleanup(func() { _ = os.RemoveAll(tmpDir) })
    29  	}
    30  
    31  	sourcesDir := filepath.Join(testdataDir, "fix")
    32  
    33  	err := exec.Command("cp", "-R", sourcesDir, tmpDir).Run()
    34  	require.NoError(t, err)
    35  
    36  	testshared.InstallGolangciLint(t)
    37  
    38  	return findSources(t, tmpDir, "in", "*.go")
    39  }
    40  
    41  func TestFix(t *testing.T) {
    42  	sources := setupTestFix(t)
    43  
    44  	for _, input := range sources {
    45  		input := input
    46  		t.Run(filepath.Base(input), func(t *testing.T) {
    47  			t.Parallel()
    48  
    49  			rc := testshared.ParseTestDirectives(t, input)
    50  			if rc == nil {
    51  				t.Logf("Skipped: %s", input)
    52  				return
    53  			}
    54  
    55  			testshared.NewRunnerBuilder(t).
    56  				WithArgs("--disable-all",
    57  					"--print-issued-lines=false",
    58  					"--print-linter-name=false",
    59  					"--out-format=line-number",
    60  					"--fix").
    61  				WithRunContext(rc).
    62  				WithTargetPath(input).
    63  				Runner().
    64  				Run().
    65  				ExpectExitCode(rc.ExitCode)
    66  
    67  			output, err := os.ReadFile(input)
    68  			require.NoError(t, err)
    69  
    70  			expectedOutput, err := os.ReadFile(filepath.Join(testdataDir, "fix", "out", filepath.Base(input)))
    71  			require.NoError(t, err)
    72  
    73  			require.Equal(t, string(expectedOutput), string(output))
    74  		})
    75  	}
    76  }
    77  
    78  func TestFix_pathPrefix(t *testing.T) {
    79  	sources := setupTestFix(t)
    80  
    81  	for _, input := range sources {
    82  		input := input
    83  		t.Run(filepath.Base(input), func(t *testing.T) {
    84  			t.Parallel()
    85  
    86  			rc := testshared.ParseTestDirectives(t, input)
    87  			if rc == nil {
    88  				t.Logf("Skipped: %s", input)
    89  				return
    90  			}
    91  
    92  			testshared.NewRunnerBuilder(t).
    93  				WithArgs("--disable-all",
    94  					"--print-issued-lines=false",
    95  					"--print-linter-name=false",
    96  					"--out-format=line-number",
    97  					"--fix",
    98  					"--path-prefix=foobar/").
    99  				WithRunContext(rc).
   100  				WithTargetPath(input).
   101  				Runner().
   102  				Run().
   103  				ExpectExitCode(rc.ExitCode)
   104  
   105  			output, err := os.ReadFile(input)
   106  			require.NoError(t, err)
   107  
   108  			expectedOutput, err := os.ReadFile(filepath.Join(testdataDir, "fix", "out", filepath.Base(input)))
   109  			require.NoError(t, err)
   110  
   111  			require.Equal(t, string(expectedOutput), string(output))
   112  		})
   113  	}
   114  }