TestVisitExpressionTree tests the tree visitor functionality
(t *testing.T)
| 881 | |
| 882 | // TestVisitExpressionTree tests the tree visitor functionality |
| 883 | func TestVisitExpressionTree(t *testing.T) { |
| 884 | // Create a complex expression tree |
| 885 | expr1 := &ExpressionNode{Expression: "github.event_name == 'issues'"} |
| 886 | expr2 := &ExpressionNode{Expression: "github.event.action == 'opened'"} |
| 887 | expr3 := &ExpressionNode{Expression: "github.event.pull_request.draft == true"} |
| 888 | |
| 889 | // Build tree: (expr1 && expr2) || !expr3 |
| 890 | andNode := &AndNode{Left: expr1, Right: expr2} |
| 891 | notNode := &NotNode{Child: expr3} |
| 892 | orNode := &OrNode{Left: andNode, Right: notNode} |
| 893 | |
| 894 | // Collect all literal expressions |
| 895 | var collected []string |
| 896 | err := VisitExpressionTree(orNode, func(expr *ExpressionNode) error { |
| 897 | collected = append(collected, expr.Expression) |
| 898 | return nil |
| 899 | }) |
| 900 | |
| 901 | if err != nil { |
| 902 | t.Errorf("VisitExpressionTree() unexpected error: %v", err) |
| 903 | } |
| 904 | |
| 905 | expected := []string{ |
| 906 | "github.event_name == 'issues'", |
| 907 | "github.event.action == 'opened'", |
| 908 | "github.event.pull_request.draft == true", |
| 909 | } |
| 910 | |
| 911 | if len(collected) != len(expected) { |
| 912 | t.Errorf("VisitExpressionTree() collected %d expressions, expected %d", len(collected), len(expected)) |
| 913 | return |
| 914 | } |
| 915 | |
| 916 | for i, expr := range expected { |
| 917 | if collected[i] != expr { |
| 918 | t.Errorf("VisitExpressionTree() collected[%d] = '%s', expected '%s'", i, collected[i], expr) |
| 919 | } |
| 920 | } |
| 921 | } |
| 922 | |
| 923 | // TestVisitExpressionTreeWithError tests error handling in tree visitor |
| 924 | func TestVisitExpressionTreeWithError(t *testing.T) { |
nothing calls this directly
no test coverage detected