github.com/Redstoneguy129/cli@v0.0.0-20230211220159-15dca4e91917/internal/utils/parser/token_test.go (about) 1 package parser 2 3 import ( 4 _ "embed" 5 "io/fs" 6 "os" 7 "path/filepath" 8 "strings" 9 "testing" 10 11 "github.com/stretchr/testify/assert" 12 "github.com/stretchr/testify/require" 13 ) 14 15 func TestSplit(t *testing.T) { 16 const testdata = "testdata" 17 18 var fixture []string 19 require.NoError(t, filepath.WalkDir(testdata, func(path string, f fs.DirEntry, err error) error { 20 if err != nil { 21 return err 22 } 23 if !strings.HasPrefix(f.Name(), "split_") { 24 return nil 25 } 26 contents, err := os.ReadFile(path) 27 if err != nil { 28 return err 29 } 30 fixture = append(fixture, string(contents)) 31 return nil 32 })) 33 require.Len(t, fixture, 18) 34 35 sql, err := os.Open(filepath.Join(testdata, "all.sql")) 36 require.NoError(t, err) 37 stats, err := Split(sql) 38 require.NoError(t, err) 39 40 assert.ElementsMatch(t, fixture, stats[:len(fixture)]) 41 } 42 43 func TestSplitAndTrim(t *testing.T) { 44 sql := "\tBEGIN; " + strings.Repeat("a", MaxScannerCapacity) 45 stats, err := SplitAndTrim(strings.NewReader(sql)) 46 // Check error 47 assert.ErrorContains(t, err, "bufio.Scanner: token too long\nAfter statement 1: \tBEGIN;") 48 assert.ElementsMatch(t, []string{"BEGIN"}, stats) 49 }