@ -7,9 +7,13 @@
import Foundation
import XCTest
import ProtocolBuffers
// T e s t s o m e u s a g e o f t h e O b j C l i b r a r y f r o m S w i f t .
private func dataFromStr ( _ str : String ) -> Data {
return str . data ( using : . utf8 ) !
}
class GPBBridgeTests : XCTestCase {
func testProto2Basics ( ) {
@ -30,12 +34,12 @@ class GPBBridgeTests: XCTestCase {
msg . repeatedStringArray . add ( " pqr " )
msg . repeatedEnumArray . addValue ( Message2_Enum . bar . rawValue )
msg . repeatedEnumArray . addValue ( Message2_Enum . baz . rawValue )
msg . mapInt32Int32 . setInt32 ( 400 , forKey : 500 )
msg . mapInt32Int32 . setInt32 ( 401 , forKey : 501 )
msg . mapStringString . setObject ( " foo " , forKey : " bar " as NSString )
msg . mapStringString . setObject ( " abc " , forKey : " xyz " as NSString )
msg . mapInt32Enum . setEnum ( Message2_Enum . bar . rawValue , forKey : 600 )
msg . mapInt32Enum . setEnum ( Message2_Enum . baz . rawValue , forKey : 601 )
msg . mapInt32Int32 . setInt32 ( 400 , forKey : 500 )
msg . mapInt32Int32 . setInt32 ( 401 , forKey : 501 )
msg . mapStringString . setObject ( " foo " , forKey : " bar " as NSString )
msg . mapStringString . setObject ( " abc " , forKey : " xyz " as NSString )
msg . mapInt32Enum . setEnum ( Message2_Enum . bar . rawValue , forKey : 600 )
msg . mapInt32Enum . setEnum ( Message2_Enum . baz . rawValue , forKey : 601 )
// C h e c k h a s * .
XCTAssertTrue ( msg . hasOptionalInt32 )
@ -76,9 +80,9 @@ class GPBBridgeTests: XCTestCase {
XCTAssertEqual ( msg . mapStringString . object ( forKey : " bar " ) as ? String , " foo " )
XCTAssertEqual ( msg . mapStringString . object ( forKey : " xyz " ) as ? String , " abc " )
XCTAssertEqual ( msg . mapInt32Enum . count , UInt ( 2 ) )
XCTAssertTrue ( msg . mapInt32Enum . getEnum ( & intValue , forKey : 600 ) )
XCTAssertTrue ( msg . mapInt32Enum . getEnum ( & intValue , forKey : 600 ) )
XCTAssertEqual ( intValue , Message2_Enum . bar . rawValue )
XCTAssertTrue ( msg . mapInt32Enum . getEnum ( & intValue , forKey : 601 ) )
XCTAssertTrue ( msg . mapInt32Enum . getEnum ( & intValue , forKey : 601 ) )
XCTAssertEqual ( intValue , Message2_Enum . baz . rawValue )
// C l e a r i n g a s t r i n g w i t h n i l .
@ -128,13 +132,13 @@ class GPBBridgeTests: XCTestCase {
msg . repeatedEnumArray . addValue ( Message3_Enum . bar . rawValue )
msg . repeatedEnumArray . addRawValue ( 666 )
SetMessage3_OptionalEnum_RawValue ( msg2 , 666 )
msg . mapInt32Int32 . setInt32 ( 400 , forKey : 500 )
msg . mapInt32Int32 . setInt32 ( 401 , forKey : 501 )
msg . mapStringString . setObject ( " foo " , forKey : " bar " as NSString )
msg . mapStringString . setObject ( " abc " , forKey : " xyz " as NSString )
msg . mapInt32Enum . setEnum ( Message2_Enum . bar . rawValue , forKey : 600 )
msg . mapInt32Int32 . setInt32 ( 400 , forKey : 500 )
msg . mapInt32Int32 . setInt32 ( 401 , forKey : 501 )
msg . mapStringString . setObject ( " foo " , forKey : " bar " as NSString )
msg . mapStringString . setObject ( " abc " , forKey : " xyz " as NSString )
msg . mapInt32Enum . setEnum ( Message2_Enum . bar . rawValue , forKey : 600 )
// " p r o t o 3 " s y n t a x l e t s e n u m g e t u n k n o w n v a l u e s .
msg . mapInt32Enum . setRawValue ( 666 , forKey : 601 )
msg . mapInt32Enum . setRawValue ( 666 , forKey : 601 )
// H a s o n l y e x i s t s o n f o r m e s s a g e f i e l d s .
XCTAssertTrue ( msg . hasOptionalMessage )
@ -155,25 +159,26 @@ class GPBBridgeTests: XCTestCase {
XCTAssertEqual ( msg . repeatedInt64Array . count , UInt ( 0 ) )
XCTAssertEqual ( msg . repeatedEnumArray . count , UInt ( 2 ) )
XCTAssertEqual ( msg . repeatedEnumArray . value ( at : 0 ) , Message3_Enum . bar . rawValue )
XCTAssertEqual ( msg . repeatedEnumArray . value ( at : 1 ) , Message3_Enum . gpbUnrecognizedEnumeratorValue . rawValue )
XCTAssertEqual (
msg . repeatedEnumArray . value ( at : 1 ) , Message3_Enum . gpbUnrecognizedEnumeratorValue . rawValue )
XCTAssertEqual ( msg . repeatedEnumArray . rawValue ( at : 1 ) , 666 )
XCTAssertEqual ( msg2 . optionalEnum , Message3_Enum . gpbUnrecognizedEnumeratorValue )
XCTAssertEqual ( Message3_OptionalEnum_RawValue ( msg2 ) , Int32 ( 666 ) )
XCTAssertEqual ( msg . mapInt32Int32 . count , UInt ( 2 ) )
var intValue : Int32 = 0
XCTAssertTrue ( msg . mapInt32Int32 . getInt32 ( & intValue , forKey : 500 ) )
XCTAssertTrue ( msg . mapInt32Int32 . getInt32 ( & intValue , forKey : 500 ) )
XCTAssertEqual ( intValue , Int32 ( 400 ) )
XCTAssertTrue ( msg . mapInt32Int32 . getInt32 ( & intValue , forKey : 501 ) )
XCTAssertTrue ( msg . mapInt32Int32 . getInt32 ( & intValue , forKey : 501 ) )
XCTAssertEqual ( intValue , Int32 ( 401 ) )
XCTAssertEqual ( msg . mapStringString . count , Int ( 2 ) )
XCTAssertEqual ( msg . mapStringString . object ( forKey : " bar " ) as ? String , " foo " )
XCTAssertEqual ( msg . mapStringString . object ( forKey : " xyz " ) as ? String , " abc " )
XCTAssertEqual ( msg . mapInt32Enum . count , UInt ( 2 ) )
XCTAssertTrue ( msg . mapInt32Enum . getEnum ( & intValue , forKey : 600 ) )
XCTAssertTrue ( msg . mapInt32Enum . getEnum ( & intValue , forKey : 600 ) )
XCTAssertEqual ( intValue , Message2_Enum . bar . rawValue )
XCTAssertTrue ( msg . mapInt32Enum . getEnum ( & intValue , forKey : 601 ) )
XCTAssertTrue ( msg . mapInt32Enum . getEnum ( & intValue , forKey : 601 ) )
XCTAssertEqual ( intValue , Message3_Enum . gpbUnrecognizedEnumeratorValue . rawValue )
XCTAssertTrue ( msg . mapInt32Enum . getRawValue ( & intValue , forKey : 601 ) )
XCTAssertTrue ( msg . mapInt32Enum . getRawValue ( & intValue , forKey : 601 ) )
XCTAssertEqual ( intValue , 666 )
// C l e a r i n g a s t r i n g w i t h n i l .
@ -416,10 +421,10 @@ class GPBBridgeTests: XCTestCase {
msg . optionalGroup . a = 102
msg . repeatedStringArray . add ( " abc " )
msg . repeatedStringArray . add ( " def " )
msg . mapInt32Int32 . setInt32 ( 200 , forKey : 300 )
msg . mapInt32Int32 . setInt32 ( 201 , forKey : 201 )
msg . mapStringString . setObject ( " foo " , forKey : " bar " as NSString )
msg . mapStringString . setObject ( " abc " , forKey : " xyz " as NSString )
msg . mapInt32Int32 . setInt32 ( 200 , forKey : 300 )
msg . mapInt32Int32 . setInt32 ( 201 , forKey : 201 )
msg . mapStringString . setObject ( " foo " , forKey : " bar " as NSString )
msg . mapStringString . setObject ( " abc " , forKey : " xyz " as NSString )
let data = msg . data ( )
@ -434,4 +439,113 @@ class GPBBridgeTests: XCTestCase {
XCTAssertEqual ( msg2 , msg )
}
func testUnknownFieldsAdditions_getToOptional ( ) {
let ufs = GPBUnknownFields ( )
ufs . addFieldNumber ( 1 , varint : 1 )
ufs . addFieldNumber ( 1 , varint : 2 )
ufs . addFieldNumber ( 1 , fixed32 : 3 )
ufs . addFieldNumber ( 1 , fixed32 : 4 )
ufs . addFieldNumber ( 1 , fixed64 : 5 )
ufs . addFieldNumber ( 1 , fixed64 : 6 )
ufs . addFieldNumber ( 1 , lengthDelimited : dataFromStr ( " foo " ) )
ufs . addFieldNumber ( 1 , lengthDelimited : dataFromStr ( " bar " ) )
let group1 = ufs . addGroup ( withFieldNumber : 1 )
let group2 = ufs . addGroup ( withFieldNumber : 1 )
XCTAssertFalse ( group1 = = = group2 ) // D i f f e r e n t o b j e c t s
XCTAssertEqual ( ufs . count , 10 )
ufs . addFieldNumber ( 11 , varint : 11 )
ufs . addFieldNumber ( 12 , fixed32 : 12 )
ufs . addFieldNumber ( 13 , fixed64 : 13 )
ufs . addFieldNumber ( 14 , lengthDelimited : dataFromStr ( " foo2 " ) )
let group3 = ufs . addGroup ( withFieldNumber : 15 )
XCTAssertNotNil ( group3 )
XCTAssertFalse ( group3 = = = group1 ) // D i f f e r e n t o b j e c t s
XCTAssertFalse ( group3 = = = group2 ) // D i f f e r e n t o b j e c t s
XCTAssertEqual ( ufs . count , 15 )
XCTAssertEqual ( ufs . firstVarint ( 1 ) , 1 )
XCTAssertEqual ( ufs . firstVarint ( 11 ) , 11 )
XCTAssertNil ( ufs . firstVarint ( 12 ) ) // D i f f e r e n t t y p e
XCTAssertNil ( ufs . firstVarint ( 99 ) ) // N o t p r e s e n t
XCTAssertEqual ( ufs . firstFixed32 ( 1 ) , 3 )
XCTAssertEqual ( ufs . firstFixed32 ( 12 ) , 12 )
XCTAssertNil ( ufs . firstFixed32 ( 11 ) ) // D i f f e r e n t t y p e
XCTAssertNil ( ufs . firstFixed32 ( 99 ) ) // N o t p r e s e n t
XCTAssertEqual ( ufs . firstFixed64 ( 1 ) , 5 )
XCTAssertEqual ( ufs . firstFixed64 ( 13 ) , 13 )
XCTAssertNil ( ufs . firstFixed64 ( 11 ) ) // D i f f e r e n t t y p e
XCTAssertNil ( ufs . firstFixed64 ( 99 ) ) // N o t p r e s e n t
XCTAssertEqual ( dataFromStr ( " foo " ) , ufs . firstLengthDelimited ( 1 ) )
XCTAssertEqual ( dataFromStr ( " foo2 " ) , ufs . firstLengthDelimited ( 14 ) )
XCTAssertNil ( ufs . firstLengthDelimited ( 11 ) ) // D i f f e r e n t t y p e
XCTAssertNil ( ufs . firstLengthDelimited ( 99 ) ) // N o t p r e s e n t
XCTAssertTrue ( group1 = = = ufs . firstGroup ( 1 ) ) // T e s t i n g p t r , e x a c t o b j e c t
XCTAssertTrue ( group3 = = = ufs . firstGroup ( 15 ) ) // T e s t i n g p t r , e x a c t o b j e c t
XCTAssertNil ( ufs . firstGroup ( 11 ) ) // D i f f e r e n t t y p e
XCTAssertNil ( ufs . firstGroup ( 99 ) ) // N o t p r e s e n t
}
// T h i s a l s o t e s t t h e ` N S F a s t E n u m e r a t i o n ` - > ` S e q u e n c e ` s u p p o r t .
func testUnknownFieldAdditions_value ( ) {
let ufs = GPBUnknownFields ( )
ufs . addFieldNumber ( 1 , varint : 1 )
ufs . addFieldNumber ( 2 , varint : 2 )
ufs . addFieldNumber ( 1 , fixed32 : 3 )
ufs . addFieldNumber ( 2 , fixed32 : 4 )
ufs . addFieldNumber ( 1 , fixed64 : 5 )
ufs . addFieldNumber ( 3 , fixed64 : 6 )
ufs . addFieldNumber ( 1 , lengthDelimited : dataFromStr ( " foo " ) )
ufs . addFieldNumber ( 2 , lengthDelimited : dataFromStr ( " bar " ) )
let group1 = ufs . addGroup ( withFieldNumber : 1 )
group1 . addFieldNumber ( 10 , varint : 1 )
let group2 = ufs . addGroup ( withFieldNumber : 3 )
group2 . addFieldNumber ( 10 , varint : 2 )
// T h e o r d e r a d d e d n o t h i n g t o d o w i t h f i e l d n u m b e r s .
var loop = 0
for field in ufs {
loop += 1
switch loop {
case 1 :
XCTAssertEqual ( field . number , 1 )
XCTAssertEqual ( field . value , GPBUnknownField . Value . varint ( 1 ) )
case 2 :
XCTAssertEqual ( field . number , 2 )
XCTAssertEqual ( field . value , . varint ( 2 ) )
case 3 :
XCTAssertEqual ( field . number , 1 )
XCTAssertEqual ( field . value , . fixed32 ( 3 ) )
case 4 :
XCTAssertEqual ( field . number , 2 )
XCTAssertEqual ( field . value , . fixed32 ( 4 ) )
case 5 :
XCTAssertEqual ( field . number , 1 )
XCTAssertEqual ( field . value , . fixed64 ( 5 ) )
case 6 :
XCTAssertEqual ( field . number , 3 )
XCTAssertEqual ( field . value , . fixed64 ( 6 ) )
case 7 :
XCTAssertEqual ( field . number , 1 )
XCTAssertEqual ( field . value , . lengthDelimited ( dataFromStr ( " foo " ) ) )
case 8 :
XCTAssertEqual ( field . number , 2 )
XCTAssertEqual ( field . value , . lengthDelimited ( dataFromStr ( " bar " ) ) )
case 9 :
XCTAssertEqual ( field . number , 1 )
XCTAssertEqual ( field . value , . group ( group1 ) )
case 10 :
XCTAssertEqual ( field . number , 3 )
XCTAssertEqual ( field . value , . group ( group2 ) )
default :
XCTFail ( " Unexpected " )
}
}
XCTAssertEqual ( loop , 10 )
}
}