github.com/dolthub/go-mysql-server@v0.18.0/sql/expression/function/lower_upper_test.go (about) 1 // Copyright 2020-2021 Dolthub, Inc. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 package function 16 17 import ( 18 "testing" 19 20 "github.com/stretchr/testify/require" 21 22 "github.com/dolthub/go-mysql-server/sql" 23 "github.com/dolthub/go-mysql-server/sql/expression" 24 "github.com/dolthub/go-mysql-server/sql/types" 25 ) 26 27 func TestLower(t *testing.T) { 28 testCases := []struct { 29 name string 30 rowType sql.Type 31 row sql.Row 32 expected interface{} 33 }{ 34 {"text nil", types.LongText, sql.NewRow(nil), nil}, 35 {"text ok", types.LongText, sql.NewRow("LoWeR"), "lower"}, 36 {"binary ok", types.Blob, sql.NewRow([]byte("LoWeR")), "LoWeR"}, 37 {"other type", types.Int32, sql.NewRow(int32(1)), "1"}, 38 } 39 40 for _, tt := range testCases { 41 f := NewLower(expression.NewGetField(0, tt.rowType, "", true)) 42 43 t.Run(tt.name, func(t *testing.T) { 44 require.Equal(t, tt.expected, eval(t, f, tt.row)) 45 }) 46 47 req := require.New(t) 48 req.True(f.IsNullable()) 49 req.Equal(tt.rowType, f.Type()) 50 } 51 } 52 53 func TestUpper(t *testing.T) { 54 testCases := []struct { 55 name string 56 rowType sql.Type 57 row sql.Row 58 expected interface{} 59 }{ 60 {"text nil", types.LongText, sql.NewRow(nil), nil}, 61 {"text ok", types.LongText, sql.NewRow("UpPeR"), "UPPER"}, 62 {"binary ok", types.Blob, sql.NewRow([]byte("UpPeR")), "UpPeR"}, 63 {"other type", types.Int32, sql.NewRow(int32(1)), "1"}, 64 } 65 66 for _, tt := range testCases { 67 f := NewUpper(expression.NewGetField(0, tt.rowType, "", true)) 68 69 t.Run(tt.name, func(t *testing.T) { 70 require.Equal(t, tt.expected, eval(t, f, tt.row)) 71 }) 72 73 req := require.New(t) 74 req.True(f.IsNullable()) 75 req.Equal(tt.rowType, f.Type()) 76 } 77 }