| OLD | NEW |
| 1 // Protocol Buffers - Google's data interchange format | 1 // Protocol Buffers - Google's data interchange format |
| 2 // Copyright 2015 Google Inc. All rights reserved. | 2 // Copyright 2015 Google Inc. All rights reserved. |
| 3 // https://developers.google.com/protocol-buffers/ | 3 // https://developers.google.com/protocol-buffers/ |
| 4 // | 4 // |
| 5 // Redistribution and use in source and binary forms, with or without | 5 // Redistribution and use in source and binary forms, with or without |
| 6 // modification, are permitted provided that the following conditions are | 6 // modification, are permitted provided that the following conditions are |
| 7 // met: | 7 // met: |
| 8 // | 8 // |
| 9 // * Redistributions of source code must retain the above copyright | 9 // * Redistributions of source code must retain the above copyright |
| 10 // notice, this list of conditions and the following disclaimer. | 10 // notice, this list of conditions and the following disclaimer. |
| (...skipping 14 matching lines...) Expand all Loading... |
| 25 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | 25 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
| 26 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | 26 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
| 27 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 27 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| 28 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 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. | 29 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| 30 | 30 |
| 31 #import "GPBWellKnownTypes.h" | 31 #import "GPBWellKnownTypes.h" |
| 32 | 32 |
| 33 #import <XCTest/XCTest.h> | 33 #import <XCTest/XCTest.h> |
| 34 | 34 |
| 35 #import "google/protobuf/AnyTest.pbobjc.h" |
| 36 |
| 35 // A basically random interval into the future for testing with. | 37 // A basically random interval into the future for testing with. |
| 36 static const NSTimeInterval kFutureOffsetInterval = 15000; | 38 static const NSTimeInterval kFutureOffsetInterval = 15000; |
| 37 | 39 |
| 38 // Nanosecond time accuracy | 40 // Nanosecond time accuracy |
| 39 static const NSTimeInterval kTimeAccuracy = 1e-9; | 41 static const NSTimeInterval kTimeAccuracy = 1e-9; |
| 40 | 42 |
| 41 @interface WellKnownTypesTest : XCTestCase | 43 @interface WellKnownTypesTest : XCTestCase |
| 42 @end | 44 @end |
| 43 | 45 |
| 44 @implementation WellKnownTypesTest | 46 @implementation WellKnownTypesTest |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 92 GPBDuration *duration2 = | 94 GPBDuration *duration2 = |
| 93 [[GPBDuration alloc] initWithTimeIntervalSince1970:time]; | 95 [[GPBDuration alloc] initWithTimeIntervalSince1970:time]; |
| 94 NSDate *date = [NSDate dateWithTimeIntervalSinceNow:kFutureOffsetInterval]; | 96 NSDate *date = [NSDate dateWithTimeIntervalSinceNow:kFutureOffsetInterval]; |
| 95 time = date.timeIntervalSince1970; | 97 time = date.timeIntervalSince1970; |
| 96 duration2.timeIntervalSince1970 = time; | 98 duration2.timeIntervalSince1970 = time; |
| 97 durationTime = duration2.timeIntervalSince1970; | 99 durationTime = duration2.timeIntervalSince1970; |
| 98 XCTAssertEqualWithAccuracy(time, durationTime, kTimeAccuracy); | 100 XCTAssertEqualWithAccuracy(time, durationTime, kTimeAccuracy); |
| 99 [duration2 release]; | 101 [duration2 release]; |
| 100 } | 102 } |
| 101 | 103 |
| 104 - (void)testAnyHelpers { |
| 105 |
| 106 // Set and extract covers most of the code. |
| 107 |
| 108 TestAny *subMessage = [TestAny message]; |
| 109 subMessage.int32Value = 12345; |
| 110 TestAny *message = [TestAny message]; |
| 111 NSError *err = nil; |
| 112 message.anyValue = [GPBAny anyWithMessage:subMessage error:&err]; |
| 113 XCTAssertNil(err); |
| 114 |
| 115 NSData *data = message.data; |
| 116 XCTAssertNotNil(data); |
| 117 |
| 118 TestAny *message2 = [TestAny parseFromData:data error:&err]; |
| 119 XCTAssertNil(err); |
| 120 XCTAssertNotNil(message2); |
| 121 XCTAssertTrue(message2.hasAnyValue); |
| 122 |
| 123 TestAny *subMessage2 = |
| 124 (TestAny *)[message.anyValue unpackMessageClass:[TestAny class] |
| 125 error:&err]; |
| 126 XCTAssertNil(err); |
| 127 XCTAssertNotNil(subMessage2); |
| 128 XCTAssertEqual(subMessage2.int32Value, 12345); |
| 129 |
| 130 // NULL errorPtr in the two calls. |
| 131 |
| 132 message.anyValue = [GPBAny anyWithMessage:subMessage error:NULL]; |
| 133 NSData *data2 = message.data; |
| 134 XCTAssertEqualObjects(data2, data); |
| 135 |
| 136 TestAny *subMessage3 = |
| 137 (TestAny *)[message.anyValue unpackMessageClass:[TestAny class] |
| 138 error:NULL]; |
| 139 XCTAssertNotNil(subMessage3); |
| 140 XCTAssertEqualObjects(subMessage2, subMessage3); |
| 141 |
| 142 // Try to extract wrong type. |
| 143 |
| 144 GPBTimestamp *wrongMessage = |
| 145 (GPBTimestamp *)[message.anyValue unpackMessageClass:[GPBTimestamp class] |
| 146 error:&err]; |
| 147 XCTAssertNotNil(err); |
| 148 XCTAssertNil(wrongMessage); |
| 149 XCTAssertEqualObjects(err.domain, GPBWellKnownTypesErrorDomain); |
| 150 XCTAssertEqual(err.code, GPBWellKnownTypesErrorCodeTypeURLMismatch); |
| 151 |
| 152 wrongMessage = |
| 153 (GPBTimestamp *)[message.anyValue unpackMessageClass:[GPBTimestamp class] |
| 154 error:NULL]; |
| 155 XCTAssertNil(wrongMessage); |
| 156 } |
| 157 |
| 102 @end | 158 @end |
| OLD | NEW |