github.com/nokia/migrate/v4@v4.16.0/database/multistmt/parse_test.go (about) 1 package multistmt_test 2 3 import ( 4 "strings" 5 "testing" 6 7 "github.com/stretchr/testify/assert" 8 9 "github.com/nokia/migrate/v4/database/multistmt" 10 ) 11 12 const maxMigrationSize = 1024 13 14 func TestParse(t *testing.T) { 15 testCases := []struct { 16 name string 17 multiStmt string 18 delimiter string 19 expected []string 20 expectedErr error 21 }{ 22 { 23 name: "single statement, no delimiter", multiStmt: "single statement, no delimiter", delimiter: ";", 24 expected: []string{"single statement, no delimiter"}, expectedErr: nil, 25 }, 26 { 27 name: "single statement, one delimiter", multiStmt: "single statement, one delimiter;", delimiter: ";", 28 expected: []string{"single statement, one delimiter;"}, expectedErr: nil, 29 }, 30 { 31 name: "two statements, no trailing delimiter", multiStmt: "statement one; statement two", delimiter: ";", 32 expected: []string{"statement one;", " statement two"}, expectedErr: nil, 33 }, 34 { 35 name: "two statements, with trailing delimiter", multiStmt: "statement one; statement two;", delimiter: ";", 36 expected: []string{"statement one;", " statement two;"}, expectedErr: nil, 37 }, 38 } 39 40 for _, tc := range testCases { 41 t.Run(tc.name, func(t *testing.T) { 42 stmts := make([]string, 0, len(tc.expected)) 43 err := multistmt.Parse(strings.NewReader(tc.multiStmt), []byte(tc.delimiter), maxMigrationSize, func(b []byte) bool { 44 stmts = append(stmts, string(b)) 45 return true 46 }) 47 assert.Equal(t, tc.expectedErr, err) 48 assert.Equal(t, tc.expected, stmts) 49 }) 50 } 51 } 52 53 func TestParseDiscontinue(t *testing.T) { 54 multiStmt := "statement one; statement two" 55 delimiter := ";" 56 expected := []string{"statement one;"} 57 58 stmts := make([]string, 0, len(expected)) 59 err := multistmt.Parse(strings.NewReader(multiStmt), []byte(delimiter), maxMigrationSize, func(b []byte) bool { 60 stmts = append(stmts, string(b)) 61 return false 62 }) 63 assert.Nil(t, err) 64 assert.Equal(t, expected, stmts) 65 }