@ -28,7 +28,9 @@
/ / ( INCLUDING NEGLIGENCE OR OTHERWISE ) ARISING IN ANY WAY OUT OF THE USE
/ / OF THIS SOFTWARE , EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE .
#import "google / protobuf / Unittest . pbobjc . h "
#import "GPBWellKnownTypes . h "
#import "GPBTestUtilities . h "
#import < XCTest / XCTest . h >
@ -38,7 +40,7 @@ static const NSTimeInterval kFutureOffsetInterval = 15000;
/ / Nanosecond time accuracy
static const NSTimeInterval kTimeAccuracy = 1e-9 ;
@ interface WellKnownTypesTest : XC TestCase
@ interface WellKnownTypesTest : GPB TestCase
@ end
@ implementation WellKnownTypesTest
@ -99,4 +101,53 @@ static const NSTimeInterval kTimeAccuracy = 1e-9;
[ duration2 release ] ;
}
- ( void ) testAnyPackingAndUnpacking {
TestAllTypes * from = [ TestAllTypes message ] ;
[ self setAllFields : from repeatedCount : 1 ] ;
NSData * data = from . data ;
/ / Test initWithMessage
GPBAny * anyInited = [ [ GPBAny alloc ] initWithMessage : from ] ;
XCTAssertEqualObjects (
[ GPBTypeGoogleApisComPrefix stringByAppendingString : from . descriptor . name ] ,
anyInited . typeURL ) ;
XCTAssertEqualObjects ( data , anyInited . value ) ;
[ anyInited release ] ;
/ / Test setMessage .
GPBAny * any = [ GPBAny message ] ;
[ any setMessage : from ] ;
XCTAssertEqualObjects (
[ GPBTypeGoogleApisComPrefix stringByAppendingString : from . descriptor . name ] ,
any . typeURL ) ;
XCTAssertEqualObjects ( data , any . value ) ;
/ / Test messageOfClass
TestAllTypes * to = ( TestAllTypes * ) [ any messageOfClass : [ TestAllTypes class ] ] ;
XCTAssertEqualObjects ( from , to ) ;
XCTAssertEqual ( [ any messageOfClass : [ ForeignMessage class ] ] , nil ) ;
XCTAssertEqual ( [ [ GPBAny message ] messageOfClass : [ TestAllTypes class ] ] , nil ) ;
/ / Test setMessage with another type .
ForeignMessage * from2 = [ ForeignMessage message ] ;
[ any setMessage : from2 ] ;
XCTAssertEqualObjects (
[ GPBTypeGoogleApisComPrefix stringByAppendingString : from2 . descriptor . name ] ,
any . typeURL ) ;
XCTAssertEqual ( 0 UL , [ any . value length ] ) ;
/ / Test wrapsMessageOfClass
XCTAssertTrue ( [ any wrapsMessageOfClass : [ from2 class ] ] ) ;
XCTAssertFalse ( [ any wrapsMessageOfClass : [ from class ] ] ) ;
#if !defined ( NS_BLOCK_ASSERTIONS )
/ / If assert is enabled , throw exception when the passed message class to
/ / wrapsMessageOfClass is not a child of GPBMessage .
XCTAssertThrows ( [ any wrapsMessageOfClass : [ NSString class ] ] ) ;
#else
/ / If assert is disabled , return false when the passed message class to
/ / wrapsMessageOfClass is not a child of GPBMessage .
XCTAssertFalse ( [ any wrapsMessageOfClass : [ NSString class ] ] ) ;
#endif
}
@ end