(t *testing.T)
| 149 | } |
| 150 | |
| 151 | func TestExprToString(t *testing.T) { |
| 152 | stdEnv, err := NewEnv(EnableMacroCallTracking()) |
| 153 | if err != nil { |
| 154 | t.Fatalf("NewEnv() failed: %v", err) |
| 155 | } |
| 156 | in := "[a, b].filter(i, (i > 0) ? (-i + 4) : i)" |
| 157 | ast, iss := stdEnv.Parse(in) |
| 158 | if iss.Err() != nil { |
| 159 | t.Fatalf("stdEnv.Parse(%q) failed: %v", in, iss.Err()) |
| 160 | } |
| 161 | expr, err := ExprToString(ast.NativeRep().Expr(), ast.NativeRep().SourceInfo()) |
| 162 | if err != nil { |
| 163 | t.Fatalf("ExprToString(ast) failed: %v", err) |
| 164 | } |
| 165 | if expr != in { |
| 166 | t.Errorf("got %v, wanted %v", expr, in) |
| 167 | } |
| 168 | |
| 169 | // Test sub-expression unparsing. |
| 170 | navExpr := celast.NavigateAST(ast.NativeRep()) |
| 171 | condExpr := celast.MatchDescendants(navExpr, celast.FunctionMatcher(operators.Conditional))[0] |
| 172 | want := `(i > 0) ? (-i + 4) : i` |
| 173 | expr, err = ExprToString(condExpr, ast.NativeRep().SourceInfo()) |
| 174 | if err != nil { |
| 175 | t.Fatalf("ExprToString(ast) failed: %v", err) |
| 176 | } |
| 177 | if expr != want { |
| 178 | t.Errorf("got %v, wanted %v", expr, want) |
| 179 | } |
| 180 | |
| 181 | // Also passes with a nil source info, but only because the sub-expr doesn't contain macro calls. |
| 182 | expr, err = ExprToString(condExpr, nil) |
| 183 | if err != nil { |
| 184 | t.Fatalf("ExprToString(ast) failed: %v", err) |
| 185 | } |
| 186 | if expr != want { |
| 187 | t.Errorf("got %v, wanted %v", expr, want) |
| 188 | } |
| 189 | |
| 190 | // Fails do to missing macro information. |
| 191 | _, err = ExprToString(ast.NativeRep().Expr(), nil) |
| 192 | if err == nil { |
| 193 | t.Error("ExprToString() succeeded, wanted error") |
| 194 | } |
| 195 | } |
| 196 | |
| 197 | func TestRefValToExprValue(t *testing.T) { |
| 198 | tests := []struct { |
nothing calls this directly
no test coverage detected