|
21 | 21 | import com.google.common.base.Throwables; |
22 | 22 | import com.google.common.collect.ImmutableMap; |
23 | 23 | import com.google.common.collect.ImmutableSet; |
| 24 | +import com.google.common.collect.Maps; |
24 | 25 | import com.google.testing.junit.testparameterinjector.TestParameter; |
25 | 26 | import com.google.testing.junit.testparameterinjector.TestParameterInjector; |
26 | 27 | import com.google.testing.junit.testparameterinjector.TestParameters; |
|
31 | 32 | import dev.cel.common.CelOptions; |
32 | 33 | import dev.cel.common.CelValidationException; |
33 | 34 | import dev.cel.common.CelValidationResult; |
| 35 | +import dev.cel.common.ast.CelReference; |
34 | 36 | import dev.cel.common.exceptions.CelAttributeNotFoundException; |
35 | 37 | import dev.cel.common.exceptions.CelDivideByZeroException; |
36 | 38 | import dev.cel.common.exceptions.CelIndexOutOfBoundsException; |
@@ -552,4 +554,36 @@ public void runtimeOptions_unsupported_throws() { |
552 | 554 | UnsupportedOperationException.class, |
553 | 555 | () -> runtimeLibrary.setRuntimeOptions(liteRuntimeBuilder)); |
554 | 556 | } |
| 557 | + |
| 558 | + @Test |
| 559 | + @TestParameters( |
| 560 | + "{expr: '[1, 2].transformMap(i, v, v + 1) == {0: 2, 1: 3}'," |
| 561 | + + " canonicalOverloadId: '@mapInsert_map_key_value'}") |
| 562 | + @TestParameters( |
| 563 | + "{expr: \"{'a': 1, 'b': 2}.transformMapEntry(k, v, {k: v + 1}) == {'a': 2, 'b': 3}\"," |
| 564 | + + " canonicalOverloadId: '@mapInsert_map_map'}") |
| 565 | + public void evaluate_legacyMapInsertOverloadIds_success(String expr, String canonicalOverloadId) |
| 566 | + throws Exception { |
| 567 | + Assume.assumeFalse(isParseOnly); |
| 568 | + CelAbstractSyntaxTree ast = cel.compile(expr).getAst(); |
| 569 | + CelAbstractSyntaxTree legacyAst = |
| 570 | + CelAbstractSyntaxTree.newCheckedAst( |
| 571 | + ast.getExpr(), |
| 572 | + ast.getSource(), |
| 573 | + Maps.transformValues( |
| 574 | + ast.getReferenceMap(), |
| 575 | + ref -> |
| 576 | + ref.overloadIds().contains(canonicalOverloadId) |
| 577 | + ? CelReference.newBuilder() |
| 578 | + .addOverloadIds("cel_" + canonicalOverloadId) |
| 579 | + .build() |
| 580 | + : ref), |
| 581 | + ast.getTypeMap()); |
| 582 | + |
| 583 | + Object result = cel.createProgram(legacyAst).eval(); |
| 584 | + |
| 585 | + assertThat(ast.getReferenceMap().values()) |
| 586 | + .contains(CelReference.newBuilder().addOverloadIds(canonicalOverloadId).build()); |
| 587 | + assertThat(result).isEqualTo(true); |
| 588 | + } |
555 | 589 | } |
0 commit comments