github.com/ninadingole/gotest-ls@v0.0.3/pkg/list_test.go (about)

     1  package pkg_test
     2  
     3  import (
     4  	"fmt"
     5  	"os"
     6  	"testing"
     7  
     8  	"github.com/ninadingole/gotest-ls/pkg"
     9  	"github.com/stretchr/testify/require"
    10  )
    11  
    12  func Test_List(t *testing.T) {
    13  	t.Parallel()
    14  
    15  	tmpDir := t.TempDir()
    16  	generateFakeFiles(t, tmpDir)
    17  
    18  	tests := []struct {
    19  		name       string
    20  		fileOrDirs []string
    21  		want       []pkg.TestDetail
    22  		wantErr    bool
    23  	}{
    24  		{
    25  			name:       "empty",
    26  			fileOrDirs: []string{},
    27  			want:       nil,
    28  		},
    29  		{
    30  			name:       "single file",
    31  			fileOrDirs: []string{fmt.Sprintf("%s/sample/sample_test.go", tmpDir)},
    32  			want: []pkg.TestDetail{
    33  				{
    34  					Name:         "TestSomething",
    35  					FileName:     "sample_test.go",
    36  					RelativePath: "sample_test.go",
    37  					AbsolutePath: fmt.Sprintf("%s/sample/sample_test.go", tmpDir),
    38  					Line:         7,
    39  					Pos:          49,
    40  				},
    41  			},
    42  		},
    43  		{
    44  			name:       "single dir",
    45  			fileOrDirs: []string{fmt.Sprintf("%s/sample", tmpDir)},
    46  			want: []pkg.TestDetail{
    47  				{
    48  					Name:         "TestSomething",
    49  					FileName:     "sample_test.go",
    50  					RelativePath: "sample/sample_test.go",
    51  					AbsolutePath: fmt.Sprintf("%s/sample/sample_test.go", tmpDir),
    52  					Line:         7,
    53  					Pos:          49,
    54  				},
    55  			},
    56  		},
    57  		{
    58  			name:       "fail for invalid dir",
    59  			fileOrDirs: []string{"./testdata/invalid"},
    60  			want:       nil,
    61  			wantErr:    true,
    62  		},
    63  		{
    64  			name:       "fail to parse invalid test file",
    65  			fileOrDirs: []string{fmt.Sprintf("%s/dummy/dummy_test.go", tmpDir)},
    66  			want:       nil,
    67  			wantErr:    true,
    68  		},
    69  		{
    70  			name:       "parse subtests correctly",
    71  			fileOrDirs: []string{"../tests/table_test.go"},
    72  			want:       expected,
    73  		},
    74  	}
    75  	for _, tt := range tests {
    76  		tt := tt
    77  
    78  		t.Run(tt.name, func(t *testing.T) {
    79  			t.Parallel()
    80  
    81  			got, err := pkg.List(tt.fileOrDirs)
    82  			if (err != nil) != tt.wantErr {
    83  				t.Errorf("List() error = %v, wantErr %v", err, tt.wantErr)
    84  
    85  				return
    86  			}
    87  			require.Equal(t, tt.want, got)
    88  		})
    89  	}
    90  }
    91  
    92  func generateFakeFiles(t *testing.T, dir string) {
    93  	t.Helper()
    94  
    95  	_ = os.Mkdir(fmt.Sprintf("%s/dummy", dir), 0o755)
    96  	_ = os.Mkdir(fmt.Sprintf("%s/sample", dir), 0o755)
    97  
    98  	err := os.WriteFile(fmt.Sprintf("%s/dummy/dummy_test.go", dir), []byte(`package tests_test
    99  
   100  import (
   101  	"testing"
   102  )
   103  
   104  dummy dummy test
   105  `), os.ModePerm)
   106  	require.NoError(t, err)
   107  
   108  	err = os.WriteFile(fmt.Sprintf("%s/sample/sample_test.go", dir), []byte(`package tests_test
   109  
   110  import (
   111  	"testing"
   112  )
   113  
   114  func TestSomething(t *testing.T) {
   115  	t.Parallel()
   116  	t.Skipf("Skipping...")
   117  	t.Log("Hello, world!")
   118  }
   119  `), os.ModePerm)
   120  
   121  	require.NoError(t, err)
   122  }
   123  
   124  var (
   125  	pwd, _    = os.Getwd()
   126  	parentDir = pwd[:len(pwd)-len("/pkg")]
   127  	expected  = []pkg.TestDetail{
   128  		{Name: "Test/5_+_5_=_10", FileName: "table_test.go", RelativePath: "table_test.go", AbsolutePath: fmt.Sprintf("%s/tests/table_test.go", parentDir), Line: 23, Pos: 265},
   129  		{Name: "Test/5_-_5_=_0", FileName: "table_test.go", RelativePath: "table_test.go", AbsolutePath: fmt.Sprintf("%s/tests/table_test.go", parentDir), Line: 30, Pos: 355},
   130  		{Name: "Test/mixed_subtest_1", FileName: "table_test.go", RelativePath: "table_test.go", AbsolutePath: fmt.Sprintf("%s/tests/table_test.go", parentDir), Line: 12, Pos: 111},
   131  		{Name: "Test/mixed_test_2", FileName: "table_test.go", RelativePath: "table_test.go", AbsolutePath: fmt.Sprintf("%s/tests/table_test.go", parentDir), Line: 48, Pos: 635},
   132  	}
   133  )