Skip to content

Commit 892d09c

Browse files
committed
Add maven artifact tests for compiler and runtime
1 parent 81a8692 commit 892d09c

7 files changed

Lines changed: 542 additions & 3 deletions

File tree

.bazelrc

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,14 @@
11
common --enable_bzlmod
2+
# Use built-in protoc
3+
common --incompatible_enable_proto_toolchain_resolution --@com_google_protobuf//bazel/toolchains:prefer_prebuilt_protoc
4+
25
build --java_runtime_version=remotejdk_11
36
build --java_language_version=11
47

8+
59
# Hide Java 8 deprecation warnings.
610
common --javacopt=-Xlint:-options
711

812
# Remove flag once https://github.com/google/cel-spec/issues/508 and rules_jvm_external is fixed.
913
common --incompatible_autoload_externally=proto_library,cc_proto_library,java_proto_library,java_test
14+

.bazelversion

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
8.5.1

MODULE.bazel

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,9 @@ GUAVA_VERSION = "33.5.0"
3939

4040
TRUTH_VERSION = "1.4.4"
4141

42-
PROTOBUF_JAVA_VERSION = "4.33.4"
42+
PROTOBUF_JAVA_VERSION = "4.33.5"
43+
44+
CEL_VERSION = "0.12.0-SNAPSHOT"
4345

