Skip to content

Commit 103733d

Browse files
l46kokcopybara-github
authored andcommitted
Enable evaluateCanonicalTypesToNativeValues by default
PiperOrigin-RevId: 808650209
1 parent f773edf commit 103733d

File tree

11 files changed

+32
-32
lines changed

11 files changed

+32
-32
lines changed

bundle/src/test/java/dev/cel/bundle/CelImplTest.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,6 @@
7272
import dev.cel.common.CelVarDecl;
7373
import dev.cel.common.ast.CelExpr;
7474
import dev.cel.common.ast.CelExpr.CelList;
75-
import dev.cel.common.internal.ProtoTimeUtils;
7675
import dev.cel.common.testing.RepeatedTestProvider;
7776
import dev.cel.common.types.CelKind;
7877
import dev.cel.common.types.CelProtoMessageTypes;
@@ -108,6 +107,7 @@
108107
import dev.cel.runtime.CelVariableResolver;
109108
import dev.cel.runtime.UnknownContext;
110109
import dev.cel.testing.testdata.proto3.StandaloneGlobalEnum;
110+
import java.time.Instant;
111111
import java.util.ArrayList;
112112
import java.util.LinkedHashMap;
113113
import java.util.List;
@@ -820,7 +820,8 @@ public void program_duplicateTypeDescriptor() throws Exception {
820820
.build();
821821
CelRuntime.Program program =
822822
cel.createProgram(cel.compile("protobuf.Timestamp{seconds: 12}").getAst());
823-
assertThat(program.eval()).isEqualTo(ProtoTimeUtils.fromSecondsToTimestamp(12));
823+
824+
assertThat(program.eval()).isEqualTo(Instant.ofEpochSecond(12));
824825
}
825826

826827
@Test
@@ -833,7 +834,7 @@ public void program_hermeticDescriptors_wellKnownProtobuf() throws Exception {
833834
.build();
834835
CelRuntime.Program program =
835836
cel.createProgram(cel.compile("protobuf.Timestamp{seconds: 12}").getAst());
836-
assertThat(program.eval()).isEqualTo(ProtoTimeUtils.fromSecondsToTimestamp(12));
837+
assertThat(program.eval()).isEqualTo(Instant.ofEpochSecond(12));
837838
}
838839

839840
@Test
@@ -962,7 +963,7 @@ public void program_typeProvider() throws Exception {
962963
.build();
963964
CelRuntime.Program program =
964965
cel.createProgram(cel.compile("protobuf.Timestamp{seconds: 12}").getAst());
965-
assertThat(program.eval()).isEqualTo(ProtoTimeUtils.fromSecondsToTimestamp(12));
966+
assertThat(program.eval()).isEqualTo(Instant.ofEpochSecond(12));
966967
}
967968

968969
@Test

codelab/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1065,8 +1065,8 @@ public void validate_invalidTimestampLiteral_returnsError() throws Exception {
10651065
assertThat(validationResult.hasError()).isTrue();
10661066
assertThat(validationResult.getErrorString())
10671067
.isEqualTo(
1068-
"ERROR: <input>:1:11: timestamp validation failed. Reason: evaluation error: Failed to"
1069-
+ " parse timestamp: invalid timestamp \"bad\"\n"
1068+
"ERROR: <input>:1:11: timestamp validation failed. Reason: evaluation error: Text 'bad'"
1069+
+ " could not be parsed at index 0\n"
10701070
+ " | timestamp('bad')\n"
10711071
+ " | ..........^");
10721072
}

codelab/src/test/codelab/Exercise8Test.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,8 @@ public void validate_invalidTimestampLiteral_returnsError() throws Exception {
4343
assertThat(validationResult.hasError()).isTrue();
4444
assertThat(validationResult.getErrorString())
4545
.isEqualTo(
46-
"ERROR: <input>:1:11: timestamp validation failed. Reason: evaluation error: Failed to"
47-
+ " parse timestamp: invalid timestamp \"bad\"\n"
46+
"ERROR: <input>:1:11: timestamp validation failed. Reason: evaluation error: Text 'bad'"
47+
+ " could not be parsed at index 0\n"
4848
+ " | timestamp('bad')\n"
4949
+ " | ..........^");
5050
}

codelab/src/test/codelab/solutions/Exercise8Test.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,8 @@ public void validate_invalidTimestampLiteral_returnsError() throws Exception {
4343
assertThat(validationResult.hasError()).isTrue();
4444
assertThat(validationResult.getErrorString())
4545
.isEqualTo(
46-
"ERROR: <input>:1:11: timestamp validation failed. Reason: evaluation error: Failed to"
47-
+ " parse timestamp: invalid timestamp \"bad\"\n"
46+
"ERROR: <input>:1:11: timestamp validation failed. Reason: evaluation error: Text 'bad'"
47+
+ " could not be parsed at index 0\n"
4848
+ " | timestamp('bad')\n"
4949
+ " | ..........^");
5050
}

