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 )