4446
# Compile only artifacts
4547
[
@@ -114,7 +116,11 @@ maven.install(
114116

115117
maven.install(
116118
name = "maven_conformance",
117-
artifacts = ["dev.cel:cel:0.11.1"],
119+
artifacts = [
120+
"dev.cel:cel:" + CEL_VERSION,
121+
"dev.cel:compiler:" + CEL_VERSION,
122+
"dev.cel:runtime:" + CEL_VERSION,
123+
],
118124
repositories = [
119125
"https://maven.google.com",
120126
"https://repo1.maven.org/maven2",
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
load("@rules_java//java:defs.bzl", "java_library", "java_test")
2+
3+
package(default_applicable_licenses = [
4+
"//:license",
5+
])
6+
7+
MAVEN_COMPILER_JAR_DEPS = [
8+
"@maven_conformance//:dev_cel_common",
9+
"@maven_conformance//:dev_cel_compiler",
10+
]
11+
12+
MAVEN_RUNTIME_JAR_DEPS = [
13+
"@maven_conformance//:dev_cel_common",
14+
"@maven_conformance//:dev_cel_protobuf",
15+
"@maven_conformance//:dev_cel_runtime",
16+
]
17+
18+
java_test(
19+
name = "compiler_artifact_test",
20+
srcs = ["CompilerArtifactTest.java"],
21+
test_class = "dev.cel.maven.CompilerArtifactTest",
22+
deps =
23+
MAVEN_COMPILER_JAR_DEPS + [
24+
"//:java_truth",
25+
"@cel_spec//proto/cel/expr/conformance/proto3:test_all_types_java_proto",
26+
"@maven//:com_google_testparameterinjector_test_parameter_injector",
27+
"@maven//:junit_junit",
28+
],
29+
)
30+
31+
java_test(
32+
name = "runtime_artifact_test",
33+
srcs = ["RuntimeArtifactTest.java"],
34+
test_class = "dev.cel.maven.RuntimeArtifactTest",
35+
deps =
36+
MAVEN_RUNTIME_JAR_DEPS + [
37+
"//:java_truth",
38+
"@cel_spec//proto/cel/expr/conformance/proto3:test_all_types_java_proto",
39+
"@maven//:com_google_guava_guava",
40+
"@maven//:com_google_protobuf_protobuf_java",
41+
"@maven//:com_google_testparameterinjector_test_parameter_injector",
42+
"@maven//:junit_junit",
43+
],
44+
)
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
package dev.cel.maven;
2+
3+
import static com.google.common.truth.Truth.assertThat;
4+
import static dev.cel.common.CelFunctionDecl.newFunctionDeclaration;
5+
import static dev.cel.common.CelOverloadDecl.newGlobalOverload;
6+
import static org.junit.Assert.assertThrows;
7+
8+
import com.google.testing.junit.testparameterinjector.TestParameterInjector;
9+
import dev.cel.checker.CelChecker;
10+
import dev.cel.common.CelAbstractSyntaxTree;
11+
import dev.cel.common.CelContainer;
12+
import dev.cel.common.CelOptions;
13+
import dev.cel.common.CelValidationException;
14+
import dev.cel.common.CelValidationResult;
15+
import dev.cel.common.ast.CelConstant;
16+
import dev.cel.common.ast.CelExpr;
17+
import dev.cel.common.types.ProtoMessageTypeProvider;
18+
import dev.cel.common.types.SimpleType;
19+
import dev.cel.common.types.StructTypeReference;
20+
import dev.cel.compiler.CelCompiler;
21+
import dev.cel.compiler.CelCompilerFactory;
22+
import dev.cel.expr.conformance.proto3.TestAllTypes;
23+
import dev.cel.parser.CelParser;
24+
import dev.cel.parser.CelParserFactory;
25+
import dev.cel.parser.CelStandardMacro;
26+
import dev.cel.parser.CelUnparser;
27+
import dev.cel.parser.CelUnparserFactory;
28+
import org.junit.Test;
29+
import org.junit.runner.RunWith;
30+
31+
@RunWith(TestParameterInjector.class)
32+
public class CompilerArtifactTest {
33+
34+
@Test
35+
public void parse() throws Exception {
36+
CelParser parser = CelParserFactory.standardCelParserBuilder().build();
37+
CelUnparser unparser = CelUnparserFactory.newUnparser();
38+
39+
CelAbstractSyntaxTree ast = parser.parse("'Hello World'").getAst();
40+
41+
assertThat(ast.getExpr()).isEqualTo(CelExpr.ofConstant(1L, CelConstant.ofValue("Hello World")));
42+
assertThat(unparser.unparse(ast)).isEqualTo("\"Hello World\"");
43+
}
44+
45+
@Test
46+
public void typeCheck() throws Exception {
47+
CelParser parser = CelParserFactory.standardCelParserBuilder().build();
48+
CelChecker checker = CelCompilerFactory.standardCelCheckerBuilder().build();
49+
50+
CelAbstractSyntaxTree ast = checker.check(parser.parse("'Hello World'").getAst()).getAst();
51+
52+
assertThat(ast.getResultType()).isEqualTo(SimpleType.STRING);
53+
}
54+
55+
@Test
56+
public void compile() throws Exception {
57+
CelCompiler compiler = CelCompilerFactory
58+
.standardCelCompilerBuilder()
59+
.addFunctionDeclarations(
60+
newFunctionDeclaration("getThree", newGlobalOverload("getThree_overload", SimpleType.INT))
61+
)
62+
.setOptions(CelOptions.DEFAULT)
63+
.setStandardMacros(CelStandardMacro.STANDARD_MACROS)
64+
.setTypeProvider(ProtoMessageTypeProvider.newBuilder().addFileDescriptors(TestAllTypes.getDescriptor().getFile()).build())
65+
.setContainer(CelContainer.ofName("cel.expr.conformance.proto3"))
66+
.addVar("msg", StructTypeReference.create(TestAllTypes.getDescriptor().getFullName()))
67+
.build();
68+
CelUnparser unparser = CelUnparserFactory.newUnparser();
69+
70+
CelAbstractSyntaxTree ast = compiler.compile("msg == TestAllTypes{} && 3 == getThree()").getAst();
71+
72+
assertThat(unparser.unparse(ast)).isEqualTo("msg == cel.expr.conformance.proto3.TestAllTypes{} && 3 == getThree()");
73+
assertThat(ast.getResultType()).isEqualTo(SimpleType.BOOL);
74+
}
75+
76+
@Test
77+
public void compile_error() {
78+
CelCompiler compiler = CelCompilerFactory.standardCelCompilerBuilder().build();
79+
80+
CelValidationResult result = compiler.compile("'foo' + 1");
81+
82+
assertThat(result.hasError()).isTrue();
83+
assertThat(assertThrows(CelValidationException.class, result::getAst)).hasMessageThat().contains("found no matching overload for '_+_' applied to '(string, int)'");
84+
}
85+
}

0 commit comments

Comments
 (0)