Upstream version 9.37.197.0
[platform/framework/web/crosswalk.git] / src / remoting / ios / host_refresh_unittest.mm
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #if !defined(__has_feature) || !__has_feature(objc_arc)
6 #error "This file requires ARC support."
7 #endif
8
9 #import "remoting/ios/host_refresh.h"
10
11 #import "base/compiler_specific.h"
12 #import "testing/gtest_mac.h"
13
14 #import "remoting/ios/host.h"
15 #import "remoting/ios/host_refresh_test_helper.h"
16
17 @interface HostRefreshDelegateTester : NSObject<HostRefreshDelegate>
18
19 @property(nonatomic) NSArray* hostList;
20 @property(nonatomic) NSString* errorMessage;
21
22 @end
23
24 @implementation HostRefreshDelegateTester
25
26 @synthesize hostList = _hostList;
27 @synthesize errorMessage = _errorMessage;
28
29 - (void)hostListRefresh:(NSArray*)hostList
30            errorMessage:(NSString*)errorMessage {
31   _hostList = hostList;
32   _errorMessage = errorMessage;
33 }
34
35 - (bool)receivedHosts {
36   return (_hostList.count > 0);
37 }
38
39 - (bool)receivedErrorMessage {
40   return (_errorMessage != nil);
41 }
42
43 @end
44
45 namespace remoting {
46
47 namespace {
48
49 NSString* kErrorMessageTest = @"TestErrorMessage";
50
51 }  // namespace
52
53 class HostRefreshTest : public ::testing::Test {
54  protected:
55   virtual void SetUp() OVERRIDE {
56     hostRefreshProcessor_ = [[HostRefresh allocWithZone:nil] init];
57     delegateTester_ = [[HostRefreshDelegateTester alloc] init];
58     [hostRefreshProcessor_ setDelegate:delegateTester_];
59   }
60
61   void CreateHostList(int numHosts) {
62     [hostRefreshProcessor_
63         setJsonData:HostRefreshTestHelper::GetHostList(numHosts)];
64   }
65
66   NSError* CreateErrorFromString(NSString* message) {
67     NSDictionary* errorDictionary = nil;
68
69     if (message != nil) {
70       errorDictionary = @{NSLocalizedDescriptionKey : message};
71     }
72
73     return [[NSError alloc] initWithDomain:@"HostRefreshTest"
74                                       code:EPERM
75                                   userInfo:errorDictionary];
76   }
77
78   HostRefresh* hostRefreshProcessor_;
79   HostRefreshDelegateTester* delegateTester_;
80 };
81
82 TEST_F(HostRefreshTest, ErrorFormatter) {
83   [hostRefreshProcessor_ connection:nil
84                    didFailWithError:CreateErrorFromString(nil)];
85   ASSERT_FALSE(hostRefreshProcessor_.errorMessage == nil);
86
87   [hostRefreshProcessor_ connection:nil
88                    didFailWithError:CreateErrorFromString(@"")];
89   ASSERT_FALSE(hostRefreshProcessor_.errorMessage == nil);
90
91   [hostRefreshProcessor_ connection:nil
92                    didFailWithError:CreateErrorFromString(kErrorMessageTest)];
93   ASSERT_TRUE([hostRefreshProcessor_.errorMessage
94                   rangeOfString:kErrorMessageTest].location != NSNotFound);
95 }
96
97 TEST_F(HostRefreshTest, JSONParsing) {
98   // There were no hosts returned
99   CreateHostList(0);
100   [hostRefreshProcessor_ connectionDidFinishLoading:nil];
101   ASSERT_TRUE(delegateTester_.hostList.count == 0);
102
103   CreateHostList(1);
104   [hostRefreshProcessor_ connectionDidFinishLoading:nil];
105   ASSERT_TRUE(delegateTester_.hostList.count == 1);
106
107   Host* host = static_cast<Host*>([delegateTester_.hostList objectAtIndex:0]);
108   ASSERT_NSEQ(HostRefreshTestHelper::CreatedTimeTest, host.createdTime);
109   ASSERT_NSEQ(HostRefreshTestHelper::HostIdTest, host.hostId);
110   ASSERT_NSEQ(HostRefreshTestHelper::HostNameTest, host.hostName);
111   ASSERT_NSEQ(HostRefreshTestHelper::HostVersionTest, host.hostVersion);
112   ASSERT_NSEQ(HostRefreshTestHelper::KindTest, host.kind);
113   ASSERT_NSEQ(HostRefreshTestHelper::JabberIdTest, host.jabberId);
114   ASSERT_NSEQ(HostRefreshTestHelper::PublicKeyTest, host.publicKey);
115   ASSERT_NSEQ(HostRefreshTestHelper::StatusTest, host.status);
116   ASSERT_NSEQ(HostRefreshTestHelper::UpdatedTimeTest, host.updatedTime);
117
118   CreateHostList(11);
119   [hostRefreshProcessor_ connectionDidFinishLoading:nil];
120   ASSERT_TRUE(delegateTester_.hostList.count == 11);
121
122   // An error in parsing returns no hosts
123   [hostRefreshProcessor_
124       setJsonData:
125           [NSMutableData
126               dataWithData:
127                   [@"{\"dataaaaaafa\":{\"kiffffnd\":\"chromoting#hostList\"}}"
128                       dataUsingEncoding:NSUTF8StringEncoding]]];
129   [hostRefreshProcessor_ connectionDidFinishLoading:nil];
130   ASSERT_TRUE(delegateTester_.hostList.count == 0);
131 }
132
133 TEST_F(HostRefreshTest, HostListDelegateNoList) {
134   // Hosts were not processed at all
135   [hostRefreshProcessor_ connectionDidFinishLoading:nil];
136   ASSERT_FALSE([delegateTester_ receivedHosts]);
137   ASSERT_TRUE([delegateTester_ receivedErrorMessage]);
138
139   // There were no hosts returned
140   CreateHostList(0);
141   [hostRefreshProcessor_ connectionDidFinishLoading:nil];
142   ASSERT_FALSE([delegateTester_ receivedHosts]);
143   ASSERT_TRUE([delegateTester_ receivedErrorMessage]);
144 }
145
146 TEST_F(HostRefreshTest, HostListDelegateHasList) {
147   CreateHostList(1);
148   [hostRefreshProcessor_ connectionDidFinishLoading:nil];
149   ASSERT_TRUE([delegateTester_ receivedHosts]);
150   ASSERT_FALSE([delegateTester_ receivedErrorMessage]);
151 }
152
153 TEST_F(HostRefreshTest, HostListDelegateHasListWithError) {
154   CreateHostList(1);
155
156   [hostRefreshProcessor_ connection:nil
157                    didFailWithError:CreateErrorFromString(kErrorMessageTest)];
158
159   [hostRefreshProcessor_ connectionDidFinishLoading:nil];
160   ASSERT_TRUE([delegateTester_ receivedHosts]);
161   ASSERT_TRUE([delegateTester_ receivedErrorMessage]);
162 }
163
164 TEST_F(HostRefreshTest, ConnectionFailed) {
165   [hostRefreshProcessor_ connection:nil didFailWithError:nil];
166   ASSERT_FALSE([delegateTester_ receivedHosts]);
167   ASSERT_TRUE([delegateTester_ receivedErrorMessage]);
168 }
169
170 }  // namespace remoting