将网络状态监控和定位服务调用封装到YHAssemblyAssistant中。更新相关测试用例。Review by 阿瑟。
Showing
10 changed files
with
279 additions
and
247 deletions
@@ -19,7 +19,7 @@ | @@ -19,7 +19,7 @@ | ||
19 | <key>CFBundleSignature</key> | 19 | <key>CFBundleSignature</key> |
20 | <string>????</string> | 20 | <string>????</string> |
21 | <key>CFBundleVersion</key> | 21 | <key>CFBundleVersion</key> |
22 | - <string>1</string> | 22 | + <string>1.0.0.20150427</string> |
23 | <key>LSRequiresIPhoneOS</key> | 23 | <key>LSRequiresIPhoneOS</key> |
24 | <true/> | 24 | <true/> |
25 | <key>NSLocationAlwaysUsageDescription</key> | 25 | <key>NSLocationAlwaysUsageDescription</key> |
@@ -10,13 +10,18 @@ | @@ -10,13 +10,18 @@ | ||
10 | #import <CoreLocation/CoreLocation.h> | 10 | #import <CoreLocation/CoreLocation.h> |
11 | #import "YHNetworkAssistant.h" | 11 | #import "YHNetworkAssistant.h" |
12 | #import "YHAnalyItemData.h" | 12 | #import "YHAnalyItemData.h" |
13 | -//#import "YHDevice.h" | ||
14 | -//#import "YHStatus.h" | 13 | + |
15 | 14 | ||
16 | //阀值 | 15 | //阀值 |
17 | #define kMaxLocalEventsCount 3000 // 本地持久化event最大条数 | 16 | #define kMaxLocalEventsCount 3000 // 本地持久化event最大条数 |
18 | #define kMaxLocalRecoderFileSize (1024 * 300) // 本地持久化文件大小(300KB) | 17 | #define kMaxLocalRecoderFileSize (1024 * 300) // 本地持久化文件大小(300KB) |
19 | 18 | ||
19 | +extern NSString * const kNetWorkStatusUnknow; | ||
20 | +extern NSString * const kNetWorkStatusWIFI; | ||
21 | +extern NSString * const kNetWorkStatus2G; | ||
22 | +extern NSString * const kNetWorkStatus3G; | ||
23 | +extern NSString * const kNetWorkStatus4G; | ||
24 | + | ||
20 | extern NSString * const JsonKeyDataTypeDevice; | 25 | extern NSString * const JsonKeyDataTypeDevice; |
21 | extern NSString * const JsonKeyDataTypeStatus; | 26 | extern NSString * const JsonKeyDataTypeStatus; |
22 | extern NSString * const JsonKeyDataTypeEvents; | 27 | extern NSString * const JsonKeyDataTypeEvents; |
@@ -26,7 +31,7 @@ extern NSString * const JsonKeyDataTypeErrors; | @@ -26,7 +31,7 @@ extern NSString * const JsonKeyDataTypeErrors; | ||
26 | 用于组装数据 | 31 | 用于组装数据 |
27 | */ | 32 | */ |
28 | 33 | ||
29 | -@interface YHAssemblyAssistant : NSObject | 34 | +@interface YHAssemblyAssistant : NSObject <CLLocationManagerDelegate> |
30 | 35 | ||
31 | + (instancetype)sharedInstance; | 36 | + (instancetype)sharedInstance; |
32 | 37 | ||
@@ -40,14 +45,8 @@ extern NSString * const JsonKeyDataTypeErrors; | @@ -40,14 +45,8 @@ extern NSString * const JsonKeyDataTypeErrors; | ||
40 | 45 | ||
41 | - (void)prepareImmediUploadDic:(NSString *)appId sessionId:(NSString *)sessionId; | 46 | - (void)prepareImmediUploadDic:(NSString *)appId sessionId:(NSString *)sessionId; |
42 | 47 | ||
43 | -- (void)updateImmediUploadDic; | ||
44 | - | ||
45 | - (void)uploadDiskData; | 48 | - (void)uploadDiskData; |
46 | 49 | ||
47 | - (void)uploadImmedilyWithEvent:(YHAnalyItemData *)itemData; | 50 | - (void)uploadImmedilyWithEvent:(YHAnalyItemData *)itemData; |
48 | 51 | ||
49 | -- (BOOL)updateLocation:(CLLocation *)location; | ||
50 | - | ||
51 | -- (BOOL)updateNetWorkStatus:(NSString *)status; | ||
52 | - | ||
53 | @end | 52 | @end |
@@ -6,6 +6,9 @@ | @@ -6,6 +6,9 @@ | ||
6 | // Copyright (c) 2015年 YOHO. All rights reserved. | 6 | // Copyright (c) 2015年 YOHO. All rights reserved. |
7 | // | 7 | // |
8 | 8 | ||
9 | +#import <CoreTelephony/CTCarrier.h> | ||
10 | +#import <CoreTelephony/CTTelephonyNetworkInfo.h> | ||
11 | +#import "Reachability.h" | ||
9 | #import "YHAssemblyAssistant.h" | 12 | #import "YHAssemblyAssistant.h" |
10 | //#import "YHErrorFactory.h" | 13 | //#import "YHErrorFactory.h" |
11 | //#import "YHEventFactory.h" | 14 | //#import "YHEventFactory.h" |
@@ -21,6 +24,12 @@ | @@ -21,6 +24,12 @@ | ||
21 | #define kPathLogSystem [kPathCaches stringByAppendingPathComponent:@"YHLogSystem"] | 24 | #define kPathLogSystem [kPathCaches stringByAppendingPathComponent:@"YHLogSystem"] |
22 | #define kYASApiMethod @"yas_mobile" | 25 | #define kYASApiMethod @"yas_mobile" |
23 | 26 | ||
27 | +NSString * const kNetWorkStatusUnknow = @"0"; | ||
28 | +NSString * const kNetWorkStatusWIFI = @"1"; | ||
29 | +NSString * const kNetWorkStatus2G = @"2"; | ||
30 | +NSString * const kNetWorkStatus3G = @"3"; | ||
31 | +NSString * const kNetWorkStatus4G = @"4"; | ||
32 | + | ||
24 | NSString * const JsonKeyDataTypeDevice = @"device"; | 33 | NSString * const JsonKeyDataTypeDevice = @"device"; |
25 | NSString * const JsonKeyDataTypeStatus = @"status"; | 34 | NSString * const JsonKeyDataTypeStatus = @"status"; |
26 | NSString * const JsonKeyDataTypeEvents = @"events"; | 35 | NSString * const JsonKeyDataTypeEvents = @"events"; |
@@ -39,18 +48,58 @@ static dispatch_queue_t persisting_queue() { | @@ -39,18 +48,58 @@ static dispatch_queue_t persisting_queue() { | ||
39 | 48 | ||
40 | @interface YHAssemblyAssistant () | 49 | @interface YHAssemblyAssistant () |
41 | 50 | ||
51 | +/** | ||
52 | + * 定位服务 | ||
53 | + */ | ||
54 | +@property (strong, nonatomic) CLLocationManager *locationManager; | ||
55 | +/** | ||
56 | + * 设备信息 | ||
57 | + */ | ||
42 | @property (strong, nonatomic) YHDevice *device; | 58 | @property (strong, nonatomic) YHDevice *device; |
59 | +/** | ||
60 | + * 当前状态信息 | ||
61 | + */ | ||
43 | @property (strong, nonatomic) YHStatus *currentStatus; | 62 | @property (strong, nonatomic) YHStatus *currentStatus; |
44 | -@property (strong, nonatomic) NSMutableDictionary *immediUploadItemDic; // 用于立即发送策略下(device信息是相同的) | ||
45 | -@property (assign, nonatomic) NSUInteger allEventsCount; // 本地持久化event的条数 | 63 | +/** |
64 | + * 用于立即发送策略下(device信息是相同的) | ||
65 | + */ | ||
66 | +@property (strong, nonatomic) NSMutableDictionary *immediUploadItemDic; | ||
67 | +/** | ||
68 | + * 本地持久化event的条数 | ||
69 | + */ | ||
70 | +@property (assign, nonatomic) NSUInteger allEventsCount; | ||
71 | +/** | ||
72 | + * 日志文件存储路径 | ||
73 | + */ | ||
46 | @property (strong, nonatomic) NSString *eventFilePath; | 74 | @property (strong, nonatomic) NSString *eventFilePath; |
75 | +/** | ||
76 | + * 日志文件名称 | ||
77 | + */ | ||
47 | @property (strong, nonatomic) NSString *eventFileName; | 78 | @property (strong, nonatomic) NSString *eventFileName; |
79 | +/** | ||
80 | + * 文件管理服务 | ||
81 | + */ | ||
48 | @property (strong, nonatomic) NSFileManager *fileManager; | 82 | @property (strong, nonatomic) NSFileManager *fileManager; |
49 | 83 | ||
84 | + | ||
85 | +// 启动定位服务 | ||
86 | +- (void)startLocationService; | ||
87 | +// 开启网络状态监测 | ||
88 | +- (void)startObserverNetworkReachabilityStatus; | ||
89 | +// 将一个事件写入到文件 | ||
50 | - (BOOL)writeEventToFile:(YHEvent *)eventData; | 90 | - (BOOL)writeEventToFile:(YHEvent *)eventData; |
91 | +// 将一个错误写入到文件 | ||
51 | - (BOOL)writeErrorToFile:(YHError *)errorData; | 92 | - (BOOL)writeErrorToFile:(YHError *)errorData; |
93 | +// 当触发预设的条件时,自动上传数据 | ||
52 | - (void)autoUploadData; | 94 | - (void)autoUploadData; |
95 | +// 删除本地持久化文件 | ||
53 | - (void)removeLocalFile; | 96 | - (void)removeLocalFile; |
97 | +// 更新网络状态 | ||
98 | +- (BOOL)updateNetWorkStatus:(NSString *)status; | ||
99 | +// 更新位置信息 | ||
100 | +- (BOOL)updateLocation:(CLLocation *)location; | ||
101 | +// 更新立即上传信息 | ||
102 | +- (void)updateImmediUploadDic; | ||
54 | 103 | ||
55 | @end | 104 | @end |
56 | 105 | ||
@@ -110,6 +159,18 @@ static dispatch_queue_t persisting_queue() { | @@ -110,6 +159,18 @@ static dispatch_queue_t persisting_queue() { | ||
110 | return _eventFileName; | 159 | return _eventFileName; |
111 | } | 160 | } |
112 | 161 | ||
162 | +- (CLLocationManager *)locationManager | ||
163 | +{ | ||
164 | + if (!_locationManager) { | ||
165 | + _locationManager = [[CLLocationManager alloc]init]; | ||
166 | + _locationManager.delegate = self; | ||
167 | + _locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters; // 精度越高,越费电,根据需要设定 | ||
168 | + _locationManager.distanceFilter = 1000; // 位置移动1000米,发一次更新消息 | ||
169 | + } | ||
170 | + | ||
171 | + return _locationManager; | ||
172 | +} | ||
173 | + | ||
113 | #pragma mark - public method | 174 | #pragma mark - public method |
114 | 175 | ||
115 | - (BOOL)canPersisting | 176 | - (BOOL)canPersisting |
@@ -141,21 +202,10 @@ static dispatch_queue_t persisting_queue() { | @@ -141,21 +202,10 @@ static dispatch_queue_t persisting_queue() { | ||
141 | 202 | ||
142 | // 设置status | 203 | // 设置status |
143 | [self.immediUploadItemDic setObject: [[NSMutableArray alloc]initWithObjects:self.currentStatus.jsonDictionary, nil] forKey:JsonKeyDataTypeStatus]; | 204 | [self.immediUploadItemDic setObject: [[NSMutableArray alloc]initWithObjects:self.currentStatus.jsonDictionary, nil] forKey:JsonKeyDataTypeStatus]; |
144 | - | ||
145 | -} | ||
146 | - | ||
147 | -- (void)updateImmediUploadDic | ||
148 | -{ | ||
149 | - NSMutableArray *allStatus = [self.immediUploadItemDic objectForKey:JsonKeyDataTypeStatus]; | ||
150 | - if ([allStatus count]) { | ||
151 | - [allStatus replaceObjectAtIndex:0 withObject:self.currentStatus.jsonDictionary]; | ||
152 | - [self.immediUploadItemDic setObject:allStatus forKey:JsonKeyDataTypeStatus]; | ||
153 | - } else { | ||
154 | - NSException *exception = [NSException exceptionWithName:NSGenericException | ||
155 | - reason:@"appId and sessionId do not be initialized. Please use prepareImmediUploadDic:sessionId: first." | ||
156 | - userInfo:nil]; | ||
157 | - [exception raise]; | ||
158 | - } | 205 | + |
206 | + [self startObserverNetworkReachabilityStatus]; | ||
207 | + | ||
208 | + [self startLocationService]; | ||
159 | } | 209 | } |
160 | 210 | ||
161 | #pragma mark - 持久化数据 | 211 | #pragma mark - 持久化数据 |
@@ -266,6 +316,93 @@ static dispatch_queue_t persisting_queue() { | @@ -266,6 +316,93 @@ static dispatch_queue_t persisting_queue() { | ||
266 | } | 316 | } |
267 | } | 317 | } |
268 | 318 | ||
319 | +#pragma mark - private method | ||
320 | + | ||
321 | +// 添加网络监测回调block | ||
322 | +- (void)startObserverNetworkReachabilityStatus | ||
323 | +{ | ||
324 | + /** | ||
325 | + CTRadioAccessTechnologyGPRS - 2G | ||
326 | + CTRadioAccessTechnologyEdge - 2G (sometimes called 2.5G) | ||
327 | + CTRadioAccessTechnologyWCDMA - 3G | ||
328 | + CTRadioAccessTechnologyHSDPA - 3G (sometimes called 3.5G) | ||
329 | + CTRadioAccessTechnologyHSUPA - 3G | ||
330 | + CTRadioAccessTechnologyCDMA1x - 2G | ||
331 | + CTRadioAccessTechnologyCDMAEVDORev0 - 3G | ||
332 | + CTRadioAccessTechnologyCDMAEVDORevA - 3G | ||
333 | + CTRadioAccessTechnologyCDMAEVDORevB - 3G | ||
334 | + CTRadioAccessTechnologyeHRPD - 3G (or 3.5 - eHRPD is to allow migration from CDMA EVDO to LTE) | ||
335 | + CTRadioAccessTechnologyLTE - 4G (allowed to be called 4G by the ITU as mentioend above) | ||
336 | + */ | ||
337 | + [[YHNetworkAssistant sharedInstance] addReachabilityChangedHandler:^(AFNetworkReachabilityStatus networkStatus) { | ||
338 | + NSString *net = kNetWorkStatusUnknow; | ||
339 | + | ||
340 | + CTTelephonyNetworkInfo *netInfo = [[CTTelephonyNetworkInfo alloc] init]; | ||
341 | + switch (networkStatus) { | ||
342 | + case AFNetworkReachabilityStatusUnknown: | ||
343 | + case AFNetworkReachabilityStatusNotReachable: | ||
344 | + net = kNetWorkStatusUnknow; | ||
345 | + break; | ||
346 | + | ||
347 | + case AFNetworkReachabilityStatusReachableViaWWAN: | ||
348 | + { | ||
349 | + if (NSFoundationVersionNumber >= NSFoundationVersionNumber_iOS_7_0) { | ||
350 | + if ([netInfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyGPRS]|| [netInfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyEdge]) { | ||
351 | + net = kNetWorkStatus2G; | ||
352 | + } else if([netInfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyWCDMA]|| [netInfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyHSDPA] || [netInfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyHSUPA]|| [netInfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyeHRPD]) { | ||
353 | + net = kNetWorkStatus3G; | ||
354 | + } else if([netInfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyLTE]) { | ||
355 | + net = kNetWorkStatus4G; | ||
356 | + } else { | ||
357 | + net = kNetWorkStatusUnknow; | ||
358 | + } | ||
359 | + } else { | ||
360 | + net = kNetWorkStatusUnknow; | ||
361 | + } | ||
362 | + } | ||
363 | + break; | ||
364 | + case AFNetworkReachabilityStatusReachableViaWiFi: | ||
365 | + net = kNetWorkStatusWIFI; | ||
366 | + break; | ||
367 | + | ||
368 | + default: | ||
369 | + break; | ||
370 | + } | ||
371 | + | ||
372 | + if ([self updateNetWorkStatus:net]) { | ||
373 | + [self updateImmediUploadDic]; | ||
374 | + } | ||
375 | + }]; | ||
376 | +} | ||
377 | + | ||
378 | +// 启动定位服务 | ||
379 | +- (void)startLocationService | ||
380 | +{ | ||
381 | + //判断用户定位服务是否开启 | ||
382 | + if ([CLLocationManager locationServicesEnabled]) { | ||
383 | + [self.locationManager startUpdatingLocation]; | ||
384 | + } else { | ||
385 | + //不能定位用户的位置 | ||
386 | + //1.提醒用户检查当前的网络状况 | ||
387 | + //2.提醒用户打开定位开关 | ||
388 | + } | ||
389 | +} | ||
390 | + | ||
391 | +// 更新网络状态 | ||
392 | +- (BOOL)updateNetWorkStatus:(NSString *)status | ||
393 | +{ | ||
394 | + if (status == nil || [status length] == 0) { | ||
395 | + return NO; | ||
396 | + } | ||
397 | + | ||
398 | + if ([status isEqualToString:self.currentStatus.net]) { | ||
399 | + return NO; | ||
400 | + } | ||
401 | + | ||
402 | + self.currentStatus.net = status; | ||
403 | + return YES; | ||
404 | +} | ||
405 | + | ||
269 | - (BOOL)updateLocation:(CLLocation *)location | 406 | - (BOOL)updateLocation:(CLLocation *)location |
270 | { | 407 | { |
271 | if (location == nil || ![location isKindOfClass:[CLLocation class]]) { | 408 | if (location == nil || ![location isKindOfClass:[CLLocation class]]) { |
@@ -294,22 +431,21 @@ static dispatch_queue_t persisting_queue() { | @@ -294,22 +431,21 @@ static dispatch_queue_t persisting_queue() { | ||
294 | return YES; | 431 | return YES; |
295 | } | 432 | } |
296 | 433 | ||
297 | -- (BOOL)updateNetWorkStatus:(NSString *)status | 434 | +// 更新立即上传信息 |
435 | +- (void)updateImmediUploadDic | ||
298 | { | 436 | { |
299 | - if (status == nil || [status length] == 0) { | ||
300 | - return NO; | ||
301 | - } | ||
302 | - | ||
303 | - if ([status isEqualToString:self.currentStatus.net]) { | ||
304 | - return NO; | 437 | + NSMutableArray *allStatus = [self.immediUploadItemDic objectForKey:JsonKeyDataTypeStatus]; |
438 | + if ([allStatus count]) { | ||
439 | + [allStatus replaceObjectAtIndex:0 withObject:self.currentStatus.jsonDictionary]; | ||
440 | + [self.immediUploadItemDic setObject:allStatus forKey:JsonKeyDataTypeStatus]; | ||
441 | + } else { | ||
442 | + NSException *exception = [NSException exceptionWithName:NSGenericException | ||
443 | + reason:@"appId and sessionId do not be initialized. Please use prepareImmediUploadDic:sessionId: first." | ||
444 | + userInfo:nil]; | ||
445 | + [exception raise]; | ||
305 | } | 446 | } |
306 | - | ||
307 | - self.currentStatus.net = status; | ||
308 | - return YES; | ||
309 | } | 447 | } |
310 | 448 | ||
311 | -#pragma mark - private method | ||
312 | - | ||
313 | // 将一个事件写入到文件 | 449 | // 将一个事件写入到文件 |
314 | - (BOOL)writeEventToFile:(YHEvent *)event | 450 | - (BOOL)writeEventToFile:(YHEvent *)event |
315 | { | 451 | { |
@@ -452,4 +588,51 @@ static dispatch_queue_t persisting_queue() { | @@ -452,4 +588,51 @@ static dispatch_queue_t persisting_queue() { | ||
452 | self.allEventsCount = 0; | 588 | self.allEventsCount = 0; |
453 | } | 589 | } |
454 | 590 | ||
591 | +#pragma mark - CLLocationManagerDelegate | ||
592 | + | ||
593 | +// 返回定位服务认证状态的委托方法 | ||
594 | +- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status | ||
595 | +{ | ||
596 | + switch (status) { | ||
597 | + case kCLAuthorizationStatusNotDetermined: { | ||
598 | + if ([manager respondsToSelector:@selector(requestAlwaysAuthorization)]) { | ||
599 | + [manager requestAlwaysAuthorization]; | ||
600 | + } | ||
601 | + } | ||
602 | + break; | ||
603 | + case kCLAuthorizationStatusRestricted: | ||
604 | + //定位服务无法使用,请开启手机定位服务 | ||
605 | + break; | ||
606 | + case kCLAuthorizationStatusDenied: | ||
607 | + //程序定位服务未开启, 您需要去设置界面启用我们App定位服务 | ||
608 | + break; | ||
609 | + default: | ||
610 | + break; | ||
611 | + } | ||
612 | +} | ||
613 | + | ||
614 | +//协议中的方法,作用是每当位置发生更新时会调用的委托方法 | ||
615 | +- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations | ||
616 | +{ | ||
617 | + //locations数组里边存放的是CLLocation对象,一个CLLocation对象就代表着一个位置 | ||
618 | + CLLocation *newLocation = [locations firstObject]; | ||
619 | + | ||
620 | + if ([self updateLocation:newLocation]) { | ||
621 | + [self updateImmediUploadDic]; | ||
622 | + } | ||
623 | +} | ||
624 | + | ||
625 | +//当位置获取或更新失败会调用的方法 | ||
626 | +- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error | ||
627 | +{ | ||
628 | + NSString *errorMsg = nil; | ||
629 | + if ([error code] == kCLErrorDenied) { | ||
630 | + errorMsg = @"定位功能访问被拒绝"; | ||
631 | + } | ||
632 | + if ([error code] == kCLErrorLocationUnknown) { | ||
633 | + errorMsg = @"获取位置信息失败"; | ||
634 | + } | ||
635 | + NSLog(@"%@", errorMsg); | ||
636 | +} | ||
637 | + | ||
455 | @end | 638 | @end |
@@ -7,7 +7,6 @@ | @@ -7,7 +7,6 @@ | ||
7 | // | 7 | // |
8 | 8 | ||
9 | #import <Foundation/Foundation.h> | 9 | #import <Foundation/Foundation.h> |
10 | -#import <CoreLocation/CoreLocation.h> | ||
11 | #import "YHError.h" | 10 | #import "YHError.h" |
12 | #import "YHEvent.h" | 11 | #import "YHEvent.h" |
13 | 12 | ||
@@ -23,7 +22,7 @@ typedef enum _YHLogStrategy { | @@ -23,7 +22,7 @@ typedef enum _YHLogStrategy { | ||
23 | LogStrategyImmedi // 立即发送 | 22 | LogStrategyImmedi // 立即发送 |
24 | } YHLogStrategy; | 23 | } YHLogStrategy; |
25 | 24 | ||
26 | -@interface YH_Analytics : NSObject <CLLocationManagerDelegate> | 25 | +@interface YH_Analytics : NSObject |
27 | /** | 26 | /** |
28 | * 获取统计对象的实例 | 27 | * 获取统计对象的实例 |
29 | */ | 28 | */ |
@@ -6,34 +6,20 @@ | @@ -6,34 +6,20 @@ | ||
6 | // Copyright (c) 2015年 YOHO. All rights reserved. | 6 | // Copyright (c) 2015年 YOHO. All rights reserved. |
7 | // | 7 | // |
8 | 8 | ||
9 | -#import <CoreTelephony/CTCarrier.h> | ||
10 | -#import <CoreTelephony/CTTelephonyNetworkInfo.h> | ||
11 | //#import "YHErrorFactory.h" | 9 | //#import "YHErrorFactory.h" |
12 | //#import "YHEventFactory.h" | 10 | //#import "YHEventFactory.h" |
13 | //#import "YHDeviceFactory.h" | 11 | //#import "YHDeviceFactory.h" |
14 | //#import "YHStatusFactory.h" | 12 | //#import "YHStatusFactory.h" |
15 | #import "YH_Analytics.h" | 13 | #import "YH_Analytics.h" |
16 | #import "NSString+YHAnalytics.h" | 14 | #import "NSString+YHAnalytics.h" |
17 | -#import "Reachability.h" | ||
18 | #import "YHCrashReporter.h" | 15 | #import "YHCrashReporter.h" |
19 | #import "YHAssemblyAssistant.h" | 16 | #import "YHAssemblyAssistant.h" |
20 | #import "OpenUDID.h" | 17 | #import "OpenUDID.h" |
21 | 18 | ||
22 | 19 | ||
23 | -#define kNetWorkStatusUnknow @"0" | ||
24 | -#define kNetWorkStatusWIFI @"1" | ||
25 | -#define kNetWorkStatus2G @"2" | ||
26 | -#define kNetWorkStatus3G @"3" | ||
27 | -#define kNetWorkStatus4G @"4" | ||
28 | - | ||
29 | - | ||
30 | @interface YH_Analytics () | 20 | @interface YH_Analytics () |
31 | 21 | ||
32 | /** | 22 | /** |
33 | - * 定位服务 | ||
34 | - */ | ||
35 | -@property (strong, nonatomic) CLLocationManager *locationManager; | ||
36 | -/** | ||
37 | * 应用ID | 23 | * 应用ID |
38 | */ | 24 | */ |
39 | @property (strong, nonatomic) NSString *appId; | 25 | @property (strong, nonatomic) NSString *appId; |
@@ -68,8 +54,6 @@ | @@ -68,8 +54,6 @@ | ||
68 | 54 | ||
69 | 55 | ||
70 | - (NSString *)timestamp; | 56 | - (NSString *)timestamp; |
71 | -- (void)startObserverNetworkReachabilityStatus; | ||
72 | -- (void)startLocationService; | ||
73 | - (void)registerCrashReporter; | 57 | - (void)registerCrashReporter; |
74 | - (void)registerAppWillEnterForegroundNotification; | 58 | - (void)registerAppWillEnterForegroundNotification; |
75 | - (void)resetSession; | 59 | - (void)resetSession; |
@@ -136,89 +120,8 @@ | @@ -136,89 +120,8 @@ | ||
136 | return _session; | 120 | return _session; |
137 | } | 121 | } |
138 | 122 | ||
139 | -- (CLLocationManager *)locationManager | ||
140 | -{ | ||
141 | - if (!_locationManager) { | ||
142 | - _locationManager = [[CLLocationManager alloc]init]; | ||
143 | - _locationManager.delegate = self; | ||
144 | - _locationManager.desiredAccuracy = kCLLocationAccuracyBest; | ||
145 | - _locationManager.distanceFilter = 100; | ||
146 | - } | ||
147 | - | ||
148 | - return _locationManager; | ||
149 | -} | ||
150 | - | ||
151 | #pragma mark - Private Method | 123 | #pragma mark - Private Method |
152 | 124 | ||
153 | -// 添加网络监测回调block | ||
154 | -- (void)startObserverNetworkReachabilityStatus | ||
155 | -{ | ||
156 | - /** | ||
157 | - CTRadioAccessTechnologyGPRS - 2G | ||
158 | - CTRadioAccessTechnologyEdge - 2G (sometimes called 2.5G) | ||
159 | - CTRadioAccessTechnologyWCDMA - 3G | ||
160 | - CTRadioAccessTechnologyHSDPA - 3G (sometimes called 3.5G) | ||
161 | - CTRadioAccessTechnologyHSUPA - 3G | ||
162 | - CTRadioAccessTechnologyCDMA1x - 2G | ||
163 | - CTRadioAccessTechnologyCDMAEVDORev0 - 3G | ||
164 | - CTRadioAccessTechnologyCDMAEVDORevA - 3G | ||
165 | - CTRadioAccessTechnologyCDMAEVDORevB - 3G | ||
166 | - CTRadioAccessTechnologyeHRPD - 3G (or 3.5 - eHRPD is to allow migration from CDMA EVDO to LTE) | ||
167 | - CTRadioAccessTechnologyLTE - 4G (allowed to be called 4G by the ITU as mentioend above) | ||
168 | - */ | ||
169 | - [[YHNetworkAssistant sharedInstance] addReachabilityChangedHandler:^(AFNetworkReachabilityStatus networkStatus) { | ||
170 | - NSString *net = kNetWorkStatusUnknow; | ||
171 | - | ||
172 | - CTTelephonyNetworkInfo *netInfo = [[CTTelephonyNetworkInfo alloc] init]; | ||
173 | - switch (networkStatus) { | ||
174 | - case AFNetworkReachabilityStatusUnknown: | ||
175 | - case AFNetworkReachabilityStatusNotReachable: | ||
176 | - net = kNetWorkStatusUnknow; | ||
177 | - break; | ||
178 | - | ||
179 | - case AFNetworkReachabilityStatusReachableViaWWAN: | ||
180 | - { | ||
181 | - if (NSFoundationVersionNumber >= NSFoundationVersionNumber_iOS_7_0) { | ||
182 | - if ([netInfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyGPRS]|| [netInfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyEdge]) { | ||
183 | - net = kNetWorkStatus2G; | ||
184 | - } else if([netInfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyWCDMA]|| [netInfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyHSDPA] || [netInfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyHSUPA]|| [netInfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyeHRPD]) { | ||
185 | - net = kNetWorkStatus3G; | ||
186 | - } else if([netInfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyLTE]) { | ||
187 | - net = kNetWorkStatus4G; | ||
188 | - } else { | ||
189 | - net = kNetWorkStatusUnknow; | ||
190 | - } | ||
191 | - } else { | ||
192 | - net = kNetWorkStatusUnknow; | ||
193 | - } | ||
194 | - } | ||
195 | - break; | ||
196 | - case AFNetworkReachabilityStatusReachableViaWiFi: | ||
197 | - net = kNetWorkStatusWIFI; | ||
198 | - break; | ||
199 | - | ||
200 | - default: | ||
201 | - break; | ||
202 | - } | ||
203 | - | ||
204 | - if ([[YHAssemblyAssistant sharedInstance] updateNetWorkStatus:net]) { | ||
205 | - [[YHAssemblyAssistant sharedInstance] updateImmediUploadDic]; | ||
206 | - } | ||
207 | - }]; | ||
208 | -} | ||
209 | - | ||
210 | -// 启动定位服务 | ||
211 | -- (void)startLocationService | ||
212 | -{ | ||
213 | - if ([self.locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) { | ||
214 | - [self.locationManager requestAlwaysAuthorization]; | ||
215 | - } | ||
216 | - | ||
217 | - if ([CLLocationManager locationServicesEnabled]) { | ||
218 | - [self.locationManager startUpdatingLocation]; | ||
219 | - } | ||
220 | -} | ||
221 | - | ||
222 | - (void)registerCrashReporter | 125 | - (void)registerCrashReporter |
223 | { | 126 | { |
224 | [YHCrashReporter sharedInstance]; | 127 | [YHCrashReporter sharedInstance]; |
@@ -288,10 +191,6 @@ | @@ -288,10 +191,6 @@ | ||
288 | 191 | ||
289 | [[YHAssemblyAssistant sharedInstance] prepareImmediUploadDic:appId sessionId:self.session]; | 192 | [[YHAssemblyAssistant sharedInstance] prepareImmediUploadDic:appId sessionId:self.session]; |
290 | 193 | ||
291 | - [self startObserverNetworkReachabilityStatus]; | ||
292 | - | ||
293 | - [self startLocationService]; | ||
294 | - | ||
295 | [self registerCrashReporter]; | 194 | [self registerCrashReporter]; |
296 | 195 | ||
297 | [self registerAppWillEnterForegroundNotification]; | 196 | [self registerAppWillEnterForegroundNotification]; |
@@ -321,8 +220,6 @@ | @@ -321,8 +220,6 @@ | ||
321 | { | 220 | { |
322 | NSLog(@"logEvent %@, %@", eventId, param); | 221 | NSLog(@"logEvent %@, %@", eventId, param); |
323 | 222 | ||
324 | - [self startLocationService]; | ||
325 | - | ||
326 | self.event = [[YHEvent alloc] init]; | 223 | self.event = [[YHEvent alloc] init]; |
327 | self.event.op = eventId; | 224 | self.event.op = eventId; |
328 | self.event.uid = self.uid ? self.uid : @""; | 225 | self.event.uid = self.uid ? self.uid : @""; |
@@ -384,39 +281,4 @@ | @@ -384,39 +281,4 @@ | ||
384 | // } | 281 | // } |
385 | //} | 282 | //} |
386 | 283 | ||
387 | -#pragma mark - CLLocationManagerDelegate | ||
388 | - | ||
389 | -- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status | ||
390 | -{ | ||
391 | - if (status == kCLAuthorizationStatusAuthorizedAlways || status == kCLAuthorizationStatusAuthorizedWhenInUse){ | ||
392 | - [manager startUpdatingLocation]; | ||
393 | - // ... | ||
394 | - } else { | ||
395 | - if ([manager respondsToSelector:@selector(requestAlwaysAuthorization)]) { | ||
396 | - [manager requestAlwaysAuthorization]; | ||
397 | - } | ||
398 | - } | ||
399 | -} | ||
400 | - | ||
401 | -//协议中的方法,作用是每当位置发生更新时会调用的委托方法 | ||
402 | -- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation | ||
403 | -{ | ||
404 | - if ([[YHAssemblyAssistant sharedInstance] updateLocation:newLocation]) { | ||
405 | - [[YHAssemblyAssistant sharedInstance] updateImmediUploadDic]; | ||
406 | - } | ||
407 | -} | ||
408 | - | ||
409 | -//当位置获取或更新失败会调用的方法 | ||
410 | -- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error | ||
411 | -{ | ||
412 | - NSString *errorMsg = nil; | ||
413 | - if ([error code] == kCLErrorDenied) { | ||
414 | - errorMsg = @"定位功能访问被拒绝"; | ||
415 | - } | ||
416 | - if ([error code] == kCLErrorLocationUnknown) { | ||
417 | - errorMsg = @"获取位置信息失败"; | ||
418 | - } | ||
419 | - NSLog(@"%@", errorMsg); | ||
420 | -} | ||
421 | - | ||
422 | @end | 284 | @end |
@@ -16,7 +16,7 @@ | @@ -16,7 +16,7 @@ | ||
16 | 16 | ||
17 | - (void)changeAuthorizationStatus:(CLAuthorizationStatus)status; | 17 | - (void)changeAuthorizationStatus:(CLAuthorizationStatus)status; |
18 | 18 | ||
19 | -- (void)updateLocation:(CLLocation *)newLocation oldLocation:(CLLocation *)oldLocation; | 19 | +- (void)updateLocations:(NSArray *)locations; |
20 | 20 | ||
21 | - (void)failedLocation:(NSError *)error; | 21 | - (void)failedLocation:(NSError *)error; |
22 | 22 |
@@ -22,10 +22,10 @@ | @@ -22,10 +22,10 @@ | ||
22 | } | 22 | } |
23 | } | 23 | } |
24 | 24 | ||
25 | -- (void)updateLocation:(CLLocation *)newLocation oldLocation:(CLLocation *)oldLocation | 25 | +- (void)updateLocations:(NSArray *)locations |
26 | { | 26 | { |
27 | - if (self.delegate && [self.delegate respondsToSelector:@selector(locationManager:didUpdateToLocation:fromLocation:)]) { | ||
28 | - [self.delegate locationManager:self didUpdateToLocation:newLocation fromLocation:oldLocation]; | 27 | + if (self.delegate && [self.delegate respondsToSelector:@selector(locationManager:didUpdateLocations:)]) { |
28 | + [self.delegate locationManager:self didUpdateLocations:locations]; | ||
29 | } | 29 | } |
30 | } | 30 | } |
31 | 31 |
@@ -9,28 +9,36 @@ | @@ -9,28 +9,36 @@ | ||
9 | #import <UIKit/UIKit.h> | 9 | #import <UIKit/UIKit.h> |
10 | #import <XCTest/XCTest.h> | 10 | #import <XCTest/XCTest.h> |
11 | #import "OCMock.h" | 11 | #import "OCMock.h" |
12 | +#import <CoreLocation/CoreLocation.h> | ||
12 | #import "YHAssemblyAssistant.h" | 13 | #import "YHAssemblyAssistant.h" |
13 | #import "YHDevice.h" | 14 | #import "YHDevice.h" |
14 | #import "YHStatus.h" | 15 | #import "YHStatus.h" |
15 | #import "YHEvent.h" | 16 | #import "YHEvent.h" |
16 | #import "YHError.h" | 17 | #import "YHError.h" |
18 | +#import "FakeLocationManager.h" | ||
17 | 19 | ||
18 | @interface YHAssemblyAssistant (XCTestCase) | 20 | @interface YHAssemblyAssistant (XCTestCase) |
19 | 21 | ||
20 | @property (strong, nonatomic) NSString *eventFilePath; | 22 | @property (strong, nonatomic) NSString *eventFilePath; |
21 | @property (strong, nonatomic) NSString *eventFileName; | 23 | @property (strong, nonatomic) NSString *eventFileName; |
22 | @property (strong, nonatomic) NSFileManager *fileManager; // 属性注入 DI | 24 | @property (strong, nonatomic) NSFileManager *fileManager; // 属性注入 DI |
25 | +@property (strong, nonatomic) CLLocationManager *locationManager; | ||
23 | 26 | ||
24 | @property (strong, nonatomic, readonly) YHDevice *device; | 27 | @property (strong, nonatomic, readonly) YHDevice *device; |
25 | @property (strong, nonatomic, readonly) YHStatus *currentStatus; | 28 | @property (strong, nonatomic, readonly) YHStatus *currentStatus; |
26 | @property (strong, nonatomic, readonly) NSMutableDictionary *immediUploadItemDic; | 29 | @property (strong, nonatomic, readonly) NSMutableDictionary *immediUploadItemDic; |
27 | 30 | ||
31 | +- (BOOL)updateNetWorkStatus:(NSString *)status; | ||
32 | +- (BOOL)updateLocation:(CLLocation *)location; | ||
33 | +- (void)updateImmediUploadDic; | ||
34 | + | ||
28 | @end | 35 | @end |
29 | 36 | ||
30 | 37 | ||
31 | 38 | ||
32 | @interface YHAssemblyAssistantLogicTests : XCTestCase { | 39 | @interface YHAssemblyAssistantLogicTests : XCTestCase { |
33 | YHAssemblyAssistant *assembly; | 40 | YHAssemblyAssistant *assembly; |
41 | + id partialMock; | ||
34 | id mock; | 42 | id mock; |
35 | } | 43 | } |
36 | 44 | ||
@@ -51,6 +59,8 @@ | @@ -51,6 +59,8 @@ | ||
51 | mock = OCMClassMock([NSFileManager class]); | 59 | mock = OCMClassMock([NSFileManager class]); |
52 | OCMStub([mock defaultManager]).andReturn(mock); | 60 | OCMStub([mock defaultManager]).andReturn(mock); |
53 | assembly.fileManager = mock; | 61 | assembly.fileManager = mock; |
62 | + | ||
63 | + partialMock = OCMPartialMock(assembly); | ||
54 | } | 64 | } |
55 | 65 | ||
56 | - (void)tearDown { | 66 | - (void)tearDown { |
@@ -183,7 +193,6 @@ | @@ -183,7 +193,6 @@ | ||
183 | - (void)testSaveItemDataWithInputNil { | 193 | - (void)testSaveItemDataWithInputNil { |
184 | NSLog(@"%@ start", self.name); | 194 | NSLog(@"%@ start", self.name); |
185 | 195 | ||
186 | - id partialMock = OCMPartialMock(assembly); | ||
187 | [[partialMock reject] canPersisting]; | 196 | [[partialMock reject] canPersisting]; |
188 | 197 | ||
189 | XCTAssertThrows([assembly saveItemData:nil]); | 198 | XCTAssertThrows([assembly saveItemData:nil]); |
@@ -195,7 +204,6 @@ | @@ -195,7 +204,6 @@ | ||
195 | - (void)testSaveItemDataWithInputInvalid { | 204 | - (void)testSaveItemDataWithInputInvalid { |
196 | NSLog(@"%@ start", self.name); | 205 | NSLog(@"%@ start", self.name); |
197 | 206 | ||
198 | - id partialMock = OCMPartialMock(assembly); | ||
199 | [[partialMock reject] canPersisting]; | 207 | [[partialMock reject] canPersisting]; |
200 | 208 | ||
201 | XCTAssertThrows([assembly saveItemData:@"invalid"]); | 209 | XCTAssertThrows([assembly saveItemData:@"invalid"]); |
@@ -208,7 +216,7 @@ | @@ -208,7 +216,7 @@ | ||
208 | NSLog(@"%@ start", self.name); | 216 | NSLog(@"%@ start", self.name); |
209 | 217 | ||
210 | YHAnalyItemData *data = [[YHAnalyItemData alloc] init]; | 218 | YHAnalyItemData *data = [[YHAnalyItemData alloc] init]; |
211 | - id partialMock = OCMPartialMock(assembly); | 219 | + |
212 | OCMExpect([partialMock canPersisting]).andReturn(NO); | 220 | OCMExpect([partialMock canPersisting]).andReturn(NO); |
213 | 221 | ||
214 | XCTAssertThrows([assembly saveItemData:data]); | 222 | XCTAssertThrows([assembly saveItemData:data]); |
@@ -221,7 +229,7 @@ | @@ -221,7 +229,7 @@ | ||
221 | NSLog(@"%@ start", self.name); | 229 | NSLog(@"%@ start", self.name); |
222 | 230 | ||
223 | YHDevice *data = [[YHDevice alloc] init]; | 231 | YHDevice *data = [[YHDevice alloc] init]; |
224 | - id partialMock = OCMPartialMock(assembly); | 232 | + |
225 | OCMExpect([partialMock canPersisting]).andReturn(YES); | 233 | OCMExpect([partialMock canPersisting]).andReturn(YES); |
226 | 234 | ||
227 | XCTAssertThrows([assembly saveItemData:data]); | 235 | XCTAssertThrows([assembly saveItemData:data]); |
@@ -234,7 +242,7 @@ | @@ -234,7 +242,7 @@ | ||
234 | NSLog(@"%@ start", self.name); | 242 | NSLog(@"%@ start", self.name); |
235 | 243 | ||
236 | YHStatus *data = [[YHStatus alloc] init]; | 244 | YHStatus *data = [[YHStatus alloc] init]; |
237 | - id partialMock = OCMPartialMock(assembly); | 245 | + |
238 | OCMExpect([partialMock canPersisting]).andReturn(YES); | 246 | OCMExpect([partialMock canPersisting]).andReturn(YES); |
239 | 247 | ||
240 | XCTAssertThrows([assembly saveItemData:data]); | 248 | XCTAssertThrows([assembly saveItemData:data]); |
@@ -247,7 +255,7 @@ | @@ -247,7 +255,7 @@ | ||
247 | NSLog(@"%@ start", self.name); | 255 | NSLog(@"%@ start", self.name); |
248 | 256 | ||
249 | YHEvent *data = [[YHEvent alloc] init]; | 257 | YHEvent *data = [[YHEvent alloc] init]; |
250 | - id partialMock = OCMPartialMock(assembly); | 258 | + |
251 | OCMExpect([partialMock canPersisting]).andReturn(YES); | 259 | OCMExpect([partialMock canPersisting]).andReturn(YES); |
252 | 260 | ||
253 | XCTAssertNoThrow([assembly saveItemData:data]); | 261 | XCTAssertNoThrow([assembly saveItemData:data]); |
@@ -260,7 +268,7 @@ | @@ -260,7 +268,7 @@ | ||
260 | NSLog(@"%@ start", self.name); | 268 | NSLog(@"%@ start", self.name); |
261 | 269 | ||
262 | YHError *data = [[YHError alloc] init]; | 270 | YHError *data = [[YHError alloc] init]; |
263 | - id partialMock = OCMPartialMock(assembly); | 271 | + |
264 | OCMExpect([partialMock canPersisting]).andReturn(YES); | 272 | OCMExpect([partialMock canPersisting]).andReturn(YES); |
265 | 273 | ||
266 | XCTAssertNoThrow([assembly saveItemData:data]); | 274 | XCTAssertNoThrow([assembly saveItemData:data]); |
@@ -337,4 +345,42 @@ | @@ -337,4 +345,42 @@ | ||
337 | 345 | ||
338 | NSLog(@"%@ end", self.name); | 346 | NSLog(@"%@ end", self.name); |
339 | } | 347 | } |
348 | + | ||
349 | +#pragma mark - Test Location Sevice | ||
350 | + | ||
351 | +- (void)testLocationUpdateSuccess { | ||
352 | + NSLog(@"%@ start", self.name); | ||
353 | + | ||
354 | + assembly.locationManager = (CLLocationManager *)[FakeLocationManager new]; | ||
355 | + assembly.locationManager.delegate = assembly; | ||
356 | + CLLocation *newLocation = [[CLLocation alloc] initWithLatitude:20.0f longitude:120.0f]; | ||
357 | + | ||
358 | + [[[partialMock expect] andReturnValue:@YES] updateLocation:newLocation]; | ||
359 | + OCMExpect([partialMock updateImmediUploadDic]); | ||
360 | + | ||
361 | + [assembly prepareImmediUploadDic:@"appId" sessionId:@"seesionId"]; | ||
362 | + [(FakeLocationManager *)assembly.locationManager updateLocations:@[newLocation]]; | ||
363 | + | ||
364 | + OCMVerifyAll(partialMock); | ||
365 | + | ||
366 | + NSLog(@"%@ end", self.name); | ||
367 | +} | ||
368 | + | ||
369 | +- (void)testLocationUpdateFailed { | ||
370 | + NSLog(@"%@ start", self.name); | ||
371 | + | ||
372 | + assembly.locationManager = (CLLocationManager *)[FakeLocationManager new]; | ||
373 | + assembly.locationManager.delegate = assembly; | ||
374 | + CLLocation *newLocation = [[CLLocation alloc] initWithLatitude:20.0f longitude:120.0f]; | ||
375 | + | ||
376 | + [[[partialMock expect] andReturnValue:@NO] updateLocation:newLocation]; | ||
377 | + [[partialMock reject] updateImmediUploadDic]; | ||
378 | + | ||
379 | + [assembly prepareImmediUploadDic:@"appId" sessionId:@"seesionId"]; | ||
380 | + [(FakeLocationManager *)assembly.locationManager updateLocations:@[newLocation]]; | ||
381 | + | ||
382 | + OCMVerifyAll(partialMock); | ||
383 | + | ||
384 | + NSLog(@"%@ end", self.name); | ||
385 | +} | ||
340 | @end | 386 | @end |
@@ -128,15 +128,6 @@ | @@ -128,15 +128,6 @@ | ||
128 | NSLog(@"%@ end", self.name); | 128 | NSLog(@"%@ end", self.name); |
129 | } | 129 | } |
130 | 130 | ||
131 | -- (void)testUpdateImmediUploadDicMethod { | ||
132 | - NSLog(@"%@ start", self.name); | ||
133 | - | ||
134 | - [[mock expect] updateImmediUploadDic]; | ||
135 | - [mock updateImmediUploadDic]; | ||
136 | - | ||
137 | - NSLog(@"%@ end", self.name); | ||
138 | -} | ||
139 | - | ||
140 | - (void)testUploadDiskDataMethod { | 131 | - (void)testUploadDiskDataMethod { |
141 | NSLog(@"%@ start", self.name); | 132 | NSLog(@"%@ start", self.name); |
142 | 133 |
@@ -9,19 +9,15 @@ | @@ -9,19 +9,15 @@ | ||
9 | #import <UIKit/UIKit.h> | 9 | #import <UIKit/UIKit.h> |
10 | #import <XCTest/XCTest.h> | 10 | #import <XCTest/XCTest.h> |
11 | #import "OCMock.h" | 11 | #import "OCMock.h" |
12 | -#import <CoreLocation/CoreLocation.h> | ||
13 | #import "YHCrashReporter.h" | 12 | #import "YHCrashReporter.h" |
14 | #import "YHAssemblyAssistant.h" | 13 | #import "YHAssemblyAssistant.h" |
15 | #import "YH_Analytics.h" | 14 | #import "YH_Analytics.h" |
16 | #import "YHEvent.h" | 15 | #import "YHEvent.h" |
17 | 16 | ||
18 | -#import "FakeLocationManager.h" | ||
19 | - | ||
20 | @interface YH_Analytics (XCTestCase) | 17 | @interface YH_Analytics (XCTestCase) |
21 | 18 | ||
22 | @property (assign, nonatomic) YHLogStrategy logStrategy; | 19 | @property (assign, nonatomic) YHLogStrategy logStrategy; |
23 | @property (assign, nonatomic) NSTimeInterval currentInterval; | 20 | @property (assign, nonatomic) NSTimeInterval currentInterval; |
24 | -@property (strong, nonatomic) CLLocationManager *locationManager; | ||
25 | 21 | ||
26 | @end | 22 | @end |
27 | 23 | ||
@@ -29,7 +25,6 @@ | @@ -29,7 +25,6 @@ | ||
29 | @private | 25 | @private |
30 | id assemblyAssistantMock; | 26 | id assemblyAssistantMock; |
31 | id crashReporterMock; | 27 | id crashReporterMock; |
32 | - id networkAssistantMock; | ||
33 | YH_Analytics *analytics; | 28 | YH_Analytics *analytics; |
34 | } | 29 | } |
35 | 30 | ||
@@ -52,9 +47,6 @@ | @@ -52,9 +47,6 @@ | ||
52 | crashReporterMock = OCMClassMock([YHCrashReporter class]); | 47 | crashReporterMock = OCMClassMock([YHCrashReporter class]); |
53 | OCMStub([crashReporterMock sharedInstance]).andReturn(crashReporterMock); | 48 | OCMStub([crashReporterMock sharedInstance]).andReturn(crashReporterMock); |
54 | 49 | ||
55 | - networkAssistantMock = OCMClassMock([YHNetworkAssistant class]); | ||
56 | - OCMStub([networkAssistantMock sharedInstance]).andReturn(networkAssistantMock); | ||
57 | - | ||
58 | analytics = [[YH_Analytics alloc] init]; | 50 | analytics = [[YH_Analytics alloc] init]; |
59 | } | 51 | } |
60 | 52 | ||
@@ -62,7 +54,6 @@ | @@ -62,7 +54,6 @@ | ||
62 | // Put teardown code here. This method is called after the invocation of each test method in the class. | 54 | // Put teardown code here. This method is called after the invocation of each test method in the class. |
63 | assemblyAssistantMock = nil; | 55 | assemblyAssistantMock = nil; |
64 | crashReporterMock = nil; | 56 | crashReporterMock = nil; |
65 | - networkAssistantMock = nil; | ||
66 | analytics = nil; | 57 | analytics = nil; |
67 | 58 | ||
68 | [super tearDown]; | 59 | [super tearDown]; |
@@ -83,13 +74,11 @@ | @@ -83,13 +74,11 @@ | ||
83 | - (void)testStartWithAppIdMethod { | 74 | - (void)testStartWithAppIdMethod { |
84 | NSLog(@"%@ start", self.name); | 75 | NSLog(@"%@ start", self.name); |
85 | 76 | ||
86 | - OCMExpect([networkAssistantMock addReachabilityChangedHandler:[OCMArg any]]); | ||
87 | OCMExpect(ClassMethod([crashReporterMock sharedInstance])); | 77 | OCMExpect(ClassMethod([crashReporterMock sharedInstance])); |
88 | OCMExpect([assemblyAssistantMock prepareImmediUploadDic:@"appId" sessionId:[OCMArg any]]); | 78 | OCMExpect([assemblyAssistantMock prepareImmediUploadDic:@"appId" sessionId:[OCMArg any]]); |
89 | 79 | ||
90 | [analytics startWithAppId:@"appId"]; | 80 | [analytics startWithAppId:@"appId"]; |
91 | 81 | ||
92 | - OCMVerifyAll(networkAssistantMock); | ||
93 | OCMVerify(ClassMethod([crashReporterMock sharedInstance])); | 82 | OCMVerify(ClassMethod([crashReporterMock sharedInstance])); |
94 | OCMVerifyAll(assemblyAssistantMock); | 83 | OCMVerifyAll(assemblyAssistantMock); |
95 | 84 | ||
@@ -287,41 +276,4 @@ | @@ -287,41 +276,4 @@ | ||
287 | NSLog(@"%@ end", self.name); | 276 | NSLog(@"%@ end", self.name); |
288 | } | 277 | } |
289 | 278 | ||
290 | -#pragma mark - Test Location Sevice | ||
291 | - | ||
292 | -- (void)testLocationUpdateSuccess { | ||
293 | - NSLog(@"%@ start", self.name); | ||
294 | - | ||
295 | - analytics.locationManager = [[FakeLocationManager alloc] init]; | ||
296 | - analytics.locationManager.delegate = analytics; | ||
297 | - CLLocation *newLocation = [[CLLocation alloc] initWithLatitude:20.0f longitude:120.0f]; | ||
298 | - | ||
299 | - [[[assemblyAssistantMock expect] andReturnValue:@YES] updateLocation:newLocation]; | ||
300 | - OCMExpect([assemblyAssistantMock updateImmediUploadDic]); | ||
301 | - | ||
302 | - [analytics startWithAppId:@"appId"]; | ||
303 | - [(FakeLocationManager *)analytics.locationManager updateLocation:newLocation oldLocation:nil]; | ||
304 | - | ||
305 | - OCMVerifyAll(assemblyAssistantMock); | ||
306 | - | ||
307 | - NSLog(@"%@ end", self.name); | ||
308 | -} | ||
309 | - | ||
310 | -- (void)testLocationUpdateFailed { | ||
311 | - NSLog(@"%@ start", self.name); | ||
312 | - | ||
313 | - analytics.locationManager = [[FakeLocationManager alloc] init]; | ||
314 | - analytics.locationManager.delegate = analytics; | ||
315 | - CLLocation *newLocation = [[CLLocation alloc] initWithLatitude:20.0f longitude:120.0f]; | ||
316 | - | ||
317 | - [[[assemblyAssistantMock expect] andReturnValue:@NO] updateLocation:newLocation]; | ||
318 | - [[assemblyAssistantMock reject] updateImmediUploadDic]; | ||
319 | - | ||
320 | - [analytics startWithAppId:@"appId"]; | ||
321 | - [(FakeLocationManager *)analytics.locationManager updateLocation:newLocation oldLocation:nil]; | ||
322 | - | ||
323 | - OCMVerifyAll(assemblyAssistantMock); | ||
324 | - | ||
325 | - NSLog(@"%@ end", self.name); | ||
326 | -} | ||
327 | @end | 279 | @end |
-
Please register or login to post a comment