The annotation view test uses a fake MGLTestCalloutView that declares conformance to the MGLCalloutView protocol. However, several properties and a method were not implemented in the test which caused several warnings that were visible if you compiled the SDK tests. This change stubs out the properties and method so the warnings go away.
102 lines
3.3 KiB
Objective-C
102 lines
3.3 KiB
Objective-C
#import <Mapbox/Mapbox.h>
|
|
#import <XCTest/XCTest.h>
|
|
|
|
static NSString * const MGLTestAnnotationReuseIdentifer = @"MGLTestAnnotationReuseIdentifer";
|
|
|
|
@interface MGLAnnotationView (Test)
|
|
@property (nonatomic) MGLMapView *mapView;
|
|
@property (nonatomic, readwrite) MGLAnnotationViewDragState dragState;
|
|
|
|
- (void)setDragState:(MGLAnnotationViewDragState)dragState;
|
|
@end
|
|
|
|
@interface MGLMapView (Test)
|
|
@property (nonatomic) UIView<MGLCalloutView> *calloutViewForSelectedAnnotation;
|
|
@end
|
|
|
|
@interface MGLTestAnnotation : NSObject <MGLAnnotation>
|
|
@property (nonatomic, assign) CLLocationCoordinate2D coordinate;
|
|
@end
|
|
|
|
@implementation MGLTestAnnotation
|
|
@end
|
|
|
|
@interface MGLTestCalloutView: UIView<MGLCalloutView>
|
|
@property (nonatomic) BOOL didCallDismissCalloutAnimated;
|
|
@property (nonatomic, strong) id <MGLAnnotation> representedObject;
|
|
@property (nonatomic, strong) UIView *leftAccessoryView;
|
|
@property (nonatomic, strong) UIView *rightAccessoryView;
|
|
@property (nonatomic, weak) id<MGLCalloutViewDelegate> delegate;
|
|
@end
|
|
|
|
@implementation MGLTestCalloutView
|
|
|
|
- (void)dismissCalloutAnimated:(BOOL)animated
|
|
{
|
|
_didCallDismissCalloutAnimated = YES;
|
|
}
|
|
|
|
- (void)presentCalloutFromRect:(CGRect)rect inView:(UIView *)view constrainedToView:(UIView *)constrainedView animated:(BOOL)animated { }
|
|
|
|
@end
|
|
|
|
@interface MGLAnnotationViewTests : XCTestCase <MGLMapViewDelegate>
|
|
@property (nonatomic) XCTestExpectation *expectation;
|
|
@property (nonatomic) MGLMapView *mapView;
|
|
@property (nonatomic, weak) MGLAnnotationView *annotationView;
|
|
@end
|
|
|
|
@implementation MGLAnnotationViewTests
|
|
|
|
- (void)setUp
|
|
{
|
|
[super setUp];
|
|
_mapView = [[MGLMapView alloc] initWithFrame:CGRectZero];
|
|
_mapView.delegate = self;
|
|
}
|
|
|
|
- (void)testAnnotationView
|
|
{
|
|
_expectation = [self expectationWithDescription:@"annotation property"];
|
|
|
|
MGLTestAnnotation *annotation = [[MGLTestAnnotation alloc] init];
|
|
[_mapView addAnnotation:annotation];
|
|
|
|
[self waitForExpectationsWithTimeout:1 handler:nil];
|
|
|
|
XCTAssert(_mapView.annotations.count == 1, @"number of annotations should be 1");
|
|
XCTAssertNotNil(_annotationView.annotation, @"annotation property should not be nil");
|
|
XCTAssertNotNil(_annotationView.mapView, @"mapView property should not be nil");
|
|
|
|
MGLTestCalloutView *testCalloutView = [[MGLTestCalloutView alloc] init];
|
|
_mapView.calloutViewForSelectedAnnotation = testCalloutView;
|
|
_annotationView.dragState = MGLAnnotationViewDragStateStarting;
|
|
XCTAssertTrue(testCalloutView.didCallDismissCalloutAnimated, @"callout view was not dismissed");
|
|
|
|
[_mapView removeAnnotation:_annotationView.annotation];
|
|
|
|
XCTAssert(_mapView.annotations.count == 0, @"number of annotations should be 0");
|
|
XCTAssertNil(_annotationView.annotation, @"annotation property should be nil");
|
|
}
|
|
|
|
- (MGLAnnotationView *)mapView:(MGLMapView *)mapView viewForAnnotation:(id<MGLAnnotation>)annotation
|
|
{
|
|
MGLAnnotationView *annotationView = [mapView dequeueReusableAnnotationViewWithIdentifier:MGLTestAnnotationReuseIdentifer];
|
|
|
|
if (!annotationView)
|
|
{
|
|
annotationView = [[MGLAnnotationView alloc] initWithReuseIdentifier:MGLTestAnnotationReuseIdentifer];
|
|
}
|
|
|
|
_annotationView = annotationView;
|
|
|
|
return annotationView;
|
|
}
|
|
|
|
- (void)mapView:(MGLMapView *)mapView didAddAnnotationViews:(NSArray<MGLAnnotationView *> *)annotationViews
|
|
{
|
|
[_expectation fulfill];
|
|
}
|
|
|
|
@end
|