Skip to content

Commit bcd3f66

Browse files
l46kokcopybara-github
authored andcommitted
Evaluate parsed only expressions in PlannerInterpreterTest
PiperOrigin-RevId: 872196586
1 parent ac6aa13 commit bcd3f66

5 files changed

Lines changed: 148 additions & 55 deletions

File tree

runtime/src/main/java/dev/cel/runtime/CelRuntimeImpl.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,7 @@ public Object advanceEvaluation(UnknownContext context) throws CelEvaluationExce
182182

183183
static Builder newBuilder() {
184184
return new AutoValue_CelRuntimeImpl.Builder()
185+
.setFunctionBindings(ImmutableMap.of())
185186
.setStandardFunctions(CelStandardFunctions.newBuilder().build())
186187
.setContainer(CelContainer.newBuilder().build())
187188
.setExtensionRegistry(ExtensionRegistry.getEmptyRegistry());
@@ -222,6 +223,8 @@ abstract static class Builder implements CelRuntimeBuilder {
222223

223224
abstract ExtensionRegistry extensionRegistry();
224225

226+
abstract ImmutableMap<String, CelFunctionBinding> functionBindings();
227+
225228
abstract ImmutableSet.Builder<Descriptors.FileDescriptor> fileDescriptorsBuilder();
226229

227230
abstract ImmutableSet.Builder<CelRuntimeLibrary> runtimeLibrariesBuilder();
@@ -442,6 +445,9 @@ public CelRuntime build() {
442445
DescriptorTypeResolver descriptorTypeResolver =
443446
DescriptorTypeResolver.create(combinedTypeProvider);
444447
TypeFunction typeFunction = TypeFunction.create(descriptorTypeResolver);
448+
449+
mutableFunctionBindings.putAll(functionBindings());
450+
445451
for (CelFunctionBinding binding :
446452
typeFunction.newFunctionBindings(options(), runtimeEquality)) {
447453
mutableFunctionBindings.put(binding.getOverloadId(), binding);

runtime/src/test/java/dev/cel/runtime/BUILD.bazel

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,11 @@ java_library(
131131
"PlannerInterpreterTest.java",
132132
],
133133
deps = [
134+
"//common:cel_ast",
135+
"//common:compiler_common",
136+
"//common:container",
134137
"//common:options",
138+
"//common/types:type_providers",
135139
"//extensions",
136140
"//runtime",
137141
"//runtime:runtime_planner_impl",

runtime/src/test/java/dev/cel/runtime/PlannerInterpreterTest.java

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,13 @@
1414

1515
package dev.cel.runtime;
1616

17+
import com.google.testing.junit.testparameterinjector.TestParameter;
1718
import com.google.testing.junit.testparameterinjector.TestParameterInjector;
19+
import dev.cel.common.CelAbstractSyntaxTree;
20+
import dev.cel.common.CelContainer;
1821
import dev.cel.common.CelOptions;
22+
import dev.cel.common.CelValidationException;
23+
import dev.cel.common.types.CelTypeProvider;
1924
import dev.cel.extensions.CelExtensions;
2025
import dev.cel.testing.BaseInterpreterTest;
2126
import org.junit.runner.RunWith;
@@ -24,6 +29,8 @@
2429
@RunWith(TestParameterInjector.class)
2530
public class PlannerInterpreterTest extends BaseInterpreterTest {
2631

32+
@TestParameter boolean isParseOnly;
33+
2734
@Override
2835
protected CelRuntimeBuilder newBaseRuntimeBuilder(CelOptions celOptions) {
2936
return CelRuntimeImpl.newBuilder()
@@ -34,6 +41,36 @@ protected CelRuntimeBuilder newBaseRuntimeBuilder(CelOptions celOptions) {
3441
.addFileTypes(TEST_FILE_DESCRIPTORS);
3542
}
3643

44+
@Override
45+
protected void setContainer(CelContainer container) {
46+
super.setContainer(container);
47+
this.celRuntime = this.celRuntime.toRuntimeBuilder().setContainer(container).build();
48+
}
49+
50+
@Override
51+
protected CelAbstractSyntaxTree prepareTest(CelTypeProvider typeProvider) {
52+
super.prepareCompiler(typeProvider);
53+
54+
CelAbstractSyntaxTree ast;
55+
try {
56+
ast = celCompiler.parse(source, testSourceDescription()).getAst();
57+
} catch (CelValidationException e) {
58+
printTestValidationError(e);
59+
return null;
60+
}
61+
62+
if (isParseOnly) {
63+
return ast;
64+
}
65+
66+
try {
67+
return celCompiler.check(ast).getAst();
68+
} catch (CelValidationException e) {
69+
printTestValidationError(e);
70+
return null;
71+
}
72+
}
73+
3774
@Override
3875
public void unknownField() {
3976
// TODO: Unknown support not implemented yet
@@ -45,4 +82,25 @@ public void unknownResultSet() {
4582
// TODO: Unknown support not implemented yet
4683
skipBaselineVerification();
4784
}
85+
86+
@Override
87+
public void optional() {
88+
if (isParseOnly) {
89+
// TODO: Fix for parsed-only mode.
90+
skipBaselineVerification();
91+
} else {
92+
super.optional();
93+
}
94+
}
95+
96+
@Override
97+
public void optional_errors() {
98+
if (isParseOnly) {
99+
// Parsed-only evaluation contains function name in the
100+
// error message instead of the function overload.
101+
skipBaselineVerification();
102+
} else {
103+
super.optional_errors();
104+
}
105+
}
48106
}

testing/src/main/java/dev/cel/testing/BUILD.bazel

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ java_library(
9393
"//runtime:late_function_binding",
9494
"//runtime:unknown_attributes",
9595
"@cel_spec//proto/cel/expr:checked_java_proto",
96+
"@cel_spec//proto/cel/expr:syntax_java_proto",
9697
"@cel_spec//proto/cel/expr/conformance/proto2:test_all_types_java_proto",
9798
"@cel_spec//proto/cel/expr/conformance/proto3:test_all_types_java_proto",
9899
"@maven//:com_google_errorprone_error_prone_annotations",

0 commit comments

Comments
 (0)