1 // Protocol Buffers - Google's data interchange format 2 // Copyright 2015 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 "GPBWellKnownTypes.h" 32 33 #import <XCTest/XCTest.h> 34 35 // A basically random interval into the future for testing with. 36 static const NSTimeInterval kFutureOffsetInterval = 15000; 37 38 // Nanosecond time accuracy 39 static const NSTimeInterval kTimeAccuracy = 1e-9; 40 41 @interface WellKnownTypesTest : XCTestCase 42 @end 43 44 @implementation WellKnownTypesTest 45 46 - (void)testTimeStamp { 47 // Test Creation. 48 NSDate *date = [NSDate date]; 49 GPBTimestamp *timeStamp = [[GPBTimestamp alloc] initWithDate:date]; 50 NSDate *timeStampDate = timeStamp.date; 51 52 // Comparing timeIntervals instead of directly comparing dates because date 53 // equality requires the time intervals to be exactly the same, and the 54 // timeintervals go through a bit of floating point error as they are 55 // converted back and forth from the internal representation. 56 XCTAssertEqualWithAccuracy(date.timeIntervalSince1970, 57 timeStampDate.timeIntervalSince1970, 58 kTimeAccuracy); 59 60 NSTimeInterval time = [date timeIntervalSince1970]; 61 GPBTimestamp *timeStamp2 = 62 [[GPBTimestamp alloc] initWithTimeIntervalSince1970:time]; 63 NSTimeInterval durationTime = timeStamp2.timeIntervalSince1970; 64 XCTAssertEqualWithAccuracy(time, durationTime, kTimeAccuracy); 65 [timeStamp release]; 66 67 // Test Mutation. 68 date = [NSDate dateWithTimeIntervalSinceNow:kFutureOffsetInterval]; 69 timeStamp2.date = date; 70 timeStampDate = timeStamp2.date; 71 XCTAssertEqualWithAccuracy(date.timeIntervalSince1970, 72 timeStampDate.timeIntervalSince1970, 73 kTimeAccuracy); 74 75 time = date.timeIntervalSince1970; 76 timeStamp2.timeIntervalSince1970 = time; 77 durationTime = timeStamp2.timeIntervalSince1970; 78 XCTAssertEqualWithAccuracy(time, durationTime, kTimeAccuracy); 79 [timeStamp2 release]; 80 } 81 82 - (void)testDuration { 83 // Test Creation. 84 NSTimeInterval time = [[NSDate date] timeIntervalSince1970]; 85 GPBDuration *duration = 86 [[GPBDuration alloc] initWithTimeIntervalSince1970:time]; 87 NSTimeInterval durationTime = duration.timeIntervalSince1970; 88 XCTAssertEqualWithAccuracy(time, durationTime, kTimeAccuracy); 89 [duration release]; 90 91 // Test Mutation. 92 GPBDuration *duration2 = 93 [[GPBDuration alloc] initWithTimeIntervalSince1970:time]; 94 NSDate *date = [NSDate dateWithTimeIntervalSinceNow:kFutureOffsetInterval]; 95 time = date.timeIntervalSince1970; 96 duration2.timeIntervalSince1970 = time; 97 durationTime = duration2.timeIntervalSince1970; 98 XCTAssertEqualWithAccuracy(time, durationTime, kTimeAccuracy); 99 [duration2 release]; 100 } 101 102 @end 103