| 647 | } |
| 648 | |
| 649 | func TestAndNode_Render_OrNodeWrapped(t *testing.T) { |
| 650 | // OrNode as AND operand MUST be wrapped to preserve precedence. |
| 651 | a := cmp(prop("a"), "==", str("1")) |
| 652 | b := cmp(prop("b"), "==", str("2")) |
| 653 | c := cmp(prop("c"), "==", str("3")) |
| 654 | node := and2(or2(a, b), c) |
| 655 | rendered := OptimizeExpression(node).Render() |
| 656 | assert.Equal(t, "(a == '1' || b == '2') && c == '3'", rendered, "OrNode operand must be wrapped in AND") |
| 657 | } |
| 658 | |
| 659 | func TestOrNode_Render_NoWrapping(t *testing.T) { |
| 660 | // OrNode never wraps typed children in parens. |