Index: remoting/ios/host_refresh_unittest.mm |
diff --git a/remoting/ios/host_refresh_unittest.mm b/remoting/ios/host_refresh_unittest.mm |
new file mode 100644 |
index 0000000000000000000000000000000000000000..54f2ee7c265c034c67aea1060b7278b63a316f78 |
--- /dev/null |
+++ b/remoting/ios/host_refresh_unittest.mm |
@@ -0,0 +1,170 @@ |
+// Copyright 2014 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#if !defined(__has_feature) || !__has_feature(objc_arc) |
+#error "This file requires ARC support." |
+#endif |
+ |
+#import "remoting/ios/host_refresh.h" |
+ |
+#import "base/compiler_specific.h" |
+#import "testing/gtest_mac.h" |
+ |
+#import "remoting/ios/host.h" |
+#import "remoting/ios/host_refresh_test_helper.h" |
+ |
+@interface HostRefreshDelegateTester : NSObject<HostRefreshDelegate> |
+ |
+@property(nonatomic) NSArray* hostList; |
+@property(nonatomic) NSString* errorMessage; |
+ |
+@end |
+ |
+@implementation HostRefreshDelegateTester |
+ |
+@synthesize hostList = _hostList; |
+@synthesize errorMessage = _errorMessage; |
+ |
+- (void)hostListRefresh:(NSArray*)hostList |
+ errorMessage:(NSString*)errorMessage { |
+ _hostList = hostList; |
+ _errorMessage = errorMessage; |
+} |
+ |
+- (bool)receivedHosts { |
+ return (_hostList.count > 0); |
+} |
+ |
+- (bool)receivedErrorMessage { |
+ return (_errorMessage != nil); |
+} |
+ |
+@end |
+ |
+namespace remoting { |
+ |
+namespace { |
+ |
+NSString* kErrorMessageTest = @"TestErrorMessage"; |
+ |
+} // namespace |
+ |
+class HostRefreshTest : public ::testing::Test { |
+ protected: |
+ virtual void SetUp() OVERRIDE { |
+ hostRefreshProcessor_ = [[HostRefresh allocWithZone:nil] init]; |
+ delegateTester_ = [[HostRefreshDelegateTester alloc] init]; |
+ [hostRefreshProcessor_ setDelegate:delegateTester_]; |
+ } |
+ |
+ void CreateHostList(int numHosts) { |
+ [hostRefreshProcessor_ |
+ setJsonData:HostRefreshTestHelper::GetHostList(numHosts)]; |
+ } |
+ |
+ NSError* CreateErrorFromString(NSString* message) { |
+ NSDictionary* errorDictionary = nil; |
+ |
+ if (message != nil) { |
+ errorDictionary = @{NSLocalizedDescriptionKey : message}; |
+ } |
+ |
+ return [[NSError alloc] initWithDomain:@"HostRefreshTest" |
+ code:EPERM |
+ userInfo:errorDictionary]; |
+ } |
+ |
+ HostRefresh* hostRefreshProcessor_; |
+ HostRefreshDelegateTester* delegateTester_; |
+}; |
+ |
+TEST_F(HostRefreshTest, ErrorFormatter) { |
+ [hostRefreshProcessor_ connection:nil |
+ didFailWithError:CreateErrorFromString(nil)]; |
+ ASSERT_FALSE(hostRefreshProcessor_.errorMessage == nil); |
+ |
+ [hostRefreshProcessor_ connection:nil |
+ didFailWithError:CreateErrorFromString(@"")]; |
+ ASSERT_FALSE(hostRefreshProcessor_.errorMessage == nil); |
+ |
+ [hostRefreshProcessor_ connection:nil |
+ didFailWithError:CreateErrorFromString(kErrorMessageTest)]; |
+ ASSERT_TRUE([hostRefreshProcessor_.errorMessage |
+ rangeOfString:kErrorMessageTest].location != NSNotFound); |
+} |
+ |
+TEST_F(HostRefreshTest, JSONParsing) { |
+ // There were no hosts returned |
+ CreateHostList(0); |
+ [hostRefreshProcessor_ connectionDidFinishLoading:nil]; |
+ ASSERT_TRUE(delegateTester_.hostList.count == 0); |
+ |
+ CreateHostList(1); |
+ [hostRefreshProcessor_ connectionDidFinishLoading:nil]; |
+ ASSERT_TRUE(delegateTester_.hostList.count == 1); |
+ |
+ Host* host = static_cast<Host*>([delegateTester_.hostList objectAtIndex:0]); |
+ ASSERT_NSEQ(HostRefreshTestHelper::CreatedTimeTest, host.createdTime); |
+ ASSERT_NSEQ(HostRefreshTestHelper::HostIdTest, host.hostId); |
+ ASSERT_NSEQ(HostRefreshTestHelper::HostNameTest, host.hostName); |
+ ASSERT_NSEQ(HostRefreshTestHelper::HostVersionTest, host.hostVersion); |
+ ASSERT_NSEQ(HostRefreshTestHelper::KindTest, host.kind); |
+ ASSERT_NSEQ(HostRefreshTestHelper::JabberIdTest, host.jabberId); |
+ ASSERT_NSEQ(HostRefreshTestHelper::PublicKeyTest, host.publicKey); |
+ ASSERT_NSEQ(HostRefreshTestHelper::StatusTest, host.status); |
+ ASSERT_NSEQ(HostRefreshTestHelper::UpdatedTimeTest, host.updatedTime); |
+ |
+ CreateHostList(11); |
+ [hostRefreshProcessor_ connectionDidFinishLoading:nil]; |
+ ASSERT_TRUE(delegateTester_.hostList.count == 11); |
+ |
+ // An error in parsing returns no hosts |
+ [hostRefreshProcessor_ |
+ setJsonData: |
+ [NSMutableData |
+ dataWithData: |
+ [@"{\"dataaaaaafa\":{\"kiffffnd\":\"chromoting#hostList\"}}" |
+ dataUsingEncoding:NSUTF8StringEncoding]]]; |
+ [hostRefreshProcessor_ connectionDidFinishLoading:nil]; |
+ ASSERT_TRUE(delegateTester_.hostList.count == 0); |
+} |
+ |
+TEST_F(HostRefreshTest, HostListDelegateNoList) { |
+ // Hosts were not processed at all |
+ [hostRefreshProcessor_ connectionDidFinishLoading:nil]; |
+ ASSERT_FALSE([delegateTester_ receivedHosts]); |
+ ASSERT_TRUE([delegateTester_ receivedErrorMessage]); |
+ |
+ // There were no hosts returned |
+ CreateHostList(0); |
+ [hostRefreshProcessor_ connectionDidFinishLoading:nil]; |
+ ASSERT_FALSE([delegateTester_ receivedHosts]); |
+ ASSERT_TRUE([delegateTester_ receivedErrorMessage]); |
+} |
+ |
+TEST_F(HostRefreshTest, HostListDelegateHasList) { |
+ CreateHostList(1); |
+ [hostRefreshProcessor_ connectionDidFinishLoading:nil]; |
+ ASSERT_TRUE([delegateTester_ receivedHosts]); |
+ ASSERT_FALSE([delegateTester_ receivedErrorMessage]); |
+} |
+ |
+TEST_F(HostRefreshTest, HostListDelegateHasListWithError) { |
+ CreateHostList(1); |
+ |
+ [hostRefreshProcessor_ connection:nil |
+ didFailWithError:CreateErrorFromString(kErrorMessageTest)]; |
+ |
+ [hostRefreshProcessor_ connectionDidFinishLoading:nil]; |
+ ASSERT_TRUE([delegateTester_ receivedHosts]); |
+ ASSERT_TRUE([delegateTester_ receivedErrorMessage]); |
+} |
+ |
+TEST_F(HostRefreshTest, ConnectionFailed) { |
+ [hostRefreshProcessor_ connection:nil didFailWithError:nil]; |
+ ASSERT_FALSE([delegateTester_ receivedHosts]); |
+ ASSERT_TRUE([delegateTester_ receivedErrorMessage]); |
+} |
+ |
+} // namespace remoting |