supabase-cli/pkg/parser/token_test.go

53 lines
1.1 KiB
Go

package parser
import (
"bufio"
_ "embed"
"io/fs"
"os"
"path/filepath"
"strings"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestSplit(t *testing.T) {
const testdata = "testdata"
var fixture []string
require.NoError(t, filepath.WalkDir(testdata, func(path string, f fs.DirEntry, err error) error {
if err != nil {
return err
}
if !strings.HasPrefix(f.Name(), "split_") {
return nil
}
contents, err := os.ReadFile(path)
if err != nil {
return err
}
fixture = append(fixture, string(contents))
return nil
}))
require.Len(t, fixture, 18)
fixture = append(fixture, "\n")
sql, err := os.Open(filepath.Join(testdata, "all.sql"))
require.NoError(t, err)
stats, err := Split(sql)
require.NoError(t, err)
assert.ElementsMatch(t, fixture, stats)
}
func TestSplitAndTrim(t *testing.T) {
sql := "\tBEGIN; " + strings.Repeat("a", MaxScannerCapacity)
stats, err := SplitAndTrim(strings.NewReader(sql))
// Check error
assert.ErrorIs(t, err, bufio.ErrTooLong)
assert.ErrorContains(t, err, "After statement 1: \tBEGIN;")
assert.ElementsMatch(t, []string{"BEGIN"}, stats)
}