Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(16)

Side by Side Diff: third_party/protobuf/objectivec/Tests/GPBWireFormatTests.m

Issue 1322483002: Revert https://codereview.chromium.org/1291903002 (protobuf roll). (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Protocol Buffers - Google's data interchange format
2 // Copyright 2008 Google Inc. All rights reserved.
3 // https://developers.google.com/protocol-buffers/
4 //
5 // Redistribution and use in source and binary forms, with or without
6 // modification, are permitted provided that the following conditions are
7 // met:
8 //
9 // * Redistributions of source code must retain the above copyright
10 // notice, this list of conditions and the following disclaimer.
11 // * Redistributions in binary form must reproduce the above
12 // copyright notice, this list of conditions and the following disclaimer
13 // in the documentation and/or other materials provided with the
14 // distribution.
15 // * Neither the name of Google Inc. nor the names of its
16 // contributors may be used to endorse or promote products derived from
17 // this software without specific prior written permission.
18 //
19 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30
31 #import "GPBTestUtilities.h"
32
33 #import "GPBCodedInputStream.h"
34 #import "GPBMessage_PackagePrivate.h"
35 #import "GPBUnknownField_PackagePrivate.h"
36 #import "google/protobuf/Unittest.pbobjc.h"
37 #import "google/protobuf/UnittestMset.pbobjc.h"
38
39 @interface WireFormatTests : GPBTestCase
40 @end
41
42 @implementation WireFormatTests
43
44 - (void)testSerialization {
45 TestAllTypes* message = [self allSetRepeatedCount:kGPBDefaultRepeatCount];
46
47 NSData* rawBytes = message.data;
48 XCTAssertEqual(message.serializedSize, (size_t)rawBytes.length);
49
50 TestAllTypes* message2 = [TestAllTypes parseFromData:rawBytes error:NULL];
51
52 [self assertAllFieldsSet:message2 repeatedCount:kGPBDefaultRepeatCount];
53 }
54
55 - (void)testSerializationPacked {
56 TestPackedTypes* message =
57 [self packedSetRepeatedCount:kGPBDefaultRepeatCount];
58
59 NSData* rawBytes = message.data;
60 XCTAssertEqual(message.serializedSize, (size_t)rawBytes.length);
61
62 TestPackedTypes* message2 =
63 [TestPackedTypes parseFromData:rawBytes error:NULL];
64
65 [self assertPackedFieldsSet:message2 repeatedCount:kGPBDefaultRepeatCount];
66 }
67
68 - (void)testSerializeExtensions {
69 // TestAllTypes and TestAllExtensions should have compatible wire formats,
70 // so if we serealize a TestAllExtensions then parse it as TestAllTypes
71 // it should work.
72
73 TestAllExtensions* message =
74 [self allExtensionsSetRepeatedCount:kGPBDefaultRepeatCount];
75 NSData* rawBytes = message.data;
76 XCTAssertEqual(message.serializedSize, (size_t)rawBytes.length);
77
78 TestAllTypes* message2 = [TestAllTypes parseFromData:rawBytes error:NULL];
79
80 [self assertAllFieldsSet:message2 repeatedCount:kGPBDefaultRepeatCount];
81 }
82
83 - (void)testSerializePackedExtensions {
84 // TestPackedTypes and TestPackedExtensions should have compatible wire
85 // formats; check that they serialize to the same string.
86 TestPackedExtensions* message =
87 [self packedExtensionsSetRepeatedCount:kGPBDefaultRepeatCount];
88 NSData* rawBytes = message.data;
89
90 TestPackedTypes* message2 =
91 [self packedSetRepeatedCount:kGPBDefaultRepeatCount];
92 NSData* rawBytes2 = message2.data;
93
94 XCTAssertEqualObjects(rawBytes, rawBytes2);
95 }
96
97 - (void)testParseExtensions {
98 // TestAllTypes and TestAllExtensions should have compatible wire formats,
99 // so if we serialize a TestAllTypes then parse it as TestAllExtensions
100 // it should work.
101
102 TestAllTypes* message = [self allSetRepeatedCount:kGPBDefaultRepeatCount];
103 NSData* rawBytes = message.data;
104
105 GPBExtensionRegistry* registry = [self extensionRegistry];
106
107 TestAllExtensions* message2 = [TestAllExtensions parseFromData:rawBytes
108 extensionRegistry:registry
109 error:NULL];
110
111 [self assertAllExtensionsSet:message2 repeatedCount:kGPBDefaultRepeatCount];
112 }
113
114
115 - (void) testExtensionsSerializedSize {
116 size_t allSet = [self allSetRepeatedCount:kGPBDefaultRepeatCount].serializedSi ze;
117 size_t extensionSet = [self allExtensionsSetRepeatedCount:kGPBDefaultRepeatCou nt].serializedSize;
118 XCTAssertEqual(allSet, extensionSet);
119 }
120
121 - (void)testParsePackedExtensions {
122 // Ensure that packed extensions can be properly parsed.
123 TestPackedExtensions* message =
124 [self packedExtensionsSetRepeatedCount:kGPBDefaultRepeatCount];
125 NSData* rawBytes = message.data;
126
127 GPBExtensionRegistry* registry = [self extensionRegistry];
128
129 TestPackedExtensions* message2 = [TestPackedExtensions parseFromData:rawBytes
130 extensionRegistry:registry
131 error:NULL];
132
133 [self assertPackedExtensionsSet:message2
134 repeatedCount:kGPBDefaultRepeatCount];
135 }
136
137 const int kUnknownTypeId = 1550055;
138
139 - (void)testSerializeMessageSet {
140 // Set up a TestMessageSet with two known messages and an unknown one.
141 TestMessageSet* message_set = [TestMessageSet message];
142 [[message_set getExtension:[TestMessageSetExtension1 messageSetExtension]]
143 setI:123];
144 [[message_set getExtension:[TestMessageSetExtension2 messageSetExtension]]
145 setStr:@"foo"];
146 GPBUnknownField* unknownField =
147 [[[GPBUnknownField alloc] initWithNumber:kUnknownTypeId] autorelease];
148 [unknownField addLengthDelimited:[NSData dataWithBytes:"bar" length:3]];
149 GPBUnknownFieldSet* unknownFieldSet =
150 [[[GPBUnknownFieldSet alloc] init] autorelease];
151 [unknownFieldSet addField:unknownField];
152 [message_set setUnknownFields:unknownFieldSet];
153
154 NSData* data = [message_set data];
155
156 // Parse back using RawMessageSet and check the contents.
157 RawMessageSet* raw = [RawMessageSet parseFromData:data error:NULL];
158
159 XCTAssertEqual([raw.unknownFields countOfFields], (NSUInteger)0);
160
161 XCTAssertEqual(raw.itemArray.count, (NSUInteger)3);
162 XCTAssertEqual((uint32_t)[raw.itemArray[0] typeId],
163 [TestMessageSetExtension1 messageSetExtension].fieldNumber);
164 XCTAssertEqual((uint32_t)[raw.itemArray[1] typeId],
165 [TestMessageSetExtension2 messageSetExtension].fieldNumber);
166 XCTAssertEqual([raw.itemArray[2] typeId], kUnknownTypeId);
167
168 TestMessageSetExtension1* message1 =
169 [TestMessageSetExtension1 parseFromData:[raw.itemArray[0] message]
170 error:NULL];
171 XCTAssertEqual(message1.i, 123);
172
173 TestMessageSetExtension2* message2 =
174 [TestMessageSetExtension2 parseFromData:[raw.itemArray[1] message]
175 error:NULL];
176 XCTAssertEqualObjects(message2.str, @"foo");
177
178 XCTAssertEqualObjects([raw.itemArray[2] message],
179 [NSData dataWithBytes:"bar" length:3]);
180 }
181
182 - (void)testParseMessageSet {
183 // Set up a RawMessageSet with two known messages and an unknown one.
184 RawMessageSet* raw = [RawMessageSet message];
185
186 {
187 RawMessageSet_Item* item = [RawMessageSet_Item message];
188 item.typeId = [TestMessageSetExtension1 messageSetExtension].fieldNumber;
189 TestMessageSetExtension1* message = [TestMessageSetExtension1 message];
190 message.i = 123;
191 item.message = [message data];
192 raw.itemArray = [NSMutableArray array];
193 [raw.itemArray addObject:item];
194 }
195
196 {
197 RawMessageSet_Item* item = [RawMessageSet_Item message];
198 item.typeId = [TestMessageSetExtension2 messageSetExtension].fieldNumber;
199 TestMessageSetExtension2* message = [TestMessageSetExtension2 message];
200 message.str = @"foo";
201 item.message = [message data];
202 [raw.itemArray addObject:item];
203 }
204
205 {
206 RawMessageSet_Item* item = [RawMessageSet_Item message];
207 item.typeId = kUnknownTypeId;
208 item.message = [NSData dataWithBytes:"bar" length:3];
209 [raw.itemArray addObject:item];
210 }
211
212 NSData* data = [raw data];
213
214 // Parse as a TestMessageSet and check the contents.
215 TestMessageSet* messageSet =
216 [TestMessageSet parseFromData:data
217 extensionRegistry:[UnittestMsetRoot extensionRegistry]
218 error:NULL];
219
220 XCTAssertEqual(
221 [[messageSet
222 getExtension:[TestMessageSetExtension1 messageSetExtension]] i],
223 123);
224 XCTAssertEqualObjects(
225 [[messageSet
226 getExtension:[TestMessageSetExtension2 messageSetExtension]] str],
227 @"foo");
228
229 XCTAssertEqual([messageSet.unknownFields countOfFields], (NSUInteger)1);
230 GPBUnknownField* unknownField = [messageSet.unknownFields getField:kUnknownTyp eId];
231 XCTAssertNotNil(unknownField);
232 XCTAssertEqual(unknownField.lengthDelimitedList.count, (NSUInteger)1);
233 XCTAssertEqualObjects(unknownField.lengthDelimitedList[0],
234 [NSData dataWithBytes:"bar" length:3]);
235 }
236
237 - (void)assertFieldsInOrder:(NSData*)data {
238 GPBCodedInputStream* input = [GPBCodedInputStream streamWithData:data];
239 int32_t previousTag = 0;
240
241 while (YES) {
242 int32_t tag = [input readTag];
243 if (tag == 0) {
244 break;
245 }
246
247 XCTAssertGreaterThan(tag, previousTag);
248 [input skipField:tag];
249 }
250 }
251
252 @end
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698