Commit 66f07459 authored by Thomas Van Lenten's avatar Thomas Van Lenten

Merge pull request #1454 from thomasvl/enum_defaults

Proper checking of enum with non zero default
parents 40574479 18b6a321
......@@ -1947,4 +1947,11 @@
EnumTestMsg_MyEnum_NegTwo);
}
- (void)testOneBasedEnumHolder {
// Test case for https://github.com/google/protobuf/issues/1453
// Message with no explicit defaults, but a non zero default for an enum.
MessageWithOneBasedEnum *enumMsg = [MessageWithOneBasedEnum message];
XCTAssertEqual(enumMsg.enumField, MessageWithOneBasedEnum_OneBasedEnum_One);
}
@end
......@@ -401,3 +401,13 @@ message EnumTestMsg {
repeated MyEnum mumble = 4;
}
// Test case for https://github.com/google/protobuf/issues/1453
// Message with no explicit defaults, but a non zero default for an enum.
message MessageWithOneBasedEnum {
enum OneBasedEnum {
ONE = 1;
TWO = 2;
}
optional OneBasedEnum enum_field = 1;
}
......@@ -757,10 +757,11 @@ bool HasNonZeroDefaultValue(const FieldDescriptor* field) {
return false;
}
if (!field->has_default_value()) {
// No custom default set in the proto file.
return false;
}
// As much as checking field->has_default_value() seems useful, it isn't
// because of enums. proto2 syntax allows the first item in an enum (the
// default) to be non zero. So checking field->has_default_value() would
// result in missing this non zero default. See MessageWithOneBasedEnum in
// objectivec/Tests/unittest_objc.proto for a test Message to confirm this.
// Some proto file set the default to the zero value, so make sure the value
// isn't the zero case.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment