Toggle navigation
Toggle navigation
This project
Loading...
Sign in
ios
/
yh_analytics
·
Commits
Go to a project
GitLab
Go to group
Project
Activity
Files
Commits
Pipelines
0
Builds
0
Graphs
Milestones
Issues
0
Merge Requests
0
Members
Labels
Wiki
Forks
Network
Create a new issue
Download as
Plain Diff
Browse Files
Authored by
周蓉君
10 years ago
Commit
066c39b93fa9980be217581de790da4982d35712
2 parents
1324fe0d
c33b4e58
Merge branch 'beardev'
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
255 additions
and
70 deletions
YH_Analytics/YH_Analytics.xcodeproj/project.pbxproj
YH_Analytics/YH_Analytics/YH_Analytics/Utils/YHAssemblyAssistant.h
YH_Analytics/YH_Analytics/YH_Analytics/Utils/YHAssemblyAssistant.m
YH_Analytics/YH_Analytics/YH_Analytics/YH_Analytics.h
YH_Analytics/YH_Analytics/YH_Analytics/YH_Analytics.m
YH_Analytics/YH_AnalyticsTests/FakeLocationManager.h
YH_Analytics/YH_AnalyticsTests/FakeLocationManager.m
YH_Analytics/YH_AnalyticsTests/YH_AnalyticsLogicTests.m
YH_Analytics/YH_AnalyticsTests/YH_AnalyticsTests.m
YH_Analytics/YH_Analytics.xcodeproj/project.pbxproj
View file @
066c39b
...
...
@@ -31,6 +31,7 @@
CA7AC7A01ADE0C4F00F30791 /* YHEventFactoryTests.m in Sources */ = {isa = PBXBuildFile; fileRef = CA7AC79F1ADE0C4F00F30791 /* YHEventFactoryTests.m */; };
CA7AC7A21ADE0C6600F30791 /* YHStatusFactoryTests.m in Sources */ = {isa = PBXBuildFile; fileRef = CA7AC7A11ADE0C6600F30791 /* YHStatusFactoryTests.m */; };
CA7AC7A41ADF9FCB00F30791 /* YH_AnalyticsLogicTests.m in Sources */ = {isa = PBXBuildFile; fileRef = CA7AC7A31ADF9FCB00F30791 /* YH_AnalyticsLogicTests.m */; };
CAA6BD371AE4E857006C3332 /* FakeLocationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = CAA6BD361AE4E857006C3332 /* FakeLocationManager.m */; };
CABC32831AD7CEB8002A4260 /* libOCMock.a in Frameworks */ = {isa = PBXBuildFile; fileRef = CABC32821AD7CEB8002A4260 /* libOCMock.a */; };
E74D45B21ABA7C6300EFE12E /* AFHTTPRequestOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = E74D458E1ABA7C6300EFE12E /* AFHTTPRequestOperation.m */; };
E74D45B31ABA7C6300EFE12E /* AFHTTPRequestOperationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = E74D45901ABA7C6300EFE12E /* AFHTTPRequestOperationManager.m */; };
...
...
@@ -128,6 +129,8 @@
CA7AC79F1ADE0C4F00F30791 /* YHEventFactoryTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YHEventFactoryTests.m; sourceTree = "<group>"; };
CA7AC7A11ADE0C6600F30791 /* YHStatusFactoryTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YHStatusFactoryTests.m; sourceTree = "<group>"; };
CA7AC7A31ADF9FCB00F30791 /* YH_AnalyticsLogicTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YH_AnalyticsLogicTests.m; sourceTree = "<group>"; };
CAA6BD351AE4E857006C3332 /* FakeLocationManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FakeLocationManager.h; sourceTree = "<group>"; };
CAA6BD361AE4E857006C3332 /* FakeLocationManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FakeLocationManager.m; sourceTree = "<group>"; };
CABC32791AD7CE40002A4260 /* NSNotificationCenter+OCMAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSNotificationCenter+OCMAdditions.h"; sourceTree = "<group>"; };
CABC327A1AD7CE40002A4260 /* OCMArg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OCMArg.h; sourceTree = "<group>"; };
CABC327B1AD7CE40002A4260 /* OCMConstraint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OCMConstraint.h; sourceTree = "<group>"; };
...
...
@@ -289,6 +292,7 @@
194EDC8C1A7F52D100421E6C /* YH_AnalyticsTests */ = {
isa = PBXGroup;
children = (
CAA6BD381AE4E85D006C3332 /* FakeClass */,
CA7AC7981ADE092D00F30791 /* Factory */,
CA7AC78D1ADE08AF00F30791 /* ModelTest */,
CA7AC78C1ADE088D00F30791 /* UtilsTest */,
...
...
@@ -360,6 +364,15 @@
name = Factory;
sourceTree = "<group>";
};
CAA6BD381AE4E85D006C3332 /* FakeClass */ = {
isa = PBXGroup;
children = (
CAA6BD351AE4E857006C3332 /* FakeLocationManager.h */,
CAA6BD361AE4E857006C3332 /* FakeLocationManager.m */,
);
name = FakeClass;
sourceTree = "<group>";
};
CABC32771AD7CDFD002A4260 /* TestDependence */ = {
isa = PBXGroup;
children = (
...
...
@@ -695,6 +708,7 @@
CA7AC79A1ADE0BD500F30791 /* YHDataFactoryTests.m in Sources */,
CA7AC79C1ADE0C0800F30791 /* YHErrorFactoryTests.m in Sources */,
CA7AC7A01ADE0C4F00F30791 /* YHEventFactoryTests.m in Sources */,
CAA6BD371AE4E857006C3332 /* FakeLocationManager.m in Sources */,
CA7AC7911ADE08DC00F30791 /* YHErrorTests.m in Sources */,
CA7AC7971ADE092300F30791 /* YHAnalyItemDataTest.m in Sources */,
);
...
...
YH_Analytics/YH_Analytics/YH_Analytics/Utils/YHAssemblyAssistant.h
View file @
066c39b
...
...
@@ -7,6 +7,7 @@
//
#import <Foundation/Foundation.h>
#import <CoreLocation/CoreLocation.h>
#import "YHNetworkAssistant.h"
#import "YHDevice.h"
#import "YHStatus.h"
...
...
@@ -27,8 +28,8 @@ extern NSString * const JsonKeyDataTypeErrors;
@interface
YHAssemblyAssistant
:
NSObject
@property
(
strong
,
nonatomic
)
YHDevice
*
device
;
@property
(
strong
,
nonatomic
)
YHStatus
*
currentStatus
;
@property
(
strong
,
nonatomic
,
readonly
)
YHDevice
*
device
;
@property
(
strong
,
nonatomic
,
readonly
)
YHStatus
*
currentStatus
;
@property
(
strong
,
nonatomic
)
NSMutableDictionary
*
immediUploadItemDic
;
// 用于立即发送策略下(device信息是相同的)
+
(
instancetype
)
sharedInstance
;
...
...
@@ -49,4 +50,6 @@ extern NSString * const JsonKeyDataTypeErrors;
-
(
void
)
uploadImmedilyWithEvent
:(
YHAnalyItemData
*
)
itemData
;
-
(
BOOL
)
updateLocation
:(
CLLocation
*
)
location
;
@end
...
...
YH_Analytics/YH_Analytics/YH_Analytics/Utils/YHAssemblyAssistant.m
View file @
066c39b
...
...
@@ -27,6 +27,9 @@ NSString * const JsonKeyDataTypeErrors = @"errors";
@interface
YHAssemblyAssistant
()
@property
(
strong
,
nonatomic
)
YHDevice
*
device
;
@property
(
strong
,
nonatomic
)
YHStatus
*
currentStatus
;
@property
(
assign
,
nonatomic
)
NSUInteger
allEventsCount
;
// 本地持久化event的条数
@property
(
strong
,
nonatomic
)
NSString
*
eventFilePath
;
@property
(
strong
,
nonatomic
)
NSString
*
eventFileName
;
...
...
@@ -321,5 +324,22 @@ static dispatch_queue_t persisitingQueue;
self
.
allEventsCount
=
0
;
}
-
(
BOOL
)
updateLocation
:
(
CLLocation
*
)
location
{
NSNumber
*
loNumber
=
[
NSNumber
numberWithDouble
:
location
.
coordinate
.
longitude
];
NSNumber
*
laNumber
=
[
NSNumber
numberWithDouble
:
location
.
coordinate
.
latitude
];
NSString
*
lo
=
[
loNumber
stringValue
];
NSString
*
la
=
[
laNumber
stringValue
];
NSLog
(
@"newLocation: {longitude:%@, latitude:%@}"
,
lo
,
la
);
if
([
lo
isEqualToString
:
self
.
currentStatus
.
lo
]
&&
[
la
isEqualToString
:
self
.
currentStatus
.
la
])
{
return
NO
;
}
// 更新经纬度
self
.
currentStatus
.
lo
=
lo
;
self
.
currentStatus
.
la
=
la
;
return
YES
;
}
@end
...
...
YH_Analytics/YH_Analytics/YH_Analytics/YH_Analytics.h
View file @
066c39b
...
...
@@ -7,7 +7,9 @@
//
#import <Foundation/Foundation.h>
#import <CoreLocation/CoreLocation.h>
#import "YHError.h"
#import "YHEvent.h"
#define kKeyUserDefaultsLastUploadTimestamp @"lastSendTimestampKey"
#define kKeyUserDefaultsCustomInterval @"customInterval"
...
...
@@ -18,7 +20,7 @@ typedef enum _YohoMobStatLogStrategy {
LogStrategyImmedi
// 立即发送
}
YHLogStrategy
;
@interface
YH_Analytics
:
NSObject
@interface
YH_Analytics
:
NSObject
<
CLLocationManagerDelegate
>
/**
* 获取统计对象的实例
*/
...
...
@@ -74,6 +76,19 @@ typedef enum _YohoMobStatLogStrategy {
*/
@property
(
strong
,
nonatomic
)
NSString
*
uid
;
/**
* 发送的事件
*/
@property
(
strong
,
nonatomic
,
readonly
)
YHEvent
*
event
;
/**
* 发送的错误
*/
@property
(
strong
,
nonatomic
,
readonly
)
YHError
*
error
;
/**
* 定位服务
*/
@property
(
strong
,
nonatomic
)
CLLocationManager
*
locationManager
;
@end
...
...
YH_Analytics/YH_Analytics/YH_Analytics/YH_Analytics.m
View file @
066c39b
...
...
@@ -6,7 +6,6 @@
// Copyright (c) 2015年 YOHO. All rights reserved.
//
#import <CoreLocation/CoreLocation.h>
#import <CoreTelephony/CTCarrier.h>
#import <CoreTelephony/CTTelephonyNetworkInfo.h>
//#import "YHErrorFactory.h"
...
...
@@ -19,7 +18,6 @@
#import "YHCrashReporter.h"
#import "YHAssemblyAssistant.h"
#import "OpenUDID.h"
#import "YHEvent.h"
#define kNetWorkStatusUnknow @"0"
...
...
@@ -30,8 +28,7 @@
@interface
YH_Analytics
()
<
CLLocationManagerDelegate
>
@interface
YH_Analytics
()
@property
(
assign
,
nonatomic
)
BOOL
isLogSystemWorking
;
...
...
@@ -39,7 +36,10 @@
@property
(
assign
,
nonatomic
)
NSUInteger
eventIndex
;
// 操作序数
@property
(
strong
,
nonatomic
)
NSTimer
*
timer
;
@property
(
assign
,
nonatomic
)
NSTimeInterval
currentInterval
;
@property
(
strong
,
nonatomic
)
CLLocationManager
*
locationManager
;
@property
(
strong
,
nonatomic
)
YHEvent
*
event
;
@property
(
strong
,
nonatomic
)
YHError
*
error
;
-
(
NSString
*
)
timestamp
;
...
...
@@ -240,22 +240,24 @@ static dispatch_queue_t persisitingQueue;
// 记录event
-
(
void
)
logEvent
:
(
NSString
*
)
eventId
parameters
:
(
NSDictionary
*
)
param
{
NSLog
(
@"logEvent %@, %@"
,
eventId
,
param
);
[
self
startLocationService
];
YHEvent
*
event
=
[[
YHEvent
alloc
]
init
];
event
.
op
=
eventId
;
event
.
uid
=
self
.
uid
?
self
.
uid
:
@""
;
event
.
ts
=
[
self
timestamp
];
event
.
sid
=
self
.
session
;
self
.
event
=
[[
YHEvent
alloc
]
init
];
self
.
event
.
op
=
eventId
;
self
.
event
.
uid
=
self
.
uid
?
self
.
uid
:
@""
;
self
.
event
.
ts
=
[
self
timestamp
];
self
.
event
.
sid
=
self
.
session
;
self
.
eventIndex
++
;
event
.
index
=
[
NSString
stringWithFormat
:
@"%lu"
,
(
unsigned
long
)
self
.
eventIndex
];
event
.
param
=
param
;
self
.
event
.
index
=
[
NSString
stringWithFormat
:
@"%lu"
,
(
unsigned
long
)
self
.
eventIndex
];
self
.
event
.
param
=
param
;
// 立即发送策略
if
(
self
.
logStrategy
==
LogStrategyImmedi
)
{
[[
YHAssemblyAssistant
sharedInstance
]
uploadImmedilyWithEvent
:
event
];
[[
YHAssemblyAssistant
sharedInstance
]
uploadImmedilyWithEvent
:
self
.
event
];
}
else
{
[[
YHAssemblyAssistant
sharedInstance
]
saveItemData
:
event
];
[[
YHAssemblyAssistant
sharedInstance
]
saveItemData
:
self
.
event
];
}
}
...
...
@@ -263,17 +265,19 @@ static dispatch_queue_t persisitingQueue;
// 记录错误数据
-
(
void
)
logError
:
(
NSString
*
)
errorType
parameters
:
(
NSDictionary
*
)
param
{
YHError
*
error
=
[[
YHError
alloc
]
init
];
error
.
et
=
errorType
;
error
.
uid
=
self
.
uid
?
self
.
uid
:
@""
;
error
.
ts
=
[
self
timestamp
];
error
.
sid
=
self
.
session
;
error
.
param
=
param
;
NSLog
(
@"logError %@, %@"
,
errorType
,
param
);
self
.
error
=
[[
YHError
alloc
]
init
];
self
.
error
.
et
=
errorType
;
self
.
error
.
uid
=
self
.
uid
?
self
.
uid
:
@""
;
self
.
error
.
ts
=
[
self
timestamp
];
self
.
error
.
sid
=
self
.
session
;
self
.
error
.
param
=
param
;
if
(
self
.
logStrategy
==
LogStrategyImmedi
)
{
[[
YHAssemblyAssistant
sharedInstance
]
uploadImmedilyWithEvent
:
error
];
[[
YHAssemblyAssistant
sharedInstance
]
uploadImmedilyWithEvent
:
self
.
error
];
}
else
{
[[
YHAssemblyAssistant
sharedInstance
]
saveItemData
:
error
];
[[
YHAssemblyAssistant
sharedInstance
]
saveItemData
:
self
.
error
];
}
}
...
...
@@ -296,10 +300,12 @@ static dispatch_queue_t persisitingQueue;
{
NSUserDefaults
*
defaults
=
[
NSUserDefaults
standardUserDefaults
];
NSString
*
lastUploadTime
=
[
defaults
objectForKey
:
kKeyUserDefaultsLastUploadTimestamp
];
NSInteger
uploadTimeInterval
=
[[
self
timestamp
]
integerValue
]
-
[
lastUploadTime
integerValue
];
NSString
*
timeStamp
=
[
self
timestamp
];
NSInteger
uploadTimeInterval
=
[
timeStamp
integerValue
]
-
[
lastUploadTime
integerValue
];
if
(
uploadTimeInterval
>
self
.
currentInterval
)
{
[
self
uploadDiskData
];
[
defaults
setObject
:
[
self
timestamp
]
forKey
:
kKeyUserDefaultsLastUploadTimestamp
];
[
defaults
setObject
:
timeStamp
forKey
:
kKeyUserDefaultsLastUploadTimestamp
];
[
defaults
synchronize
];
}
}
...
...
@@ -320,27 +326,15 @@ static dispatch_queue_t persisitingQueue;
}
//协议中的方法,作用是每当位置发生更新时会调用的委托方法
-
(
void
)
locationManager
:
(
CLLocationManager
*
)
manager
didUpdateToLocation
:
(
CLLocation
*
)
newLocation
fromLocation
:
(
CLLocation
*
)
oldLocation
-
(
void
)
locationManager
:
(
CLLocationManager
*
)
manager
didUpdateToLocation
:
(
CLLocation
*
)
newLocation
fromLocation
:
(
CLLocation
*
)
oldLocation
{
CLLocationCoordinate2D
loc
=
[
newLocation
coordinate
];
NSNumber
*
loNumber
=
[
NSNumber
numberWithDouble
:
loc
.
longitude
];
NSNumber
*
laNumber
=
[
NSNumber
numberWithDouble
:
loc
.
latitude
];
NSString
*
lo
=
[
loNumber
stringValue
];
NSString
*
la
=
[
laNumber
stringValue
];
NSLog
(
@"newLocation: {longitude:%@, latitude:%@}"
,
lo
,
la
);
if
(
!
[
lo
isEqualToString
:[
YHAssemblyAssistant
sharedInstance
].
currentStatus
.
lo
]
||
!
[
la
isEqualToString
:[
YHAssemblyAssistant
sharedInstance
].
currentStatus
.
la
])
{
// 更新经纬度
[
YHAssemblyAssistant
sharedInstance
].
currentStatus
.
lo
=
lo
;
[
YHAssemblyAssistant
sharedInstance
].
currentStatus
.
la
=
la
;
if
([[
YHAssemblyAssistant
sharedInstance
]
updateLocation
:
newLocation
])
{
[[
YHAssemblyAssistant
sharedInstance
]
updateImmediUploadDic
];
}
}
//当位置获取或更新失败会调用的方法
-
(
void
)
locationManager
:
(
CLLocationManager
*
)
manager
didFailWithError
:
(
NSError
*
)
error
-
(
void
)
locationManager
:
(
CLLocationManager
*
)
manager
didFailWithError
:
(
NSError
*
)
error
{
NSString
*
errorMsg
=
nil
;
if
([
error
code
]
==
kCLErrorDenied
)
{
...
...
@@ -353,14 +347,14 @@ static dispatch_queue_t persisitingQueue;
}
-
(
void
)
setLogStrategy
:
(
YHLogStrategy
)
strategyNumber
-
(
void
)
setLogStrategy
:
(
YHLogStrategy
)
strategyNumber
{
NSUserDefaults
*
strategy
=
[
NSUserDefaults
standardUserDefaults
];
[
strategy
setObject
:
[
NSNumber
numberWithInteger
:
strategyNumber
]
forKey
:
@"LOGSTRATEGY"
];
[
strategy
synchronize
];
}
-
(
YHLogStrategy
)
logStrategy
-
(
YHLogStrategy
)
logStrategy
{
NSUserDefaults
*
strategy
=
[
NSUserDefaults
standardUserDefaults
];
NSNumber
*
strategyObj
=
[
strategy
objectForKey
:
@"LOGSTRATEGY"
];
...
...
YH_Analytics/YH_AnalyticsTests/FakeLocationManager.h
0 → 100644
View file @
066c39b
//
// FakeLocationManager.h
// YH_Analytics
//
// Created by Zhou Rongjun on 15/4/20.
// Copyright (c) 2015年 YOHO. All rights reserved.
//
#import <CoreLocation/CoreLocation.h>
@interface
FakeLocationManager
:
NSObject
@property
(
assign
,
nonatomic
)
id
<
CLLocationManagerDelegate
>
delegate
;
-
(
void
)
startUpdatingLocation
;
-
(
void
)
changeAuthorizationStatus
:(
CLAuthorizationStatus
)
status
;
-
(
void
)
updateLocation
:(
CLLocation
*
)
newLocation
oldLocation
:(
CLLocation
*
)
oldLocation
;
-
(
void
)
failedLocation
:(
NSError
*
)
error
;
@end
...
...
YH_Analytics/YH_AnalyticsTests/FakeLocationManager.m
0 → 100644
View file @
066c39b
//
// FakeLocationManager.m
// YH_Analytics
//
// Created by Zhou Rongjun on 15/4/20.
// Copyright (c) 2015年 YOHO. All rights reserved.
//
#import "FakeLocationManager.h"
@implementation
FakeLocationManager
-
(
void
)
startUpdatingLocation
{
}
-
(
void
)
changeAuthorizationStatus
:
(
CLAuthorizationStatus
)
status
{
if
(
self
.
delegate
&&
[
self
.
delegate
respondsToSelector
:
@selector
(
locationManager
:
didChangeAuthorizationStatus
:)])
{
[
self
.
delegate
locationManager
:
self
didChangeAuthorizationStatus
:
status
];
}
}
-
(
void
)
updateLocation
:
(
CLLocation
*
)
newLocation
oldLocation
:
(
CLLocation
*
)
oldLocation
{
if
(
self
.
delegate
&&
[
self
.
delegate
respondsToSelector
:
@selector
(
locationManager
:
didUpdateToLocation
:
fromLocation
:)])
{
[
self
.
delegate
locationManager
:
self
didUpdateToLocation
:
newLocation
fromLocation
:
oldLocation
];
}
}
-
(
void
)
failedLocation
:
(
NSError
*
)
error
{
if
(
self
.
delegate
&&
[
self
.
delegate
respondsToSelector
:
@selector
(
locationManager
:
didFailWithError
:)])
{
[
self
.
delegate
locationManager
:
self
didFailWithError
:
error
];
}
}
@end
...
...
YH_Analytics/YH_AnalyticsTests/YH_AnalyticsLogicTests.m
View file @
066c39b
...
...
@@ -13,6 +13,9 @@
#import "YHCrashReporter.h"
#import "YHAssemblyAssistant.h"
#import "YH_Analytics.h"
#import "YHEvent.h"
#import "FakeLocationManager.h"
@interface
YH_AnalyticsLogicTests
:
XCTestCase
{
@private
...
...
@@ -38,6 +41,8 @@
networkAssistantMock
=
OCMClassMock
([
YHNetworkAssistant
class
]);
OCMStub
([
networkAssistantMock
sharedInstance
]).
andReturn
(
networkAssistantMock
);
analytics
=
[[
YH_Analytics
alloc
]
init
];
}
-
(
void
)
tearDown
{
...
...
@@ -45,26 +50,41 @@
[
super
tearDown
];
}
#pragma mark -
逻辑分支
测试
#pragma mark -
行为
测试
-
(
void
)
testStartWithAppIdMethod
PrepareImmediUploadDic
{
-
(
void
)
testStartWithAppIdMethod
{
NSLog
(
@"%@ start"
,
self
.
name
);
analytics
=
[[
YH_Analytics
alloc
]
init
];
OCMExpect
([
networkAssistantMock
addReachabilityChangedHandler
:[
OCMArg
any
]]);
OCMExpect
(
ClassMethod
([
crashReporterMock
sharedInstance
]));
OCMExpect
([
assemblyAssistantMock
prepareImmediUploadDic
]);
[
analytics
startWithAppId
:
@"appId"
];
OCMVerifyAll
(
networkAssistantMock
);
OCMVerify
(
ClassMethod
([
crashReporterMock
sharedInstance
]));
OCMVerifyAll
(
assemblyAssistantMock
);
NSLog
(
@"%@ end"
,
self
.
name
);
}
-
(
void
)
testStartWithAppIdMethod
WithLogStrategyAppLaunch
{
-
(
void
)
testStartWithAppIdMethod
ReceiveNotification
{
NSLog
(
@"%@ start"
,
self
.
name
);
analytics
=
[[
YH_Analytics
alloc
]
init
];
// NSNotificationCenter *center = [[NSNotificationCenter alloc] init];
// id observerMock = [OCMockObject observerMock];
//
// [center addMockObserver:observerMock name:UIApplicationWillEnterForegroundNotification object:nil];
// [[observerMock expect] notificationWithName:UIApplicationWillEnterForegroundNotification object:[OCMArg any]];
NSLog
(
@"%@ end"
,
self
.
name
);
}
-
(
void
)
testStartWithAppIdMethodWithLogStrategyAppLaunch
{
NSLog
(
@"%@ start"
,
self
.
name
);
analytics
.
logStrategy
=
LogStrategyAppLaunch
;
OCMExpect
([
assemblyAssistantMock
uploadDiskData
]);
...
...
@@ -78,8 +98,7 @@
-
(
void
)
testStartWithAppIdMethodWithLogStrategyCustom
{
NSLog
(
@"%@ start"
,
self
.
name
);
analytics
=
[[
YH_Analytics
alloc
]
init
];
analytics
.
logStrategy
=
LogStrategyCustom
;
OCMExpect
([
assemblyAssistantMock
uploadDiskData
]);
...
...
@@ -94,25 +113,37 @@
-
(
void
)
testStartWithAppIdMethodWithLogStrategyImmedi
{
NSLog
(
@"%@ start"
,
self
.
name
);
analytics
=
[[
YH_Analytics
alloc
]
init
];
analytics
.
logStrategy
=
LogStrategyImmedi
;
OCMExpect
([
assemblyAssistantMock
uploadDiskData
])
;
[[
assemblyAssistantMock
reject
]
uploadDiskData
]
;
[
analytics
startWithAppId
:
@"appId"
];
XCTAssertThrows
([
assemblyAssistantMock
verify
],
@"StartWithAppId should not uploadDiskData when strategy is immediately."
)
;
OCMVerifyAll
(
assemblyAssistantMock
)
;
NSLog
(
@"%@ end"
,
self
.
name
);
}
-
(
void
)
testLogEventMethodWith
LogStrategyImmedi
{
-
(
void
)
testLogEventMethodWith
SpecailEvent
{
NSLog
(
@"%@ start"
,
self
.
name
);
NSString
*
eventId
=
@"eventId"
;
NSDictionary
*
param
=
@
{
@"key"
:
@"value"
};
[
analytics
logEvent
:
eventId
parameters
:
param
];
XCTAssertEqual
(
analytics
.
event
.
op
,
eventId
);
XCTAssertEqual
(
analytics
.
event
.
param
,
param
);
analytics
=
[[
YH_Analytics
alloc
]
init
];
NSLog
(
@"%@ end"
,
self
.
name
);
}
-
(
void
)
testLogEventMethodWithLogStrategyImmedi
{
NSLog
(
@"%@ start"
,
self
.
name
);
analytics
.
logStrategy
=
LogStrategyImmedi
;
OCMExpect
([
assemblyAssistantMock
uploadImmedilyWithEvent
:[
OCMArg
any
]]);
OCMExpect
([
assemblyAssistantMock
uploadImmedilyWithEvent
:[
OCMArg
isKindOfClass
:[
YHEvent
class
]
]]);
[
analytics
logEvent
:
@"eventId"
parameters
:
nil
];
...
...
@@ -124,10 +155,9 @@
-
(
void
)
testLogEventMethodWithLogStrategyAppLaunch
{
NSLog
(
@"%@ start"
,
self
.
name
);
analytics
=
[[
YH_Analytics
alloc
]
init
];
analytics
.
logStrategy
=
LogStrategyAppLaunch
;
OCMExpect
([
assemblyAssistantMock
saveItemData
:[
OCMArg
any
]]);
OCMExpect
([
assemblyAssistantMock
saveItemData
:[
OCMArg
isKindOfClass
:[
YHEvent
class
]
]]);
[
analytics
logEvent
:
@"eventId"
parameters
:
nil
];
...
...
@@ -139,10 +169,9 @@
-
(
void
)
testLogEventMethodWithLogStrategyCustom
{
NSLog
(
@"%@ start"
,
self
.
name
);
analytics
=
[[
YH_Analytics
alloc
]
init
];
analytics
.
logStrategy
=
LogStrategyCustom
;
OCMExpect
([
assemblyAssistantMock
saveItemData
:[
OCMArg
any
]]);
OCMExpect
([
assemblyAssistantMock
saveItemData
:[
OCMArg
isKindOfClass
:[
YHEvent
class
]
]]);
[
analytics
logEvent
:
@"eventId"
parameters
:
nil
];
...
...
@@ -151,13 +180,26 @@
NSLog
(
@"%@ end"
,
self
.
name
);
}
-
(
void
)
testLogErrorMethodWithSpecailError
{
NSLog
(
@"%@ start"
,
self
.
name
);
NSString
*
errorId
=
@"errorId"
;
NSDictionary
*
param
=
@
{
@"key"
:
@"value"
};
[
analytics
logError
:
errorId
parameters
:
param
];
XCTAssertEqual
(
analytics
.
error
.
et
,
errorId
);
XCTAssertEqual
(
analytics
.
error
.
param
,
param
);
NSLog
(
@"%@ end"
,
self
.
name
);
}
-
(
void
)
testLogErrorMethodWithLogStrategyImmedi
{
NSLog
(
@"%@ start"
,
self
.
name
);
analytics
=
[[
YH_Analytics
alloc
]
init
];
analytics
.
logStrategy
=
LogStrategyImmedi
;
OCMExpect
([
assemblyAssistantMock
uploadImmedilyWithEvent
:[
OCMArg
any
]]);
OCMExpect
([
assemblyAssistantMock
uploadImmedilyWithEvent
:[
OCMArg
isKindOfClass
:[
YHError
class
]
]]);
[
analytics
logError
:
@"errorId"
parameters
:
nil
];
...
...
@@ -169,10 +211,9 @@
-
(
void
)
testLogErrorMethodWithLogStrategyAppLaunch
{
NSLog
(
@"%@ start"
,
self
.
name
);
analytics
=
[[
YH_Analytics
alloc
]
init
];
analytics
.
logStrategy
=
LogStrategyAppLaunch
;
OCMExpect
([
assemblyAssistantMock
saveItemData
:[
OCMArg
any
]]);
OCMExpect
([
assemblyAssistantMock
saveItemData
:[
OCMArg
isKindOfClass
:[
YHError
class
]
]]);
[
analytics
logError
:
@"errorId"
parameters
:
nil
];
...
...
@@ -184,10 +225,9 @@
-
(
void
)
testLogErrorMethodWithLogStrategyCustom
{
NSLog
(
@"%@ start"
,
self
.
name
);
analytics
=
[[
YH_Analytics
alloc
]
init
];
analytics
.
logStrategy
=
LogStrategyCustom
;
OCMExpect
([
assemblyAssistantMock
saveItemData
:[
OCMArg
any
]]);
OCMExpect
([
assemblyAssistantMock
saveItemData
:[
OCMArg
isKindOfClass
:[
YHError
class
]
]]);
[
analytics
logError
:
@"errorId"
parameters
:
nil
];
...
...
@@ -196,4 +236,41 @@
NSLog
(
@"%@ end"
,
self
.
name
);
}
#pragma mark - Test Location Sevice
-
(
void
)
testLocationUpdateSuccess
{
NSLog
(
@"%@ start"
,
self
.
name
);
analytics
.
locationManager
=
[[
FakeLocationManager
alloc
]
init
];
analytics
.
locationManager
.
delegate
=
analytics
;
CLLocation
*
newLocation
=
[[
CLLocation
alloc
]
initWithLatitude
:
20
.
0
f
longitude
:
120
.
0
f
];
[[[
assemblyAssistantMock
expect
]
andReturnValue
:
@YES
]
updateLocation
:
newLocation
];
OCMExpect
([
assemblyAssistantMock
updateImmediUploadDic
]);
[
analytics
startWithAppId
:
@"appId"
];
[(
FakeLocationManager
*
)
analytics
.
locationManager
updateLocation
:
newLocation
oldLocation
:
nil
];
OCMVerifyAll
(
assemblyAssistantMock
);
NSLog
(
@"%@ end"
,
self
.
name
);
}
-
(
void
)
testLocationUpdateFailed
{
NSLog
(
@"%@ start"
,
self
.
name
);
analytics
.
locationManager
=
[[
FakeLocationManager
alloc
]
init
];
analytics
.
locationManager
.
delegate
=
analytics
;
CLLocation
*
newLocation
=
[[
CLLocation
alloc
]
initWithLatitude
:
20
.
0
f
longitude
:
120
.
0
f
];
[[[
assemblyAssistantMock
expect
]
andReturnValue
:
@NO
]
updateLocation
:
newLocation
];
[[
assemblyAssistantMock
reject
]
updateImmediUploadDic
];
[
analytics
startWithAppId
:
@"appId"
];
[(
FakeLocationManager
*
)
analytics
.
locationManager
updateLocation
:
newLocation
oldLocation
:
nil
];
OCMVerifyAll
(
assemblyAssistantMock
);
NSLog
(
@"%@ end"
,
self
.
name
);
}
@end
...
...
YH_Analytics/YH_AnalyticsTests/YH_AnalyticsTests.m
View file @
066c39b
...
...
@@ -24,7 +24,7 @@
[
super
setUp
];
// Put setup code here. This method is called before the invocation of each test method in the class.
NSLog
(
@"%@ setUp"
,
self
.
name
);
mock
=
[
OCMockObject
mockForClass
:[
YH_Analytics
class
]]
;
mock
=
OCMClassMock
([
YH_Analytics
class
])
;
XCTAssertNotNil
(
mock
,
@"Cannot create YH_Analytics mock"
);
}
...
...
Please
register
or
login
to post a comment