Authored by 周蓉君

新增YH_AnalyticsLogicTest. Review by 阿瑟。

@@ -30,6 +30,7 @@ @@ -30,6 +30,7 @@
30 CA7AC79E1ADE0C3900F30791 /* YHDeviceFactoryTests.m in Sources */ = {isa = PBXBuildFile; fileRef = CA7AC79D1ADE0C3900F30791 /* YHDeviceFactoryTests.m */; }; 30 CA7AC79E1ADE0C3900F30791 /* YHDeviceFactoryTests.m in Sources */ = {isa = PBXBuildFile; fileRef = CA7AC79D1ADE0C3900F30791 /* YHDeviceFactoryTests.m */; };
31 CA7AC7A01ADE0C4F00F30791 /* YHEventFactoryTests.m in Sources */ = {isa = PBXBuildFile; fileRef = CA7AC79F1ADE0C4F00F30791 /* YHEventFactoryTests.m */; }; 31 CA7AC7A01ADE0C4F00F30791 /* YHEventFactoryTests.m in Sources */ = {isa = PBXBuildFile; fileRef = CA7AC79F1ADE0C4F00F30791 /* YHEventFactoryTests.m */; };
32 CA7AC7A21ADE0C6600F30791 /* YHStatusFactoryTests.m in Sources */ = {isa = PBXBuildFile; fileRef = CA7AC7A11ADE0C6600F30791 /* YHStatusFactoryTests.m */; }; 32 CA7AC7A21ADE0C6600F30791 /* YHStatusFactoryTests.m in Sources */ = {isa = PBXBuildFile; fileRef = CA7AC7A11ADE0C6600F30791 /* YHStatusFactoryTests.m */; };
  33 + CA7AC7A41ADF9FCB00F30791 /* YH_AnalyticsLogicTests.m in Sources */ = {isa = PBXBuildFile; fileRef = CA7AC7A31ADF9FCB00F30791 /* YH_AnalyticsLogicTests.m */; };
33 CABC32831AD7CEB8002A4260 /* libOCMock.a in Frameworks */ = {isa = PBXBuildFile; fileRef = CABC32821AD7CEB8002A4260 /* libOCMock.a */; }; 34 CABC32831AD7CEB8002A4260 /* libOCMock.a in Frameworks */ = {isa = PBXBuildFile; fileRef = CABC32821AD7CEB8002A4260 /* libOCMock.a */; };
34 E74D45B21ABA7C6300EFE12E /* AFHTTPRequestOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = E74D458E1ABA7C6300EFE12E /* AFHTTPRequestOperation.m */; }; 35 E74D45B21ABA7C6300EFE12E /* AFHTTPRequestOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = E74D458E1ABA7C6300EFE12E /* AFHTTPRequestOperation.m */; };
35 E74D45B31ABA7C6300EFE12E /* AFHTTPRequestOperationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = E74D45901ABA7C6300EFE12E /* AFHTTPRequestOperationManager.m */; }; 36 E74D45B31ABA7C6300EFE12E /* AFHTTPRequestOperationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = E74D45901ABA7C6300EFE12E /* AFHTTPRequestOperationManager.m */; };
@@ -126,6 +127,7 @@ @@ -126,6 +127,7 @@
126 CA7AC79D1ADE0C3900F30791 /* YHDeviceFactoryTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YHDeviceFactoryTests.m; sourceTree = "<group>"; }; 127 CA7AC79D1ADE0C3900F30791 /* YHDeviceFactoryTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YHDeviceFactoryTests.m; sourceTree = "<group>"; };
127 CA7AC79F1ADE0C4F00F30791 /* YHEventFactoryTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YHEventFactoryTests.m; sourceTree = "<group>"; }; 128 CA7AC79F1ADE0C4F00F30791 /* YHEventFactoryTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YHEventFactoryTests.m; sourceTree = "<group>"; };
128 CA7AC7A11ADE0C6600F30791 /* YHStatusFactoryTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YHStatusFactoryTests.m; sourceTree = "<group>"; }; 129 CA7AC7A11ADE0C6600F30791 /* YHStatusFactoryTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YHStatusFactoryTests.m; sourceTree = "<group>"; };
  130 + CA7AC7A31ADF9FCB00F30791 /* YH_AnalyticsLogicTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YH_AnalyticsLogicTests.m; sourceTree = "<group>"; };
129 CABC32791AD7CE40002A4260 /* NSNotificationCenter+OCMAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSNotificationCenter+OCMAdditions.h"; sourceTree = "<group>"; }; 131 CABC32791AD7CE40002A4260 /* NSNotificationCenter+OCMAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSNotificationCenter+OCMAdditions.h"; sourceTree = "<group>"; };
130 CABC327A1AD7CE40002A4260 /* OCMArg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OCMArg.h; sourceTree = "<group>"; }; 132 CABC327A1AD7CE40002A4260 /* OCMArg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OCMArg.h; sourceTree = "<group>"; };
131 CABC327B1AD7CE40002A4260 /* OCMConstraint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OCMConstraint.h; sourceTree = "<group>"; }; 133 CABC327B1AD7CE40002A4260 /* OCMConstraint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OCMConstraint.h; sourceTree = "<group>"; };
@@ -291,6 +293,7 @@ @@ -291,6 +293,7 @@
291 CA7AC78D1ADE08AF00F30791 /* ModelTest */, 293 CA7AC78D1ADE08AF00F30791 /* ModelTest */,
292 CA7AC78C1ADE088D00F30791 /* UtilsTest */, 294 CA7AC78C1ADE088D00F30791 /* UtilsTest */,
293 194EDC8F1A7F52D100421E6C /* YH_AnalyticsTests.m */, 295 194EDC8F1A7F52D100421E6C /* YH_AnalyticsTests.m */,
  296 + CA7AC7A31ADF9FCB00F30791 /* YH_AnalyticsLogicTests.m */,
294 CA7AC7821ADE06F300F30791 /* YHCrashReporterTests.m */, 297 CA7AC7821ADE06F300F30791 /* YHCrashReporterTests.m */,
295 CA7AC7841ADE073200F30791 /* NSString+YHAnalyticsTests.m */, 298 CA7AC7841ADE073200F30791 /* NSString+YHAnalyticsTests.m */,
296 194EDC8D1A7F52D100421E6C /* Supporting Files */, 299 194EDC8D1A7F52D100421E6C /* Supporting Files */,
@@ -688,6 +691,7 @@ @@ -688,6 +691,7 @@
688 CA7AC7931ADE08F000F30791 /* YHEventTests.m in Sources */, 691 CA7AC7931ADE08F000F30791 /* YHEventTests.m in Sources */,
689 CA7AC7851ADE073200F30791 /* NSString+YHAnalyticsTests.m in Sources */, 692 CA7AC7851ADE073200F30791 /* NSString+YHAnalyticsTests.m in Sources */,
690 CA7AC79E1ADE0C3900F30791 /* YHDeviceFactoryTests.m in Sources */, 693 CA7AC79E1ADE0C3900F30791 /* YHDeviceFactoryTests.m in Sources */,
  694 + CA7AC7A41ADF9FCB00F30791 /* YH_AnalyticsLogicTests.m in Sources */,
