Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
P
protobuf
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
protobuf
Commits
e0016c5b
Commit
e0016c5b
authored
Jun 28, 2016
by
Thomas Van Lenten
Committed by
GitHub
Jun 28, 2016
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #1720 from thomasvl/issue_1716
Fix GPBGetMessage{Repeated,Map}Field()
parents
dc0aeaa9
fc4c6171
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
72 additions
and
22 deletions
+72
-22
GPBMessage.m
objectivec/GPBMessage.m
+30
-0
GPBUtilities.m
objectivec/GPBUtilities.m
+2
-22
GPBMessageTests+Runtime.m
objectivec/Tests/GPBMessageTests+Runtime.m
+40
-0
No files found.
objectivec/GPBMessage.m
View file @
e0016c5b
...
...
@@ -3199,4 +3199,34 @@ static void ResolveIvarSet(GPBFieldDescriptor *field,
@end
#pragma mark - Messages from GPBUtilities.h but defined here for access to helpers.
// Only exists for public api, no core code should use this.
id
GPBGetMessageRepeatedField
(
GPBMessage
*
self
,
GPBFieldDescriptor
*
field
)
{
#if defined(DEBUG) && DEBUG
if
(
field
.
fieldType
!=
GPBFieldTypeRepeated
)
{
[
NSException
raise
:
NSInvalidArgumentException
format
:
@"%@.%@ is not a repeated field."
,
[
self
class
],
field
.
name
];
}
#endif
GPBDescriptor
*
descriptor
=
[[
self
class
]
descriptor
];
GPBFileSyntax
syntax
=
descriptor
.
file
.
syntax
;
return
GetOrCreateArrayIvarWithField
(
self
,
field
,
syntax
);
}
// Only exists for public api, no core code should use this.
id
GPBGetMessageMapField
(
GPBMessage
*
self
,
GPBFieldDescriptor
*
field
)
{
#if defined(DEBUG) && DEBUG
if
(
field
.
fieldType
!=
GPBFieldTypeMap
)
{
[
NSException
raise
:
NSInvalidArgumentException
format
:
@"%@.%@ is not a map<> field."
,
[
self
class
],
field
.
name
];
}
#endif
GPBDescriptor
*
descriptor
=
[[
self
class
]
descriptor
];
GPBFileSyntax
syntax
=
descriptor
.
file
.
syntax
;
return
GetOrCreateMapIvarWithField
(
self
,
field
,
syntax
);
}
#pragma clang diagnostic pop
objectivec/GPBUtilities.m
View file @
e0016c5b
...
...
@@ -895,17 +895,7 @@ void GPBSetMessageGroupField(GPBMessage *self,
//%PDDM-EXPAND-END (4 expansions)
// Only exists for public api, no core code should use this.
id
GPBGetMessageRepeatedField
(
GPBMessage
*
self
,
GPBFieldDescriptor
*
field
)
{
#if defined(DEBUG) && DEBUG
if
(
field
.
fieldType
!=
GPBFieldTypeRepeated
)
{
[
NSException
raise
:
NSInvalidArgumentException
format
:
@"%@.%@ is not a repeated field."
,
[
self
class
],
field
.
name
];
}
#endif
return
GPBGetObjectIvarWithField
(
self
,
field
);
}
// GPBGetMessageRepeatedField is defined in GPBMessage.m
// Only exists for public api, no core code should use this.
void
GPBSetMessageRepeatedField
(
GPBMessage
*
self
,
GPBFieldDescriptor
*
field
,
id
array
)
{
...
...
@@ -997,17 +987,7 @@ static NSString *TypeToStr(GPBDataType dataType) {
}
#endif
// Only exists for public api, no core code should use this.
id
GPBGetMessageMapField
(
GPBMessage
*
self
,
GPBFieldDescriptor
*
field
)
{
#if defined(DEBUG) && DEBUG
if
(
field
.
fieldType
!=
GPBFieldTypeMap
)
{
[
NSException
raise
:
NSInvalidArgumentException
format
:
@"%@.%@ is not a map<> field."
,
[
self
class
],
field
.
name
];
}
#endif
return
GPBGetObjectIvarWithField
(
self
,
field
);
}
// GPBGetMessageMapField is defined in GPBMessage.m
// Only exists for public api, no core code should use this.
void
GPBSetMessageMapField
(
GPBMessage
*
self
,
GPBFieldDescriptor
*
field
,
...
...
objectivec/Tests/GPBMessageTests+Runtime.m
View file @
e0016c5b
...
...
@@ -2066,6 +2066,46 @@
}];
}
-
(
void
)
test_GPBGetMessageRepeatedField
{
TestAllTypes
*
message
=
[
TestAllTypes
message
];
GPBFieldDescriptor
*
fieldDescriptor
=
[[
message
descriptor
]
fieldWithName
:
@"repeatedStringArray"
];
XCTAssertNotNil
(
fieldDescriptor
);
NSMutableArray
*
fieldArray
=
GPBGetMessageRepeatedField
(
message
,
fieldDescriptor
);
XCTAssertNotNil
(
fieldArray
);
// Should have autocreated.
XCTAssertTrue
(
fieldArray
==
message
.
repeatedStringArray
);
// Same pointer
}
-
(
void
)
test_GPBSetMessageRepeatedField
{
TestAllTypes
*
message
=
[
TestAllTypes
message
];
GPBFieldDescriptor
*
fieldDescriptor
=
[[
message
descriptor
]
fieldWithName
:
@"repeatedStringArray"
];
XCTAssertNotNil
(
fieldDescriptor
);
NSMutableArray
*
fieldArray
=
[
NSMutableArray
arrayWithObject
:
@"foo"
];
GPBSetMessageRepeatedField
(
message
,
fieldDescriptor
,
fieldArray
);
XCTAssertTrue
(
fieldArray
==
message
.
repeatedStringArray
);
// Same pointer
XCTAssertEqualObjects
(
@"foo"
,
message
.
repeatedStringArray
.
firstObject
);
}
-
(
void
)
test_GPBGetMessageMapField
{
TestMap
*
message
=
[
TestMap
message
];
GPBFieldDescriptor
*
fieldDescriptor
=
[[
message
descriptor
]
fieldWithName
:
@"mapStringString"
];
XCTAssertNotNil
(
fieldDescriptor
);
NSMutableDictionary
*
fieldMap
=
GPBGetMessageMapField
(
message
,
fieldDescriptor
);
XCTAssertNotNil
(
fieldMap
);
// Should have autocreated.
XCTAssertTrue
(
fieldMap
==
message
.
mapStringString
);
// Same pointer
}
-
(
void
)
test_GPBSetMessageMapField
{
TestMap
*
message
=
[
TestMap
message
];
GPBFieldDescriptor
*
fieldDescriptor
=
[[
message
descriptor
]
fieldWithName
:
@"mapStringString"
];
XCTAssertNotNil
(
fieldDescriptor
);
NSMutableDictionary
*
fieldMap
=
[
NSMutableDictionary
dictionaryWithObject
:
@"bar"
forKey
:
@"foo"
];
GPBSetMessageMapField
(
message
,
fieldDescriptor
,
fieldMap
);
XCTAssertTrue
(
fieldMap
==
message
.
mapStringString
);
// Same pointer
XCTAssertEqualObjects
(
@"bar"
,
message
.
mapStringString
[
@"foo"
]);
}
#pragma mark - Subset from from map_tests.cc
// TEST(GeneratedMapFieldTest, IsInitialized)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment