Skip to content

Commit c54bfdd

Browse files
l46kokcopybara-github
authored andcommitted
Add tests for oneof, unknowns and cross serialization (full protobuf -> lite runtime)
PiperOrigin-RevId: 999709056
1 parent 762800c commit c54bfdd

4 files changed

Lines changed: 646 additions & 36 deletions

File tree

‎protobuf/src/main/java/dev/cel/protobuf/CelLiteDescriptor.java‎

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -397,6 +397,27 @@ public FieldLiteDescriptor(
397397
return defaultScalarValues.contains(value) ? null : value;
398398
}
399399

400+
/** Describes map entry type {@code fullName}, whose key and value are fields 1 and 2. */
401+
protected static MessageLiteDescriptor mapEntry(
402+
String fullName,
403+
FieldLiteDescriptor.Type keyType,
404+
FieldLiteDescriptor.Type valueType,
405+
String valueTypeName) {
406+
return new MessageLiteDescriptor(
407+
fullName,
408+
Arrays.asList(
409+
new FieldLiteDescriptor(
410+
1, "key", FieldLiteDescriptor.EncodingType.SINGULAR, keyType, false, ""),
411+
new FieldLiteDescriptor(
412+
2,
413+
"value",
414+
FieldLiteDescriptor.EncodingType.SINGULAR,
415+
valueType,
416+
false,
417+
valueTypeName)),
418+
() -> null);
419+
}
420+
400421
protected CelLiteDescriptor(String version, List<MessageLiteDescriptor> messageInfoList) {
401422
Map<String, MessageLiteDescriptor> protoFqnMap =
402423
new HashMap<>(getMapInitialCapacity(messageInfoList.size()));

‎protobuf/src/main/java/dev/cel/protobuf/templates/cel_lite_descriptor_template.txt‎

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ public final class ${descriptor_class_name} extends CelLiteDescriptor {
4040
List<MessageLiteDescriptor> descriptors = new ArrayList<>(${descriptor_metadata_list?size});
4141
List<FieldLiteDescriptor> fieldDescriptors;
4242
<#list descriptor_metadata_list as descriptor_metadata>
43+
<#if descriptor_metadata.javaClassName??>
4344

4445
fieldDescriptors = new ArrayList<>(${descriptor_metadata.fieldDescriptors?size});
4546
<#list descriptor_metadata.fieldDescriptors as field_descriptor>
@@ -57,13 +58,17 @@ public final class ${descriptor_class_name} extends CelLiteDescriptor {
5758
new MessageLiteDescriptor(
5859
"${descriptor_metadata.protoTypeName}",
5960
fieldDescriptors,
60-
<#if descriptor_metadata.javaClassName??>
6161
${descriptor_metadata.javaClassName}::newBuilder
62-
<#else>
63-
() -> null
64-
</#if>
6562
)
6663
);
64+
<#else>
65+
66+
descriptors.add(mapEntry(
67+
"${descriptor_metadata.protoTypeName}",
68+
${descriptor_metadata.fieldDescriptors[0].protoFieldTypeEnumName},
69+
${descriptor_metadata.fieldDescriptors[1].protoFieldTypeEnumName},
70+
"${descriptor_metadata.fieldDescriptors[1].fieldProtoTypeName}"));
71+
</#if>
6772
</#list>
6873

6974
return Collections.unmodifiableList(descriptors);

‎protobuf/src/test/java/dev/cel/protobuf/CelLiteDescriptorTest.java‎

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,30 @@ public void fieldDescriptor_nestedMessage_fullyQualifiedNames() {
178178
.isEqualTo("cel.expr.conformance.proto3.TestAllTypes.NestedMessage");
179179
}
180180

181+
@Test
182+
public void mapEntryDescriptor_describesKeyAndValue() {
183+
MessageLiteDescriptor mapEntryDescriptor =
184+
TEST_ALL_TYPES_CEL_LITE_DESCRIPTOR
185+
.getProtoTypeNamesToDescriptors()
186+
.get("cel.expr.conformance.proto3.TestAllTypes.MapInt64NestedTypeEntry");
187+
188+
FieldLiteDescriptor key = mapEntryDescriptor.getByFieldNumberOrThrow(1);
189+
FieldLiteDescriptor value = mapEntryDescriptor.getByFieldNumberOrThrow(2);
190+
191+
assertThat(mapEntryDescriptor.newMessageBuilder()).isNull();
192+
assertThat(key.getFieldName()).isEqualTo("key");
193+
assertThat(key.getEncodingType()).isEqualTo(EncodingType.SINGULAR);
194+
assertThat(key.getProtoFieldType()).isEqualTo(FieldLiteDescriptor.Type.INT64);
195+
assertThat(key.getIsPacked()).isFalse();
196+
assertThat(key.getFieldProtoTypeName()).isEmpty();
197+
assertThat(value.getFieldName()).isEqualTo("value");
198+
assertThat(value.getEncodingType()).isEqualTo(EncodingType.SINGULAR);
199+
assertThat(value.getProtoFieldType()).isEqualTo(FieldLiteDescriptor.Type.MESSAGE);
200+
assertThat(value.getIsPacked()).isFalse();
201+
assertThat(value.getFieldProtoTypeName())
202+
.isEqualTo("cel.expr.conformance.proto3.NestedTestAllTypes");
203+
}
204+
181205
private enum ProtoFieldTypeTestCase {
182206
DOUBLE(FieldLiteDescriptor.Type.DOUBLE, 1, WireFormat.FieldType.DOUBLE),
183207
FLOAT(FieldLiteDescriptor.Type.FLOAT, 2, WireFormat.FieldType.FLOAT),

0 commit comments

Comments
 (0)