1package exp_test 2 3import ( 4 "testing" 5 6 "github.com/doug-martin/goqu/v9/exp" 7 "github.com/stretchr/testify/suite" 8) 9 10type castExpressionSuite struct { 11 suite.Suite 12 ce exp.CastExpression 13} 14 15func TestCastExpressionSuite(t *testing.T) { 16 suite.Run(t, &castExpressionSuite{ 17 ce: exp.NewCastExpression(exp.NewIdentifierExpression("", "", "a"), "TEXT"), 18 }) 19} 20 21func (ces *castExpressionSuite) TestClone() { 22 ces.Equal(ces.ce, ces.ce.Clone()) 23} 24 25func (ces *castExpressionSuite) TestExpression() { 26 ces.Equal(ces.ce, ces.ce.Expression()) 27} 28 29func (ces *castExpressionSuite) TestCasted() { 30 ces.Equal(exp.NewIdentifierExpression("", "", "a"), ces.ce.Casted()) 31} 32 33func (ces *castExpressionSuite) TestType() { 34 ces.Equal(exp.NewLiteralExpression("TEXT"), ces.ce.Type()) 35} 36 37func (ces *castExpressionSuite) TestAllOthers() { 38 ce := ces.ce 39 rv := exp.NewRangeVal(1, 2) 40 pattern := "cast like%" 41 inVals := []interface{}{1, 2} 42 testCases := []struct { 43 Ex exp.Expression 44 Expected exp.Expression 45 }{ 46 {Ex: ce.As("a"), Expected: exp.NewAliasExpression(ce, "a")}, 47 {Ex: ce.Eq(1), Expected: exp.NewBooleanExpression(exp.EqOp, ce, 1)}, 48 {Ex: ce.Neq(1), Expected: exp.NewBooleanExpression(exp.NeqOp, ce, 1)}, 49 {Ex: ce.Gt(1), Expected: exp.NewBooleanExpression(exp.GtOp, ce, 1)}, 50 {Ex: ce.Gte(1), Expected: exp.NewBooleanExpression(exp.GteOp, ce, 1)}, 51 {Ex: ce.Lt(1), Expected: exp.NewBooleanExpression(exp.LtOp, ce, 1)}, 52 {Ex: ce.Lte(1), Expected: exp.NewBooleanExpression(exp.LteOp, ce, 1)}, 53 {Ex: ce.Asc(), Expected: exp.NewOrderedExpression(ce, exp.AscDir, exp.NoNullsSortType)}, 54 {Ex: ce.Desc(), Expected: exp.NewOrderedExpression(ce, exp.DescSortDir, exp.NoNullsSortType)}, 55 {Ex: ce.Between(rv), Expected: exp.NewRangeExpression(exp.BetweenOp, ce, rv)}, 56 {Ex: ce.NotBetween(rv), Expected: exp.NewRangeExpression(exp.NotBetweenOp, ce, rv)}, 57 {Ex: ce.Like(pattern), Expected: exp.NewBooleanExpression(exp.LikeOp, ce, pattern)}, 58 {Ex: ce.NotLike(pattern), Expected: exp.NewBooleanExpression(exp.NotLikeOp, ce, pattern)}, 59 {Ex: ce.ILike(pattern), Expected: exp.NewBooleanExpression(exp.ILikeOp, ce, pattern)}, 60 {Ex: ce.NotILike(pattern), Expected: exp.NewBooleanExpression(exp.NotILikeOp, ce, pattern)}, 61 {Ex: ce.RegexpLike(pattern), Expected: exp.NewBooleanExpression(exp.RegexpLikeOp, ce, pattern)}, 62 {Ex: ce.RegexpNotLike(pattern), Expected: exp.NewBooleanExpression(exp.RegexpNotLikeOp, ce, pattern)}, 63 {Ex: ce.RegexpILike(pattern), Expected: exp.NewBooleanExpression(exp.RegexpILikeOp, ce, pattern)}, 64 {Ex: ce.RegexpNotILike(pattern), Expected: exp.NewBooleanExpression(exp.RegexpNotILikeOp, ce, pattern)}, 65 {Ex: ce.In(inVals), Expected: exp.NewBooleanExpression(exp.InOp, ce, inVals)}, 66 {Ex: ce.NotIn(inVals), Expected: exp.NewBooleanExpression(exp.NotInOp, ce, inVals)}, 67 {Ex: ce.Is(true), Expected: exp.NewBooleanExpression(exp.IsOp, ce, true)}, 68 {Ex: ce.IsNot(true), Expected: exp.NewBooleanExpression(exp.IsNotOp, ce, true)}, 69 {Ex: ce.IsNull(), Expected: exp.NewBooleanExpression(exp.IsOp, ce, nil)}, 70 {Ex: ce.IsNotNull(), Expected: exp.NewBooleanExpression(exp.IsNotOp, ce, nil)}, 71 {Ex: ce.IsTrue(), Expected: exp.NewBooleanExpression(exp.IsOp, ce, true)}, 72 {Ex: ce.IsNotTrue(), Expected: exp.NewBooleanExpression(exp.IsNotOp, ce, true)}, 73 {Ex: ce.IsFalse(), Expected: exp.NewBooleanExpression(exp.IsOp, ce, false)}, 74 {Ex: ce.IsNotFalse(), Expected: exp.NewBooleanExpression(exp.IsNotOp, ce, false)}, 75 {Ex: ce.Distinct(), Expected: exp.NewSQLFunctionExpression("DISTINCT", ce)}, 76 } 77 78 for _, tc := range testCases { 79 ces.Equal(tc.Expected, tc.Ex) 80 } 81} 82