1 package exp_test
2
3 import (
4 "testing"
5
6 "github.com/doug-martin/goqu/v9/exp"
7 "github.com/stretchr/testify/suite"
8 )
9
10 type castExpressionSuite struct {
11 suite.Suite
12 ce exp.CastExpression
13 }
14
15 func TestCastExpressionSuite(t *testing.T) {
16 suite.Run(t, &castExpressionSuite{
17 ce: exp.NewCastExpression(exp.NewIdentifierExpression("", "", "a"), "TEXT"),
18 })
19 }
20
21 func (ces *castExpressionSuite) TestClone() {
22 ces.Equal(ces.ce, ces.ce.Clone())
23 }
24
25 func (ces *castExpressionSuite) TestExpression() {
26 ces.Equal(ces.ce, ces.ce.Expression())
27 }
28
29 func (ces *castExpressionSuite) TestCasted() {
30 ces.Equal(exp.NewIdentifierExpression("", "", "a"), ces.ce.Casted())
31 }
32
33 func (ces *castExpressionSuite) TestType() {
34 ces.Equal(exp.NewLiteralExpression("TEXT"), ces.ce.Type())
35 }
36
37 func (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
View as plain text