Skip to content

Commit 7d25577

Browse files
committed
Bug fix, tests
1 parent cec8ec7 commit 7d25577

File tree

2 files changed

+109
-3
lines changed

2 files changed

+109
-3
lines changed

protobuf/lib/src/protobuf/extension_field_set.dart

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -223,19 +223,21 @@ class ExtensionFieldSet {
223223
Map.from(_values),
224224
);
225225

226+
final newValues = newExtensionFieldSet._values;
227+
226228
for (final entry in _values.entries) {
227229
final tag = entry.key;
228230
final value = entry.value;
229231
final fieldInfo = _info[tag]!;
230232
if (fieldInfo.isMapField) {
231233
final PbMap? map = value;
232-
_values[tag] = map?.deepCopy();
234+
newValues[tag] = map?.deepCopy();
233235
} else if (fieldInfo.isRepeated) {
234236
final PbList? list = value;
235-
_values[tag] = list?.deepCopy();
237+
newValues[tag] = list?.deepCopy();
236238
} else if (fieldInfo.isGroupOrMessage) {
237239
final GeneratedMessage? message = value;
238-
_values[tag] = message?.deepCopy();
240+
newValues[tag] = message?.deepCopy();
239241
}
240242
}
241243

protoc_plugin/test/generated_message_test.dart

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
import 'package:protobuf/protobuf.dart';
66
import 'package:test/test.dart';
7+
import 'package:fixnum/fixnum.dart';
78

89
import 'gen/duplicate_names_import.pb.dart';
910
import 'gen/enums.pb.dart';
@@ -877,3 +878,106 @@ void testCopy(TestAllTypes value1, TestAllTypes value2) {
877878

878879
assertAllFieldsSet(value1);
879880
}
881+
882+
/// Same as `testCopy`, but tests extension fields.
883+
///
884+
/// `value2` should be the clone of `value1`, either with `clone` or `deepCopy`.
885+
void testCopyExtensions(TestAllExtensions value1, TestAllExtensions value2) {
886+
assertAllExtensionsSet(value2);
887+
expect(value2, isNot(same(value1)));
888+
889+
value2.setExtension(
890+
Unittest.optionalInt32Extension,
891+
value2.getExtension(Unittest.optionalInt32Extension) + 1,
892+
);
893+
value2.setExtension(
894+
Unittest.optionalInt64Extension,
895+
value2.getExtension(Unittest.optionalInt64Extension) + 1,
896+
);
897+
value2.setExtension(
898+
Unittest.optionalUint32Extension,
899+
value2.getExtension(Unittest.optionalUint32Extension) + 1,
900+
);
901+
value2.setExtension(
902+
Unittest.optionalUint64Extension,
903+
value2.getExtension(Unittest.optionalUint64Extension) + 1,
904+
);
905+
value2.setExtension(
906+
Unittest.optionalSint32Extension,
907+
value2.getExtension(Unittest.optionalSint32Extension) + 1,
908+
);
909+
value2.setExtension(
910+
Unittest.optionalSint64Extension,
911+
value2.getExtension(Unittest.optionalSint64Extension) + 1,
912+
);
913+
value2.setExtension(
914+
Unittest.optionalFixed32Extension,
915+
value2.getExtension(Unittest.optionalFixed32Extension) + 1,
916+
);
917+
value2.setExtension(
918+
Unittest.optionalFixed64Extension,
919+
value2.getExtension(Unittest.optionalFixed64Extension) + 1,
920+
);
921+
value2.setExtension(
922+
Unittest.optionalFloatExtension,
923+
value2.getExtension(Unittest.optionalFloatExtension) + 1,
924+
);
925+
value2.setExtension(
926+
Unittest.optionalDoubleExtension,
927+
value2.getExtension(Unittest.optionalDoubleExtension) + 1,
928+
);
929+
value2.setExtension(
930+
Unittest.optionalBoolExtension,
931+
!value2.getExtension(Unittest.optionalBoolExtension),
932+
);
933+
value2.setExtension(Unittest.optionalStringExtension, "hi 1");
934+
935+
// Same as `testCopy`, don't test `bytes` fields.
936+
// value2.getExtension(Unittest.optionalBytesExtension).add(987);
937+
938+
value2.getExtension(Unittest.optionalGroupExtension).a += 1;
939+
value2.getExtension(Unittest.optionalNestedMessageExtension).bb += 1;
940+
value2.getExtension(Unittest.optionalForeignMessageExtension).c += 1;
941+
value2.getExtension(Unittest.optionalImportMessageExtension).d += 1;
942+
value2.setExtension(
943+
Unittest.optionalNestedEnumExtension,
944+
TestAllTypes_NestedEnum.BAR,
945+
);
946+
value2.setExtension(
947+
Unittest.optionalForeignEnumExtension,
948+
ForeignEnum.FOREIGN_BAR,
949+
);
950+
value2.setExtension(
951+
Unittest.optionalImportEnumExtension,
952+
ImportEnum.IMPORT_BAR,
953+
);
954+
value2.setExtension(Unittest.optionalStringPieceExtension, "hi 2");
955+
value2.setExtension(Unittest.optionalCordExtension, "hi 3");
956+
957+
value2.getExtension(Unittest.repeatedInt32Extension).add(123);
958+
value2.getExtension(Unittest.repeatedInt64Extension).add(Int64(123));
959+
value2.getExtension(Unittest.repeatedUint32Extension).add(123);
960+
value2.getExtension(Unittest.repeatedUint64Extension).add(Int64(123));
961+
value2.getExtension(Unittest.repeatedSint32Extension).add(123);
962+
value2.getExtension(Unittest.repeatedSint64Extension).add(Int64(123));
963+
value2.getExtension(Unittest.repeatedFixed32Extension).add(123);
964+
value2.getExtension(Unittest.repeatedFixed64Extension).add(Int64(123));
965+
value2.getExtension(Unittest.repeatedSfixed32Extension).add(123);
966+
value2.getExtension(Unittest.repeatedSfixed64Extension).add(Int64(123));
967+
value2.getExtension(Unittest.repeatedFloatExtension).add(123);
968+
value2.getExtension(Unittest.repeatedDoubleExtension).add(123);
969+
value2.getExtension(Unittest.repeatedDoubleExtension).add(true);
970+
value2.getExtension(Unittest.repeatedStringExtension).add("hi 4");
971+
value2.getExtension(Unittest.repeatedBytesExtension).add(<int>[1, 2, 3]);
972+
value2.getExtension(Unittest.repeatedGroupExtension).add(RepeatedGroup_extension());
973+
value2.getExtension(Unittest.repeatedNestedMessageExtension).add(TestAllTypes_NestedMessage());
974+
value2.getExtension(Unittest.repeatedForeignMessageExtension).add(ForeignMessage());
975+
value2.getExtension(Unittest.repeatedImportMessageExtension).add(ImportMessage());
976+
value2.getExtension(Unittest.repeatedNestedEnumExtension).add(TestAllTypes_NestedEnum.BAR);
977+
value2.getExtension(Unittest.repeatedForeignEnumExtension).add(ForeignEnum.FOREIGN_BAR);
978+
value2.getExtension(Unittest.repeatedImportEnumExtension).add(ImportEnum.IMPORT_BAR);
979+
value2.getExtension(Unittest.repeatedStringPieceExtension).add("hi 5");
980+
value2.getExtension(Unittest.repeatedCordExtension).add("hi 6");
981+
982+
assertAllExtensionsSet(value1);
983+
}

0 commit comments

Comments
 (0)