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  }