@@ -25,67 +25,64 @@ import FirebaseCore
25
25
import XCTest
26
26
27
27
class SerializerTests : XCTestCase {
28
+ private var serializer : FUNSerializer !
29
+
30
+ override func setUp( ) {
31
+ super. setUp ( )
32
+ serializer = FUNSerializer ( )
33
+ }
34
+
28
35
func testEncodeNull( ) throws {
29
- let serializer = FUNSerializer ( )
30
36
let null = NSNull ( )
31
37
XCTAssertEqual ( try serializer. encode ( null) as? NSNull , null)
32
38
}
33
39
34
40
func testDecodeNull( ) throws {
35
- let serializer = FUNSerializer ( )
36
41
let null = NSNull ( )
37
42
XCTAssertEqual ( try serializer. decode ( null) as? NSNull , null)
38
43
}
39
44
40
45
func testEncodeInt32( ) throws {
41
- let serializer = FUNSerializer ( )
42
46
let one = NSNumber ( value: 1 as Int32 )
43
47
XCTAssertEqual ( one, try serializer. encode ( one) as? NSNumber )
44
48
}
45
49
46
50
func testEncodeInt( ) throws {
47
- let serializer = FUNSerializer ( )
48
51
let one = NSNumber ( 1 )
49
52
let dict = try XCTUnwrap ( serializer. encode ( one) as? NSDictionary )
50
53
XCTAssertEqual ( " type.googleapis.com/google.protobuf.Int64Value " , dict [ " @type " ] as? String )
51
54
XCTAssertEqual ( " 1 " , dict [ " value " ] as? String )
52
55
}
53
56
54
57
func testDecodeInt32( ) throws {
55
- let serializer = FUNSerializer ( )
56
58
let one = NSNumber ( value: 1 as Int32 )
57
59
XCTAssertEqual ( one, try serializer. decode ( one) as? NSNumber )
58
60
}
59
61
60
62
func testDecodeInt( ) throws {
61
- let serializer = FUNSerializer ( )
62
63
let one = NSNumber ( 1 )
63
64
XCTAssertEqual ( one, try serializer. decode ( one) as? NSNumber )
64
65
}
65
66
66
67
func testDecodeIntFromDictionary( ) throws {
67
- let serializer = FUNSerializer ( )
68
68
let dictOne = [ " @type " : " type.googleapis.com/google.protobuf.Int64Value " ,
69
69
" value " : " 1 " ]
70
70
XCTAssertEqual ( NSNumber ( 1 ) , try serializer. decode ( dictOne) as? NSNumber )
71
71
}
72
72
73
73
func testEncodeLong( ) throws {
74
- let serializer = FUNSerializer ( )
75
74
let lowLong = NSNumber ( - 9_223_372_036_854_775_800 )
76
75
let dict = try XCTUnwrap ( serializer. encode ( lowLong) as? NSDictionary )
77
76
XCTAssertEqual ( " type.googleapis.com/google.protobuf.Int64Value " , dict [ " @type " ] as? String )
78
77
XCTAssertEqual ( " -9223372036854775800 " , dict [ " value " ] as? String )
79
78
}
80
79
81
80
func testDecodeLong( ) throws {
82
- let serializer = FUNSerializer ( )
83
81
let lowLong = NSNumber ( - 9_223_372_036_854_775_800 )
84
82
XCTAssertEqual ( lowLong, try serializer. decode ( lowLong) as? NSNumber )
85
83
}
86
84
87
85
func testDecodeLongFromDictionary( ) throws {
88
- let serializer = FUNSerializer ( )
89
86
let dictLowLong = [ " @type " : " type.googleapis.com/google.protobuf.Int64Value " ,
90
87
" value " : " -9223372036854775800 " ]
91
88
let decoded = try serializer. decode ( dictLowLong) as? NSNumber
@@ -96,13 +93,12 @@ class SerializerTests: XCTestCase {
96
93
}
97
94
98
95
func testDecodeInvalidLong( ) throws {
99
- let serializer = FUNSerializer ( )
100
96
let typeString = " type.googleapis.com/google.protobuf.Int64Value "
101
97
let badVal = " -9223372036854775800 and some other junk "
102
98
let dictLowLong = [ " @type " : typeString, " value " : badVal]
103
99
do {
104
100
_ = try serializer. decode ( dictLowLong) as? NSNumber
105
- } catch let SerializerError . invalidValueForType( value, type) {
101
+ } catch let FUNSerializer . Error . invalidValueForType( value, type) {
106
102
XCTAssertEqual ( value, badVal)
107
103
XCTAssertEqual ( type, typeString)
108
104
return
@@ -111,7 +107,6 @@ class SerializerTests: XCTestCase {
111
107
}
112
108
113
109
func testEncodeUnsignedLong( ) throws {
114
- let serializer = FUNSerializer ( )
115
110
let typeString = " type.googleapis.com/google.protobuf.UInt64Value "
116
111
let highULong = NSNumber ( value: 18_446_744_073_709_551_607 as UInt64 )
117
112
let expected = [ " @type " : typeString, " value " : " 18446744073709551607 " ]
@@ -120,13 +115,11 @@ class SerializerTests: XCTestCase {
120
115
}
121
116
122
117
func testDecodeUnsignedLong( ) throws {
123
- let serializer = FUNSerializer ( )
124
118
let highULong = NSNumber ( value: 18_446_744_073_709_551_607 as UInt64 )
125
119
XCTAssertEqual ( highULong, try serializer. decode ( highULong) as? NSNumber )
126
120
}
127
121
128
122
func testDecodeUnsignedLongFromDictionary( ) throws {
129
- let serializer = FUNSerializer ( )
130
123
let typeString = " type.googleapis.com/google.protobuf.UInt64Value "
131
124
let highULong = NSNumber ( value: 18_446_744_073_709_551_607 as UInt64 )
132
125
let coded = [ " @type " : typeString, " value " : " 18446744073709551607 " ]
@@ -138,13 +131,12 @@ class SerializerTests: XCTestCase {
138
131
}
139
132
140
133
func testDecodeUnsignedLongFromDictionaryOverflow( ) throws {
141
- let serializer = FUNSerializer ( )
142
134
let typeString = " type.googleapis.com/google.protobuf.UInt64Value "
143
135
let tooHighVal = " 18446744073709551616 "
144
136
let coded = [ " @type " : typeString, " value " : tooHighVal]
145
137
do {
146
138
_ = try serializer. decode ( coded) as? NSNumber
147
- } catch let SerializerError . invalidValueForType( value, type) {
139
+ } catch let FUNSerializer . Error . invalidValueForType( value, type) {
148
140
XCTAssertEqual ( value, tooHighVal)
149
141
XCTAssertEqual ( type, typeString)
150
142
return
@@ -153,47 +145,39 @@ class SerializerTests: XCTestCase {
153
145
}
154
146
155
147
func testEncodeDouble( ) throws {
156
- let serializer = FUNSerializer ( )
157
148
let myDouble = NSNumber ( value: 1.2 as Double )
158
149
XCTAssertEqual ( myDouble, try serializer. encode ( myDouble) as? NSNumber )
159
150
}
160
151
161
152
func testDecodeDouble( ) throws {
162
- let serializer = FUNSerializer ( )
163
153
let myDouble = NSNumber ( value: 1.2 as Double )
164
154
XCTAssertEqual ( myDouble, try serializer. decode ( myDouble) as? NSNumber )
165
155
}
166
156
167
157
func testEncodeBool( ) throws {
168
- let serializer = FUNSerializer ( )
169
158
XCTAssertEqual ( true , try serializer. encode ( true ) as? NSNumber )
170
159
}
171
160
172
161
func testDecodeBool( ) throws {
173
- let serializer = FUNSerializer ( )
174
162
XCTAssertEqual ( true , try serializer. decode ( true ) as? NSNumber )
175
163
}
176
164
177
165
func testEncodeString( ) throws {
178
- let serializer = FUNSerializer ( )
179
166
XCTAssertEqual ( " hello " , try serializer. encode ( " hello " ) as? String )
180
167
}
181
168
182
169
func testDecodeString( ) throws {
183
- let serializer = FUNSerializer ( )
184
170
XCTAssertEqual ( " good-bye " , try serializer. decode ( " good-bye " ) as? String )
185
171
}
186
172
187
173
// TODO: Should we add support for Array as well as NSArray?
188
174
189
175
func testEncodeSimpleArray( ) throws {
190
- let serializer = FUNSerializer ( )
191
176
let input = [ 1 as Int32 , 2 as Int32 ] as NSArray
192
177
XCTAssertEqual ( input, try serializer. encode ( input) as? NSArray )
193
178
}
194
179
195
180
func testEncodeArray( ) throws {
196
- let serializer = FUNSerializer ( )
197
181
let input = [
198
182
1 as Int32 ,
199
183
" two " ,
@@ -204,7 +188,6 @@ class SerializerTests: XCTestCase {
204
188
}
205
189
206
190
func testDecodeArray( ) throws {
207
- let serializer = FUNSerializer ( )
208
191
let input = [
209
192
1 as Int64 ,
210
193
" two " ,
@@ -227,44 +210,64 @@ class SerializerTests: XCTestCase {
227
210
" baz " : [ 3 , [ " @type " : " type.googleapis.com/google.protobuf.Int64Value " ,
228
211
" value " : " 9876543210 " ] ] as [ Any ] ,
229
212
] as NSDictionary
230
- let serializer = FUNSerializer ( )
231
213
XCTAssertEqual ( expected, try serializer. encode ( input) as? NSDictionary )
232
214
}
233
215
234
216
func testDecodeMap( ) {
235
217
let input = [ " foo " : 1 , " bar " : " hello " , " baz " : [ 3 , 9_876_543_210 ] ] as NSDictionary
236
218
let expected = [ " foo " : 1 , " bar " : " hello " , " baz " : [ 3 , 9_876_543_210 ] ] as NSDictionary
237
- let serializer = FUNSerializer ( )
238
219
XCTAssertEqual ( expected, try serializer. decode ( input) as? NSDictionary )
239
220
}
240
221
241
222
func testEncodeUnknownType( ) {
242
223
let input = [ " @type " : " unknown " , " value " : " whatever " ] as NSDictionary
243
- let serializer = FUNSerializer ( )
244
224
XCTAssertEqual ( input, try serializer. encode ( input) as? NSDictionary )
245
225
}
246
226
247
227
func testDecodeUnknownType( ) {
248
228
let input = [ " @type " : " unknown " , " value " : " whatever " ] as NSDictionary
249
- let serializer = FUNSerializer ( )
250
229
XCTAssertEqual ( input, try serializer. decode ( input) as? NSDictionary )
251
230
}
252
231
253
232
func testDecodeUnknownTypeWithoutValue( ) {
254
233
let input = [ " @type " : " unknown " ] as NSDictionary
255
- let serializer = FUNSerializer ( )
256
234
XCTAssertEqual ( input, try serializer. decode ( input) as? NSDictionary )
257
235
}
258
236
259
- // - (void)testDecodeUnknownTypeWithoutValue {
260
- // NSDictionary *input = @{
261
- // @"@type" : @"unknown",
262
- // };
263
- // FUNSerializer *serializer = [[FUNSerializer alloc] init];
264
- // NSError *error = nil;
265
- // XCTAssertEqualObjects(input, [serializer decode:input error:&error]);
266
- // XCTAssertNil(error);
267
- // }
268
- //
269
- // @end
237
+ func testEncodeUnsupportedType( ) {
238
+ let input = CustomObject ( )
239
+
240
+ do {
241
+ let _ = try serializer. encode ( input)
242
+ XCTFail ( " Expected an error " )
243
+ } catch {
244
+ guard case let . unsupportedType( typeName: typeName) = error as? FUNSerializer . Error
245
+ else {
246
+ return XCTFail ( " Unexpected error: \( error) " )
247
+ }
248
+
249
+ XCTAssertEqual ( typeName, " CustomObject " )
250
+ }
251
+ }
252
+
253
+ func testDecodeUnsupportedType( ) {
254
+ let input = CustomObject ( )
255
+
256
+ do {
257
+ let _ = try serializer. decode ( input)
258
+ XCTFail ( " Expected an error " )
259
+ } catch {
260
+ guard case let . unsupportedType( typeName: typeName) = error as? FUNSerializer . Error
261
+ else {
262
+ return XCTFail ( " Unexpected error: \( error) " )
263
+ }
264
+
265
+ XCTAssertEqual ( typeName, " CustomObject " )
266
+ }
267
+ }
268
+ }
269
+
270
+ /// Used to represent a type that cannot be encoded or decoded.
271
+ private struct CustomObject {
272
+ let id = 123
270
273
}
0 commit comments