53 lines
1.1 KiB
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)
|
|
}
|