(t *testing.T)
| 186 | } |
| 187 | |
| 188 | func TestFieldExpressionRewriter_VisitOrder(t *testing.T) { |
| 189 | t.Run("BinaryOperation", func(t *testing.T) { |
| 190 | cases := []struct { |
| 191 | name string |
| 192 | query string |
| 193 | visitOrder []FieldExpression |
| 194 | }{ |
| 195 | { |
| 196 | name: "simple", |
| 197 | query: `{ .attr1 = "val1" }`, |
| 198 | visitOrder: []FieldExpression{ |
| 199 | Attribute{Name: "attr1"}, |
| 200 | NewStaticString("val1"), |
| 201 | &BinaryOperation{Op: OpEqual}, |
| 202 | }, |
| 203 | }, |
| 204 | { |
| 205 | name: "and", |
| 206 | query: `{ .attr1 = "val1" && .attr2 != "val2" }`, |
| 207 | visitOrder: []FieldExpression{ |
| 208 | Attribute{Name: "attr1"}, |
| 209 | NewStaticString("val1"), |
| 210 | &BinaryOperation{Op: OpEqual}, |
| 211 | Attribute{Name: "attr2"}, |
| 212 | NewStaticString("val2"), |
| 213 | &BinaryOperation{Op: OpNotEqual}, |
| 214 | &BinaryOperation{Op: OpAnd}, |
| 215 | }, |
| 216 | }, |
| 217 | { |
| 218 | name: "count", |
| 219 | query: `{} | count() > 11`, |
| 220 | visitOrder: []FieldExpression{ |
| 221 | NewStaticBool(true), |
| 222 | nil, |
| 223 | NewStaticInt(11), |
| 224 | }, |
| 225 | }, |
| 226 | } |
| 227 | |
| 228 | for _, tc := range cases { |
| 229 | t.Run(tc.name, func(t *testing.T) { |
| 230 | expr, err := Parse(tc.query) |
| 231 | require.NoError(t, err) |
| 232 | |
| 233 | var index int |
| 234 | rw := &fieldExpressionRewriter{rewriteFunctions: []fieldExpressionRewriteFn{func(op FieldExpression) (FieldExpression, int) { |
| 235 | if index < len(tc.visitOrder) { |
| 236 | requireMatchingFieldExpression(t, op, tc.visitOrder[index]) |
| 237 | } |
| 238 | index++ |
| 239 | return op, 0 |
| 240 | }}} |
| 241 | rw.RewriteRoot(expr) |
| 242 | require.Equal(t, len(tc.visitOrder), index, "visited element count mismatch") |
| 243 | }) |
| 244 | } |
| 245 | }) |
nothing calls this directly
no test coverage detected