common/src/main/java/dev/cel/common/CelOptions.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,7 @@ public static Builder current() {
184184
.enableUnsignedLongs(true)
185185
.enableRegexPartialMatch(true)
186186
.errorOnDuplicateMapKeys(true)
187+
.evaluateCanonicalTypesToNativeValues(true)
187188
.errorOnIntWrap(true)
188189
.resolveTypeDependencies(true)
189190
.disableCelStandardEquality(false);
@@ -462,6 +463,8 @@ public abstract static class Builder {
462463
* com.google.protobuf.ByteString}.
463464
* <li>CEL null: {@code dev.cel.common.values.NullValue} instead of {@code
464465
* com.google.protobuf.NullValue}.
466+
* <li>Timestamp: {@code java.time.Instant} instead of {@code com.google.protobuf.Timestamp}.
467+
* <li>Duration: {@code java.time.Duration} instead of {@code com.google.protobuf.Duration}.
465468
* </ul>
466469
*/
467470
public abstract Builder evaluateCanonicalTypesToNativeValues(boolean value);

common/src/test/java/dev/cel/common/internal/ProtoAdapterTest.java

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
import com.google.type.Expr;
4242
import dev.cel.common.CelOptions;
4343
import dev.cel.common.values.CelByteString;
44+
import java.time.Instant;
4445
import java.util.Arrays;
4546
import java.util.List;
4647
import java.util.Optional;
@@ -88,11 +89,10 @@ public static List<Object[]> data() {
8889
{1.5D, Any.pack(DoubleValue.of(1.5D))},
8990
{1.5D, Value.newBuilder().setNumberValue(1.5D).build()},
9091
{
91-
Duration.newBuilder().setSeconds(123).build(),
92-
Duration.newBuilder().setSeconds(123).build(),
92+
java.time.Duration.ofSeconds(123), Duration.newBuilder().setSeconds(123).build(),
9393
},
9494
{
95-
Duration.newBuilder().setSeconds(123).build(),
95+
java.time.Duration.ofSeconds(123),
9696
Any.pack(Duration.newBuilder().setSeconds(123).build()),
9797
},
9898
{1L, Int64Value.of(1L)},
@@ -132,12 +132,10 @@ public static List<Object[]> data() {
132132
.build(),
133133
},
134134
{
135-
Timestamp.newBuilder().setSeconds(123).build(),
136-
Timestamp.newBuilder().setSeconds(123).build(),
135+
Instant.ofEpochSecond(123), Timestamp.newBuilder().setSeconds(123).build(),
137136
},
138137
{
139-
Timestamp.newBuilder().setSeconds(123).build(),
140-
Any.pack(Timestamp.newBuilder().setSeconds(123).build()),
138+
Instant.ofEpochSecond(123), Any.pack(Timestamp.newBuilder().setSeconds(123).build()),
141139
},
142140
{UnsignedLong.valueOf(1L), UInt64Value.of(1L)},
143141
{UnsignedLong.valueOf(1L), Any.pack(UInt64Value.of(1L))},

common/src/test/java/dev/cel/common/values/ProtoMessageValueProviderTest.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@
2828
import dev.cel.common.internal.DefaultMessageFactory;
2929
import dev.cel.common.internal.DynamicProto;
3030
import dev.cel.common.internal.ProtoMessageFactory;
31-
import dev.cel.common.internal.ProtoTimeUtils;
3231
import dev.cel.expr.conformance.proto2.TestAllTypes;
3332
import dev.cel.expr.conformance.proto2.TestAllTypesExtensions;
3433
import java.time.Duration;
@@ -89,9 +88,9 @@ public void newValue_createProtoMessage_fieldsPopulated() {
8988
"single_string",
9089
"hello",
9190
"single_timestamp",
92-
ProtoTimeUtils.fromSecondsToTimestamp(50),
91+
Instant.ofEpochSecond(50),
9392
"single_duration",
94-
ProtoTimeUtils.fromSecondsToDuration(100)))
93+
Duration.ofSeconds(100)))
9594
.get();
9695

9796
assertThat(protoMessageValue.isZeroValue()).isFalse();

validator/src/main/java/dev/cel/validator/validators/DurationLiteralValidator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414

1515
package dev.cel.validator.validators;
1616

17-
import com.google.protobuf.Duration;
17+
import java.time.Duration;
1818

1919
/** DurationLiteralValidator ensures that duration literal arguments are valid. */
2020
public final class DurationLiteralValidator extends LiteralValidator {

validator/src/main/java/dev/cel/validator/validators/TimestampLiteralValidator.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,12 @@
1414

1515
package dev.cel.validator.validators;
1616

17-
import com.google.protobuf.Timestamp;
17+
import java.time.Instant;
1818

1919
/** TimestampLiteralValidator ensures that timestamp literal arguments are valid. */
2020
public final class TimestampLiteralValidator extends LiteralValidator {
2121
public static final TimestampLiteralValidator INSTANCE =
22-
new TimestampLiteralValidator("timestamp", Timestamp.class);
22+
new TimestampLiteralValidator("timestamp", Instant.class);
2323

2424
private TimestampLiteralValidator(String functionName, Class<?> expectedResultType) {
2525
super(functionName, expectedResultType);

validator/src/test/java/dev/cel/validator/validators/DurationLiteralValidatorTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
import static org.junit.Assert.assertThrows;
2121

2222
import com.google.common.collect.ImmutableMap;
23-
import com.google.protobuf.Duration;
2423
import com.google.testing.junit.testparameterinjector.TestParameterInjector;
2524
import com.google.testing.junit.testparameterinjector.TestParameters;
2625
import dev.cel.bundle.Cel;
@@ -35,6 +34,7 @@
3534
import dev.cel.validator.CelValidator;
3635
import dev.cel.validator.CelValidatorFactory;
3736
import java.text.ParseException;
37+
import java.time.Duration;
3838
import org.junit.Test;
3939
import org.junit.runner.RunWith;
4040

@@ -174,7 +174,7 @@ public void duration_unexpectedResultType_throws() throws Exception {
174174
assertThat(result.getAllIssues().get(0).toDisplayString(ast.getSource()))
175175
.isEqualTo(
176176
"ERROR: <input>:1:10: duration validation failed. Reason: Expected"
177-
+ " com.google.protobuf.Duration type but got java.lang.Integer instead\n"
177+
+ " java.time.Duration type but got java.lang.Integer instead\n"
178178
+ " | duration('1h')\n"
179179
+ " | .........^");
180180
}

0 commit comments

Comments
 (0)