forked from parse-community/Parse-SDK-iOS-OSX
-
Notifications
You must be signed in to change notification settings - Fork 0
/
LocationManagerTests.m
127 lines (87 loc) · 4.34 KB
/
LocationManagerTests.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
/**
* Copyright (c) 2015-present, Parse, LLC.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*/
@import CoreLocation;
#import <OCMock/OCMock.h>
#import "PFLocationManager.h"
#import "PFTestCase.h"
#import "PFTestSwizzlingUtilities.h"
@protocol PFTestCLLocationManager <NSObject>
@property (assign, nonatomic) id<CLLocationManagerDelegate> delegate;
- (void)startUpdatingLocation;
- (void)stopUpdatingLocation;
@end
@interface LocationManagerTests : PFTestCase
@end
@implementation LocationManagerTests
///--------------------------------------
#pragma mark - Tests
///--------------------------------------
- (void)testConstructors {
PFLocationManager *locationManager = [[PFLocationManager alloc] init];
XCTAssertNotNil(locationManager);
id mockedSystemLocationManager = PFStrictClassMock([CLLocationManager class]);
OCMStub([mockedSystemLocationManager setDelegate:OCMOCK_ANY]);
locationManager = [[PFLocationManager alloc] initWithSystemLocationManager:mockedSystemLocationManager];
XCTAssertNotNil(locationManager);
#if TARGET_OS_IPHONE
id mockedBundle = PFStrictClassMock([NSBundle class]);
id mockedApplication = PFStrictClassMock([UIApplication class]);
locationManager = [[PFLocationManager alloc] initWithSystemLocationManager:mockedSystemLocationManager
application:mockedApplication
bundle:mockedBundle];
XCTAssertNotNil(locationManager);
#endif
}
- (void)testAddBlockWithoutAnyAutorization {
CLLocation *expectedLocation = [[CLLocation alloc] initWithLatitude:13.37 longitude:1337];
id mockedSystemLocationManager = PFStrictProtocolMock(@protocol(PFTestCLLocationManager));
__block __weak id<CLLocationManagerDelegate> delegate = nil;
OCMStub([mockedSystemLocationManager setDelegate:OCMOCK_ANY]).andDo(^(NSInvocation *invocation) {
__unsafe_unretained id argument = nil;
[invocation getArgument:&argument atIndex:2];
delegate = argument;
});
OCMExpect([mockedSystemLocationManager startUpdatingLocation]).andDo(^(NSInvocation *invoke) {
[delegate locationManager:mockedSystemLocationManager didUpdateLocations:@[ expectedLocation ]];
});
OCMExpect([mockedSystemLocationManager stopUpdatingLocation]);
PFLocationManager *locationManager = [[PFLocationManager alloc] initWithSystemLocationManager:mockedSystemLocationManager];
XCTestExpectation *expectation = [self currentSelectorTestExpectation];
[locationManager addBlockForCurrentLocation:^(CLLocation *location, NSError *error) {
XCTAssertNil(error);
XCTAssertEqual(location.coordinate.latitude, 13.37);
XCTAssertEqual(location.coordinate.longitude, 1337);
[expectation fulfill];
}];
[self waitForTestExpectations];
OCMVerifyAll(mockedSystemLocationManager);
}
- (void)testFailWithError {
NSError *expectedError = [NSError errorWithDomain:PFParseErrorDomain code:13337 userInfo:nil];
id mockedSystemLocationManager = PFStrictProtocolMock(@protocol(PFTestCLLocationManager));
__block __weak id<CLLocationManagerDelegate> delegate = nil;
OCMStub([mockedSystemLocationManager setDelegate:OCMOCK_ANY]).andDo(^(NSInvocation *invocation) {
__unsafe_unretained id argument = nil;
[invocation getArgument:&argument atIndex:2];
delegate = argument;
});
OCMExpect([mockedSystemLocationManager startUpdatingLocation]).andDo(^(NSInvocation *invoke) {
[delegate locationManager:mockedSystemLocationManager didFailWithError:expectedError];
});
OCMExpect([mockedSystemLocationManager stopUpdatingLocation]);
PFLocationManager *locationManager = [[PFLocationManager alloc] initWithSystemLocationManager:mockedSystemLocationManager];
XCTestExpectation *expectation = [self currentSelectorTestExpectation];
[locationManager addBlockForCurrentLocation:^(CLLocation *location, NSError *error) {
XCTAssertEqualObjects(error, expectedError);
[expectation fulfill];
}];
[self waitForTestExpectations];
OCMVerifyAll(mockedSystemLocationManager);
}
@end