691 CA7AC79A1ADE0BD500F30791 /* YHDataFactoryTests.m in Sources */, 695 CA7AC79A1ADE0BD500F30791 /* YHDataFactoryTests.m in Sources */,
692 CA7AC79C1ADE0C0800F30791 /* YHErrorFactoryTests.m in Sources */, 696 CA7AC79C1ADE0C0800F30791 /* YHErrorFactoryTests.m in Sources */,
693 CA7AC7A01ADE0C4F00F30791 /* YHEventFactoryTests.m in Sources */, 697 CA7AC7A01ADE0C4F00F30791 /* YHEventFactoryTests.m in Sources */,
@@ -20,18 +20,18 @@ @@ -20,18 +20,18 @@
20 // Override point for customization after application launch. 20 // Override point for customization after application launch.
21 21
22 // 设置发送策略 22 // 设置发送策略
23 -// [YH_Analytics shareInstance].logStrategy = LogStrategyCustom; 23 +// [YH_Analytics sharedInstance].logStrategy = LogStrategyCustom;
24 24
25 // 自定义发送时间,从服务器获取 25 // 自定义发送时间,从服务器获取
26 - [YH_Analytics shareInstance].customInterval = 1000; 26 + [YH_Analytics sharedInstance].customInterval = 1000;
27 27
28 // 设置用户id 28 // 设置用户id
29 - [YH_Analytics shareInstance].uid = @"0000001"; 29 + [YH_Analytics sharedInstance].uid = @"0000001";
30 30
31 // 启动 31 // 启动
32 - [[YH_Analytics shareInstance]startWithAppId:@"appid"]; 32 + [[YH_Analytics sharedInstance]startWithAppId:@"appid"];
33 33
34 - NSLog(@"logStrategy == %d", [YH_Analytics shareInstance].logStrategy); 34 + NSLog(@"logStrategy == %d", [YH_Analytics sharedInstance].logStrategy);
35 return YES; 35 return YES;
36 } 36 }
37 37
@@ -20,7 +20,7 @@ @@ -20,7 +20,7 @@
20 [super viewDidLoad]; 20 [super viewDidLoad];
21 21
22 [self.imageView setImage:[UIImage imageNamed:@"stastsold"]]; 22 [self.imageView setImage:[UIImage imageNamed:@"stastsold"]];
23 - self.segment.selectedSegmentIndex = [YH_Analytics shareInstance].logStrategy; 23 + self.segment.selectedSegmentIndex = [YH_Analytics sharedInstance].logStrategy;
24 } 24 }
25 25
26 - (void)didReceiveMemoryWarning { 26 - (void)didReceiveMemoryWarning {
@@ -31,7 +31,7 @@ @@ -31,7 +31,7 @@
31 - (IBAction)click:(id)sender { 31 - (IBAction)click:(id)sender {
32 32
33 for (int i = 0; i< 10; i++) { 33 for (int i = 0; i< 10; i++) {
34 - [[YH_Analytics shareInstance] logEvent:@"test" parameters: 34 + [[YH_Analytics sharedInstance] logEvent:@"test" parameters:
35 @{@"key1" : [NSString stringWithFormat:@"%d", i], 35 @{@"key1" : [NSString stringWithFormat:@"%d", i],
36 @"key2" : @"v2" 36 @"key2" : @"v2"
37 }]; 37 }];
@@ -43,7 +43,7 @@ @@ -43,7 +43,7 @@
43 43
44 44
45 // for (int i = 0; i< 10; i++) { 45 // for (int i = 0; i< 10; i++) {
46 - [[YH_Analytics shareInstance]logError:@"NETWORK" parameters: 46 + [[YH_Analytics sharedInstance]logError:@"NETWORK" parameters:
47 @{JsonKeyErrorEC:@"503", // 错误码 47 @{JsonKeyErrorEC:@"503", // 错误码
48 JsonKeyErrorEI:@"getUserAvatar" //发生错误接口 48 JsonKeyErrorEI:@"getUserAvatar" //发生错误接口
49 }]; 49 }];
@@ -68,17 +68,17 @@ @@ -68,17 +68,17 @@
68 68
69 switch (index) { 69 switch (index) {
70 case 0: { 70 case 0: {
71 - [YH_Analytics shareInstance].logStrategy = LogStrategyAppLaunch; 71 + [YH_Analytics sharedInstance].logStrategy = LogStrategyAppLaunch;
72 break; 72 break;
73 } 73 }
74 case 1: { 74 case 1: {
75 - [YH_Analytics shareInstance].logStrategy = LogStrategyCustom; 75 + [YH_Analytics sharedInstance].logStrategy = LogStrategyCustom;
76 [[NSUserDefaults standardUserDefaults] setDouble:60 forKey:kKeyUserDefaultsCustomInterval]; 76 [[NSUserDefaults standardUserDefaults] setDouble:60 forKey:kKeyUserDefaultsCustomInterval];
77 [[NSUserDefaults standardUserDefaults] synchronize]; 77 [[NSUserDefaults standardUserDefaults] synchronize];
78 break; 78 break;
79 } 79 }
80 case 2: { 80 case 2: {
81 - [YH_Analytics shareInstance].logStrategy = LogStrategyImmedi;; 81 + [YH_Analytics sharedInstance].logStrategy = LogStrategyImmedi;;
82 break; 82 break;
83 } 83 }
84 default: 84 default:
@@ -31,7 +31,7 @@ extern NSString * const JsonKeyDataTypeErrors; @@ -31,7 +31,7 @@ extern NSString * const JsonKeyDataTypeErrors;
31 @property (strong, nonatomic) YHStatus *currentStatus; 31 @property (strong, nonatomic) YHStatus *currentStatus;
32 @property (strong, nonatomic) NSMutableDictionary *immediUploadItemDic; // 用于立即发送策略下(device信息是相同的) 32 @property (strong, nonatomic) NSMutableDictionary *immediUploadItemDic; // 用于立即发送策略下(device信息是相同的)
33 33
34 -+ (instancetype)shareInstance; 34 ++ (instancetype)sharedInstance;
35 35
36 - (BOOL)canPersisiting; 36 - (BOOL)canPersisiting;
37 37
@@ -57,16 +57,16 @@ NSString * const JsonKeyDataTypeErrors = @"errors"; @@ -57,16 +57,16 @@ NSString * const JsonKeyDataTypeErrors = @"errors";
57 57
58 #pragma mark - 初始化 58 #pragma mark - 初始化
59 static dispatch_queue_t persisitingQueue; 59 static dispatch_queue_t persisitingQueue;
60 -+ (instancetype)shareInstance 60 ++ (instancetype)sharedInstance
61 { 61 {
62 - static YHAssemblyAssistant *_shareInstance; 62 + static YHAssemblyAssistant *_sharedInstance;
63 static dispatch_once_t onceToken; 63 static dispatch_once_t onceToken;
64 dispatch_once(&onceToken, ^{ 64 dispatch_once(&onceToken, ^{
65 - _shareInstance = [[YHAssemblyAssistant alloc] init]; 65 + _sharedInstance = [[YHAssemblyAssistant alloc] init];
66 persisitingQueue = dispatch_queue_create("com.yoho.analytics.persisiting", NULL); 66 persisitingQueue = dispatch_queue_create("com.yoho.analytics.persisiting", NULL);
67 }); 67 });
68 68
69 - return _shareInstance; 69 + return _sharedInstance;
70 } 70 }
71 71
72 - (id)init 72 - (id)init
@@ -289,7 +289,7 @@ static dispatch_queue_t persisitingQueue; @@ -289,7 +289,7 @@ static dispatch_queue_t persisitingQueue;
289 289
290 if (data) { 290 if (data) {
291 291
292 - [[YHNetworkAssistant shareInstance] postWhitAPI:kYASApiMethod parameters:data from:self success:^(id responseObject) { 292 + [[YHNetworkAssistant sharedInstance] postWhitAPI:kYASApiMethod parameters:data from:self success:^(id responseObject) {
293 // NSLog(@"responseObject = %@", responseObject); 293 // NSLog(@"responseObject = %@", responseObject);
294 } failure:^(NSError *error) { 294 } failure:^(NSError *error) {
295 NSLog(@"error = %@", error.localizedDescription); 295 NSLog(@"error = %@", error.localizedDescription);
@@ -299,11 +299,11 @@ static dispatch_queue_t persisitingQueue; @@ -299,11 +299,11 @@ static dispatch_queue_t persisitingQueue;
299 299
300 - (void)uploadDiskData 300 - (void)uploadDiskData
301 { 301 {
302 - NSDictionary *uploadData = [[YHAssemblyAssistant shareInstance] getUploadData]; 302 + NSDictionary *uploadData = [[YHAssemblyAssistant sharedInstance] getUploadData];
303 303
304 if (uploadData) { 304 if (uploadData) {
305 305
306 - [[YHNetworkAssistant shareInstance] postWhitAPI:kYASApiMethod parameters:uploadData from:self success:^(id responseObject) { 306 + [[YHNetworkAssistant sharedInstance] postWhitAPI:kYASApiMethod parameters:uploadData from:self success:^(id responseObject) {
307 // NSLog(@"responseObject = %@", responseObject); 307 // NSLog(@"responseObject = %@", responseObject);
308 [self removeLocalFile]; 308 [self removeLocalFile];
309 } failure:^(NSError *error) { 309 } failure:^(NSError *error) {
@@ -59,14 +59,14 @@ void uncaughtCrashExceptionHandler(NSException *exception) @@ -59,14 +59,14 @@ void uncaughtCrashExceptionHandler(NSException *exception)
59 59
60 + (YHCrashReporter *)sharedInstance 60 + (YHCrashReporter *)sharedInstance
61 { 61 {
62 - static YHCrashReporter *shareInstance = nil; 62 + static YHCrashReporter *sharedInstance = nil;
63 63
64 static dispatch_once_t onceToken; 64 static dispatch_once_t onceToken;
65 dispatch_once(&onceToken, ^{ 65 dispatch_once(&onceToken, ^{
66 - shareInstance = [[YHCrashReporter alloc] init]; 66 + sharedInstance = [[YHCrashReporter alloc] init];
67 }); 67 });
68 68
69 - return shareInstance; 69 + return sharedInstance;
70 } 70 }
71 71
72 #pragma mark - Lifetime methods 72 #pragma mark - Lifetime methods
@@ -122,7 +122,7 @@ void uncaughtCrashExceptionHandler(NSException *exception) @@ -122,7 +122,7 @@ void uncaughtCrashExceptionHandler(NSException *exception)
122 { 122 {
123 NSLog(@"crash============:\n%@", userInfo); 123 NSLog(@"crash============:\n%@", userInfo);
124 if (userInfo) { 124 if (userInfo) {
125 - [[YH_Analytics shareInstance] logError:@"CRASH" parameters:@{ JsonKeyErrorST: userInfo}]; 125 + [[YH_Analytics sharedInstance] logError:@"CRASH" parameters:@{ JsonKeyErrorST: userInfo}];
126 } 126 }
127 } 127 }
128 128
@@ -130,7 +130,7 @@ void uncaughtCrashExceptionHandler(NSException *exception) @@ -130,7 +130,7 @@ void uncaughtCrashExceptionHandler(NSException *exception)
130 { 130 {
131 NSLog(@"crash============:\n%@", userInfo); 131 NSLog(@"crash============:\n%@", userInfo);
132 if (userInfo) { 132 if (userInfo) {
133 - [[YH_Analytics shareInstance] logError:@"CRASH" parameters:@{ JsonKeyErrorST: userInfo}]; 133 + [[YH_Analytics sharedInstance] logError:@"CRASH" parameters:@{ JsonKeyErrorST: userInfo}];
134 } 134 }
135 } 135 }
136 136
@@ -19,7 +19,7 @@ static NSString * const YHEAPIErrorDomain = @"YHEAPIErrorDomain"; @@ -19,7 +19,7 @@ static NSString * const YHEAPIErrorDomain = @"YHEAPIErrorDomain";
19 19
20 #pragma mark - Init 20 #pragma mark - Init
21 21
22 -+ (instancetype)shareInstance; 22 ++ (instancetype)sharedInstance;
23 23
24 /** 24 /**
25 * Initializes your network engine with a hostname 25 * Initializes your network engine with a hostname
@@ -28,15 +28,15 @@ AFNetworkReachabilityStatus _currentNetworkStatus; @@ -28,15 +28,15 @@ AFNetworkReachabilityStatus _currentNetworkStatus;
28 28
29 #pragma mark - Init 29 #pragma mark - Init
30 30
31 -+ (instancetype)shareInstance 31 ++ (instancetype)sharedInstance
32 { 32 {
33 - static YHNetworkAssistant *_shareInstance; 33 + static YHNetworkAssistant *_sharedInstance;
34 static dispatch_once_t onceToken; 34 static dispatch_once_t onceToken;
35 dispatch_once(&onceToken, ^{ 35 dispatch_once(&onceToken, ^{
36 _sQueue = dispatch_queue_create("cn.yoho.analytics.network.squeue", 0);// create a serial queue 36 _sQueue = dispatch_queue_create("cn.yoho.analytics.network.squeue", 0);// create a serial queue
37 _allOperations = [NSMutableSet new]; 37 _allOperations = [NSMutableSet new];
38 _reachabilityChangedHandlers = [NSMutableArray array]; 38 _reachabilityChangedHandlers = [NSMutableArray array];
39 - _shareInstance = [[YHNetworkAssistant alloc] initWithHostName:kAnalizedURL apiPath:nil customHeaderFields:nil]; 39 + _sharedInstance = [[YHNetworkAssistant alloc] initWithHostName:kAnalizedURL apiPath:nil customHeaderFields:nil];
40 40
41 // 监听网络状态 41 // 监听网络状态
42 [[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) { 42 [[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
@@ -53,7 +53,7 @@ AFNetworkReachabilityStatus _currentNetworkStatus; @@ -53,7 +53,7 @@ AFNetworkReachabilityStatus _currentNetworkStatus;
53 [[AFNetworkReachabilityManager sharedManager] startMonitoring]; 53 [[AFNetworkReachabilityManager sharedManager] startMonitoring];
54 }); 54 });
55 55
56 - return _shareInstance; 56 + return _sharedInstance;
57 } 57 }
58 58
59 59
@@ -22,7 +22,7 @@ typedef enum _YohoMobStatLogStrategy { @@ -22,7 +22,7 @@ typedef enum _YohoMobStatLogStrategy {
22 /** 22 /**
23 * 获取统计对象的实例 23 * 获取统计对象的实例
24 */ 24 */
25 -+ (YH_Analytics*) shareInstance; 25 ++ (YH_Analytics*) sharedInstance;
26 26
27 /** 27 /**
28 * 此处AppId即为应用的appKey 28 * 此处AppId即为应用的appKey
@@ -50,16 +50,16 @@ @@ -50,16 +50,16 @@
50 static dispatch_queue_t persisitingQueue; 50 static dispatch_queue_t persisitingQueue;
51 51
52 52
53 -+ (YH_Analytics *)shareInstance 53 ++ (YH_Analytics *)sharedInstance
54 { 54 {
55 - static YH_Analytics *shareInstance = nil; 55 + static YH_Analytics *sharedInstance = nil;
56 56
57 static dispatch_once_t onceToken; 57 static dispatch_once_t onceToken;
58 dispatch_once(&onceToken, ^{ 58 dispatch_once(&onceToken, ^{
59 - shareInstance = [[YH_Analytics alloc] init]; 59 + sharedInstance = [[YH_Analytics alloc] init];
60 }); 60 });
61 61
62 - return shareInstance; 62 + return sharedInstance;
63 } 63 }
64 64
65 - (id)init 65 - (id)init
@@ -91,36 +91,36 @@ static dispatch_queue_t persisitingQueue; @@ -91,36 +91,36 @@ static dispatch_queue_t persisitingQueue;
91 CTRadioAccessTechnologyeHRPD - 3G (or 3.5 - eHRPD is to allow migration from CDMA EVDO to LTE) 91 CTRadioAccessTechnologyeHRPD - 3G (or 3.5 - eHRPD is to allow migration from CDMA EVDO to LTE)
92 CTRadioAccessTechnologyLTE - 4G (allowed to be called 4G by the ITU as mentioend above) 92 CTRadioAccessTechnologyLTE - 4G (allowed to be called 4G by the ITU as mentioend above)
93 */ 93 */
94 - [[YHNetworkAssistant shareInstance] addReachabilityChangedHandler:^(AFNetworkReachabilityStatus networkStatus) { 94 + [[YHNetworkAssistant sharedInstance] addReachabilityChangedHandler:^(AFNetworkReachabilityStatus networkStatus) {
95 CTTelephonyNetworkInfo *netInfo = [[CTTelephonyNetworkInfo alloc] init]; 95 CTTelephonyNetworkInfo *netInfo = [[CTTelephonyNetworkInfo alloc] init];
96 switch (networkStatus) { 96 switch (networkStatus) {
97 case AFNetworkReachabilityStatusUnknown: 97 case AFNetworkReachabilityStatusUnknown:
98 case AFNetworkReachabilityStatusNotReachable: 98 case AFNetworkReachabilityStatusNotReachable:
99 - [YHAssemblyAssistant shareInstance].currentStatus.net = kNetWorkStatusUnknow; 99 + [YHAssemblyAssistant sharedInstance].currentStatus.net = kNetWorkStatusUnknow;
100 break; 100 break;
101 101
102 case AFNetworkReachabilityStatusReachableViaWWAN: 102 case AFNetworkReachabilityStatusReachableViaWWAN:
103 { 103 {
104 if ([netInfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyGPRS]|| [netInfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyEdge]) { 104 if ([netInfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyGPRS]|| [netInfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyEdge]) {
105 - [YHAssemblyAssistant shareInstance].currentStatus.net = kNetWorkStatus2G; 105 + [YHAssemblyAssistant sharedInstance].currentStatus.net = kNetWorkStatus2G;
106 } else if([netInfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyWCDMA]|| [netInfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyHSDPA] || [netInfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyHSUPA]|| [netInfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyeHRPD]) { 106 } else if([netInfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyWCDMA]|| [netInfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyHSDPA] || [netInfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyHSUPA]|| [netInfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyeHRPD]) {
107 - [YHAssemblyAssistant shareInstance].currentStatus.net = kNetWorkStatus3G; 107 + [YHAssemblyAssistant sharedInstance].currentStatus.net = kNetWorkStatus3G;
108 } else if([netInfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyLTE]) { 108 } else if([netInfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyLTE]) {
109 - [YHAssemblyAssistant shareInstance].currentStatus.net = kNetWorkStatus4G; 109 + [YHAssemblyAssistant sharedInstance].currentStatus.net = kNetWorkStatus4G;
110 } else { 110 } else {
111 - [YHAssemblyAssistant shareInstance].currentStatus.net = kNetWorkStatusUnknow; 111 + [YHAssemblyAssistant sharedInstance].currentStatus.net = kNetWorkStatusUnknow;
112 } 112 }
113 } 113 }
114 break; 114 break;
115 case AFNetworkReachabilityStatusReachableViaWiFi: 115 case AFNetworkReachabilityStatusReachableViaWiFi:
116 - [YHAssemblyAssistant shareInstance].currentStatus.net = kNetWorkStatusWIFI; 116 + [YHAssemblyAssistant sharedInstance].currentStatus.net = kNetWorkStatusWIFI;
117 break; 117 break;
118 118
119 default: 119 default:
120 break; 120 break;
121 } 121 }
122 122
123 - [[YHAssemblyAssistant shareInstance] updateImmediUploadDic]; 123 + [[YHAssemblyAssistant sharedInstance] updateImmediUploadDic];
124 }]; 124 }];
125 } 125 }
126 126
@@ -167,14 +167,14 @@ static dispatch_queue_t persisitingQueue; @@ -167,14 +167,14 @@ static dispatch_queue_t persisitingQueue;
167 { 167 {
168 [self registerCrashReporter]; 168 [self registerCrashReporter];
169 [self registerAppWillEnterForegroundNotification]; 169 [self registerAppWillEnterForegroundNotification];
170 - [YHAssemblyAssistant shareInstance].currentStatus.sid = self.session;  
171 - [YHAssemblyAssistant shareInstance].device.ak = appId; 170 + [YHAssemblyAssistant sharedInstance].currentStatus.sid = self.session;
  171 + [YHAssemblyAssistant sharedInstance].device.ak = appId;
172 172
173 /* 173 /*
174 构建即时发送模式下数据 174 构建即时发送模式下数据
175 */ 175 */
176 176
177 - [[YHAssemblyAssistant shareInstance] prepareImmediUploadDic]; 177 + [[YHAssemblyAssistant sharedInstance] prepareImmediUploadDic];
178 178
179 /* 179 /*
180 检查发送模式 180 检查发送模式
@@ -230,9 +230,9 @@ static dispatch_queue_t persisitingQueue; @@ -230,9 +230,9 @@ static dispatch_queue_t persisitingQueue;
230 230
231 // 立即发送策略 231 // 立即发送策略
232 if (self.logStrategy == LogStrategyImmedi) { 232 if (self.logStrategy == LogStrategyImmedi) {
233 - [[YHAssemblyAssistant shareInstance] uploadImmedilyWithEvent:event]; 233 + [[YHAssemblyAssistant sharedInstance] uploadImmedilyWithEvent:event];
234 } else { 234 } else {
235 - [[YHAssemblyAssistant shareInstance] saveItemData:event]; 235 + [[YHAssemblyAssistant sharedInstance] saveItemData:event];
236 } 236 }
237 237
238 } 238 }
@@ -248,9 +248,9 @@ static dispatch_queue_t persisitingQueue; @@ -248,9 +248,9 @@ static dispatch_queue_t persisitingQueue;
248 error.param = param; 248 error.param = param;
249 249
250 if (self.logStrategy == LogStrategyImmedi) { 250 if (self.logStrategy == LogStrategyImmedi) {
251 - [[YHAssemblyAssistant shareInstance] uploadImmedilyWithEvent:error]; 251 + [[YHAssemblyAssistant sharedInstance] uploadImmedilyWithEvent:error];
252 } else { 252 } else {
253 - [[YHAssemblyAssistant shareInstance] saveItemData:error]; 253 + [[YHAssemblyAssistant sharedInstance] saveItemData:error];
254 } 254 }
255 } 255 }
256 256
@@ -265,7 +265,7 @@ static dispatch_queue_t persisitingQueue; @@ -265,7 +265,7 @@ static dispatch_queue_t persisitingQueue;
265 // 发送本地持久化数据 265 // 发送本地持久化数据
266 - (void)uploadDiskData 266 - (void)uploadDiskData
267 { 267 {
268 - [[YHAssemblyAssistant shareInstance] uploadDiskData]; 268 + [[YHAssemblyAssistant sharedInstance] uploadDiskData];
269 } 269 }
270 270
271 // 发送本地持久化数据 271 // 发送本地持久化数据
@@ -302,11 +302,11 @@ static dispatch_queue_t persisitingQueue; @@ -302,11 +302,11 @@ static dispatch_queue_t persisitingQueue;
302 CLLocationCoordinate2D loc = [newLocation coordinate]; 302 CLLocationCoordinate2D loc = [newLocation coordinate];
303 float longitude = loc.longitude; 303 float longitude = loc.longitude;
304 float latitude = loc.latitude; 304 float latitude = loc.latitude;
305 - [YHAssemblyAssistant shareInstance].currentStatus.lo = [NSString stringWithFormat:@"%f",longitude];  
306 - [YHAssemblyAssistant shareInstance].currentStatus.la = [NSString stringWithFormat:@"%f",latitude]; 305 + [YHAssemblyAssistant sharedInstance].currentStatus.lo = [NSString stringWithFormat:@"%f",longitude];
  306 + [YHAssemblyAssistant sharedInstance].currentStatus.la = [NSString stringWithFormat:@"%f",latitude];
307 307
308 // 更新经纬度 308 // 更新经纬度
309 - [[YHAssemblyAssistant shareInstance].immediUploadItemDic setObject:[YHAssemblyAssistant shareInstance].device.jsonDictionary forKey:JsonKeyDataTypeDevice]; 309 + [[YHAssemblyAssistant sharedInstance].immediUploadItemDic setObject:[YHAssemblyAssistant sharedInstance].device.jsonDictionary forKey:JsonKeyDataTypeDevice];
310 310
311 } 311 }
312 312
  1 +//
  2 +// YH_AnalyticsLogicTests.m
  3 +// YH_Analytics
  4 +//
  5 +// Created by Zhou Rongjun on 15/4/16.
  6 +// Copyright (c) 2015年 YOHO. All rights reserved.
  7 +//
  8 +
  9 +#import <UIKit/UIKit.h>
  10 +#import <XCTest/XCTest.h>
  11 +#import "OCMock.h"
  12 +#import <CoreLocation/CoreLocation.h>
  13 +#import "YHCrashReporter.h"
  14 +#import "YHAssemblyAssistant.h"
  15 +#import "YH_Analytics.h"
  16 +
  17 +@interface YH_AnalyticsLogicTests : XCTestCase {
  18 +@private
  19 + id locationManageMock;
  20 + id assemblyAssistantMock;
  21 + id crashReporterMock;
  22 + id networkAssistantMock;
  23 + YH_Analytics *analytics;
  24 +}
  25 +
  26 +@end
  27 +
  28 +@implementation YH_AnalyticsLogicTests
  29 +
  30 +- (void)setUp {
  31 + [super setUp];
  32 + // Put setup code here. This method is called before the invocation of each test method in the class.
  33 + locationManageMock = OCMClassMock([CLLocationManager class]);
  34 +
  35 + assemblyAssistantMock = OCMClassMock([YHAssemblyAssistant class]);
  36 + OCMStub([assemblyAssistantMock sharedInstance]).andReturn(assemblyAssistantMock);
  37 +
  38 + crashReporterMock = OCMClassMock([YHCrashReporter class]);
  39 + OCMStub([crashReporterMock sharedInstance]).andReturn(crashReporterMock);
  40 +
  41 + networkAssistantMock = OCMClassMock([YHNetworkAssistant class]);
  42 + OCMStub([networkAssistantMock sharedInstance]).andReturn(networkAssistantMock);
  43 +}
  44 +
  45 +- (void)tearDown {
  46 + // Put teardown code here. This method is called after the invocation of each test method in the class.
  47 + [super tearDown];
  48 +}
  49 +
  50 +#pragma mark - 逻辑分支测试
  51 +
  52 +- (void)testStartWithAppIdMethodPrepareImmediUploadDic {
  53 + NSLog(@"%@ start", self.name);
  54 +
  55 + analytics = [[YH_Analytics alloc] init];
  56 +
  57 + OCMExpect([assemblyAssistantMock prepareImmediUploadDic]);
  58 +
  59 + [analytics startWithAppId:@"appId"];
  60 +
  61 + OCMVerifyAll(assemblyAssistantMock);
  62 +
  63 + NSLog(@"%@ end", self.name);
  64 +}
  65 +
  66 +- (void)testStartWithAppIdMethodWithLogStrategyAppLaunch {
  67 + NSLog(@"%@ start", self.name);
  68 +
  69 + analytics = [[YH_Analytics alloc] init];
  70 + analytics.logStrategy = LogStrategyAppLaunch;
  71 +
  72 + OCMExpect([assemblyAssistantMock uploadDiskData]);
  73 +
  74 + [analytics startWithAppId:@"appId"];
  75 +
  76 + OCMVerifyAll(assemblyAssistantMock);
  77 +
  78 + NSLog(@"%@ end", self.name);
  79 +}
  80 +
  81 +- (void)testStartWithAppIdMethodWithLogStrategyCustom {
  82 + NSLog(@"%@ start", self.name);
  83 +
  84 + analytics = [[YH_Analytics alloc] init];
  85 + analytics.logStrategy = LogStrategyCustom;
  86 +
  87 + OCMExpect([assemblyAssistantMock uploadDiskData]);
  88 +
  89 + [analytics startWithAppId:@"appId"];
  90 +
  91 + OCMVerifyAll(assemblyAssistantMock);
  92 +
  93 + NSLog(@"%@ end", self.name);
  94 +}
  95 +
  96 +- (void)testStartWithAppIdMethodWithLogStrategyImmedi {
  97 + NSLog(@"%@ start", self.name);
  98 +
  99 + analytics = [[YH_Analytics alloc] init];
  100 + analytics.logStrategy = LogStrategyImmedi;
  101 +
  102 + OCMExpect([assemblyAssistantMock uploadDiskData]);
  103 +
  104 + [analytics startWithAppId:@"appId"];
  105 +
  106 + XCTAssertThrows([assemblyAssistantMock verify], @"StartWithAppId should not uploadDiskData when strategy is immediately.") ;
  107 +
  108 + NSLog(@"%@ end", self.name);
  109 +}
  110 +@end
@@ -81,18 +81,4 @@ @@ -81,18 +81,4 @@
81 NSLog(@"%@ end", self.name); 81 NSLog(@"%@ end", self.name);
82 } 82 }
83 83
84 -#pragma mark - 分支测试  
85 -  
86 -- (void)testStartWithAppIdMethodWithLogStrategyAppLaunch {  
87 - NSLog(@"%@ start", self.name);  
88 -  
89 - NSLog(@"%@ end", self.name);  
90 -}  
91 -  
92 -- (void)testStartWithAppIdMethodWithLogStrategyCustom {  
93 - NSLog(@"%@ start", self.name);  
94 -  
95 - NSLog(@"%@ end", self.name);  
96 -}  
97 -  
98 @end 84 @end