Skip to content

Commit dbcc164

Browse files
committed
add tests
1 parent 09c149e commit dbcc164

File tree

2 files changed

+65
-12
lines changed

2 files changed

+65
-12
lines changed

dart/packages/fory-test/test/codegen_test/enum_codegen_test.dart

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -32,24 +32,34 @@ void main() {
3232
EnumSpec enumSpec = EnumSpec(EnumFoo, [EnumFoo.A, EnumFoo.B]);
3333
EnumSpec enumSubTypeSpec =
3434
EnumSpec(EnumSubClass, [EnumSubClass.A, EnumSubClass.B]);
35-
EnumSpec enumWithIdsSpec = EnumSpec(
36-
EnumWithIds,
37-
[EnumWithIds.A, EnumWithIds.B, EnumWithIds.C],
38-
{
39-
10: EnumWithIds.A,
40-
20: EnumWithIds.B,
41-
30: EnumWithIds.C,
42-
});
43-
EnumSpec enumPartialIdsSpec =
44-
EnumSpec(EnumPartialIds,[EnumPartialIds.A, EnumPartialIds.B, EnumPartialIds.C]);
45-
EnumSpec enumDuplicateIdsSpec =
46-
EnumSpec(EnumDuplicateIds, [EnumDuplicateIds.A, EnumDuplicateIds.B, EnumDuplicateIds.C]);
4735

4836
check($EnumFoo).equals(enumSpec);
4937
check($EnumSubClass).equals(enumSubTypeSpec);
38+
});
39+
40+
test('test per-value @ForyEnumId spec generation', () {
41+
EnumSpec enumWithIdsSpec = EnumSpec(EnumWithIds,
42+
[EnumWithIds.A, EnumWithIds.B, EnumWithIds.C],
43+
{10: EnumWithIds.A, 20: EnumWithIds.B, 30: EnumWithIds.C});
44+
EnumSpec enumPartialIdsSpec = EnumSpec(
45+
EnumPartialIds, [EnumPartialIds.A, EnumPartialIds.B, EnumPartialIds.C]);
46+
EnumSpec enumDuplicateIdsSpec = EnumSpec(EnumDuplicateIds,
47+
[EnumDuplicateIds.A, EnumDuplicateIds.B, EnumDuplicateIds.C]);
48+
5049
check($EnumWithIds).equals(enumWithIdsSpec);
5150
check($EnumPartialIds).equals(enumPartialIdsSpec);
5251
check($EnumDuplicateIds).equals(enumDuplicateIdsSpec);
5352
});
53+
54+
test('test field-based @ForyEnumId spec generation', () {
55+
EnumSpec enumFieldBasedIdsSpec = EnumSpec(EnumFieldBasedIds,
56+
[EnumFieldBasedIds.A, EnumFieldBasedIds.B, EnumFieldBasedIds.C],
57+
{10: EnumFieldBasedIds.A, 20: EnumFieldBasedIds.B, 30: EnumFieldBasedIds.C});
58+
EnumSpec enumFieldBasedDuplicateIdsSpec = EnumSpec(EnumFieldBasedDuplicateIds,
59+
[EnumFieldBasedDuplicateIds.A, EnumFieldBasedDuplicateIds.B, EnumFieldBasedDuplicateIds.C]);
60+
61+
check($EnumFieldBasedIds).equals(enumFieldBasedIdsSpec);
62+
check($EnumFieldBasedDuplicateIds).equals(enumFieldBasedDuplicateIdsSpec);
63+
});
5464
});
5565
}

dart/packages/fory-test/test/datatype_test/enum_serializer_test.dart

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,5 +144,48 @@ void main() {
144144
),
145145
).throws<DeserializationRangeException>();
146146
});
147+
148+
test('writes and reads field-based enum ids', () {
149+
final EnumSerializer serializer = EnumSerializer(false, [
150+
EnumFieldBasedIds.A,
151+
EnumFieldBasedIds.B,
152+
EnumFieldBasedIds.C,
153+
], {
154+
10: EnumFieldBasedIds.A,
155+
20: EnumFieldBasedIds.B,
156+
30: EnumFieldBasedIds.C,
157+
});
158+
159+
final ByteWriter writer = ByteWriter();
160+
serializer.write(writer, EnumFieldBasedIds.B, _newSerializationContext());
161+
final ByteReader reader = ByteReader.forBytes(writer.takeBytes());
162+
check(reader.readVarUint32Small7()).equals(20);
163+
164+
final ByteWriter idWriter = ByteWriter();
165+
idWriter.writeVarUint32Small7(30);
166+
final Enum value = serializer.read(
167+
ByteReader.forBytes(idWriter.takeBytes()),
168+
0,
169+
_newDeserializationContext(),
170+
);
171+
check(value).equals(EnumFieldBasedIds.C);
172+
});
173+
174+
test('field-based duplicate ids fall back to ordinal', () {
175+
final EnumSerializer serializer = EnumSerializer(false, [
176+
EnumFieldBasedDuplicateIds.A,
177+
EnumFieldBasedDuplicateIds.B,
178+
EnumFieldBasedDuplicateIds.C,
179+
]);
180+
181+
final ByteWriter writer = ByteWriter();
182+
serializer.write(
183+
writer,
184+
EnumFieldBasedDuplicateIds.B,
185+
_newSerializationContext(),
186+
);
187+
final ByteReader reader = ByteReader.forBytes(writer.takeBytes());
188+
check(reader.readVarUint32Small7()).equals(1);
189+
});
147190
});
148191
}

0 commit comments

Comments
 (0)