diff options
author | Minh Nguyễn <mxn@1ec5.org> | 2019-06-21 17:45:36 -0700 |
---|---|---|
committer | Jason Wray <friedbunny@users.noreply.github.com> | 2019-06-21 17:45:36 -0700 |
commit | f7f74a6deb57ad4ac22a30604a0dce39024feca2 (patch) | |
tree | a65905601da41fbcbf771235c6ede56389950ce2 /platform/darwin | |
parent | c40b7279a2df68edb6c7b1ba11586bcbc724e21c (diff) | |
download | qtlocation-mapboxgl-f7f74a6deb57ad4ac22a30604a0dce39024feca2.tar.gz |
[ios, macos] Added completion handlers to animated MGLMapView methods
Diffstat (limited to 'platform/darwin')
-rw-r--r-- | platform/darwin/test/MGLMapViewTests.m | 117 |
1 files changed, 114 insertions, 3 deletions
diff --git a/platform/darwin/test/MGLMapViewTests.m b/platform/darwin/test/MGLMapViewTests.m index 9a8e7bdb64..9ad7016a61 100644 --- a/platform/darwin/test/MGLMapViewTests.m +++ b/platform/darwin/test/MGLMapViewTests.m @@ -1,5 +1,12 @@ #import <Mapbox/Mapbox.h> #import <XCTest/XCTest.h> +#import <TargetConditionals.h> + +#if TARGET_OS_IPHONE + #define MGLEdgeInsetsZero UIEdgeInsetsZero +#else + #define MGLEdgeInsetsZero NSEdgeInsetsZero +#endif static MGLMapView *mapView; @@ -27,13 +34,13 @@ static MGLMapView *mapView; MGLCoordinateBounds leftAntimeridianBounds = MGLCoordinateBoundsMake(CLLocationCoordinate2DMake(-75, 175), CLLocationCoordinate2DMake(75, 180)); CGRect leftAntimeridianBoundsRect = [mapView convertCoordinateBounds:leftAntimeridianBounds toRectToView:mapView]; - + MGLCoordinateBounds rightAntimeridianBounds = MGLCoordinateBoundsMake(CLLocationCoordinate2DMake(-75, -180), CLLocationCoordinate2DMake(75, -175)); CGRect rightAntimeridianBoundsRect = [mapView convertCoordinateBounds:rightAntimeridianBounds toRectToView:mapView]; - + MGLCoordinateBounds spanningBounds = MGLCoordinateBoundsMake(CLLocationCoordinate2DMake(24, 140), CLLocationCoordinate2DMake(44, 240)); CGRect spanningBoundsRect = [mapView convertCoordinateBounds:spanningBounds toRectToView:mapView]; - + // If the resulting CGRect from -convertCoordinateBounds:toRectToView: // intersects the set of bounds to the left and right of the // antimeridian, then we know that the CGRect spans across the antimeridian @@ -41,4 +48,108 @@ static MGLMapView *mapView; XCTAssertTrue(CGRectIntersectsRect(spanningBoundsRect, rightAntimeridianBoundsRect), @"Something"); } +#if TARGET_OS_IPHONE +- (void)testUserTrackingModeCompletion { + __block BOOL completed = NO; + [mapView setUserTrackingMode:MGLUserTrackingModeNone animated:NO completionHandler:^{ + completed = YES; + }]; + XCTAssertTrue(completed, @"Completion block should get called synchronously when the mode is unchanged."); + + completed = NO; + [mapView setUserTrackingMode:MGLUserTrackingModeNone animated:YES completionHandler:^{ + completed = YES; + }]; + XCTAssertTrue(completed, @"Completion block should get called synchronously when the mode is unchanged."); + + completed = NO; + [mapView setUserTrackingMode:MGLUserTrackingModeFollow animated:NO completionHandler:^{ + completed = YES; + }]; + XCTAssertTrue(completed, @"Completion block should get called synchronously when there’s no location."); + + completed = NO; + [mapView setUserTrackingMode:MGLUserTrackingModeFollowWithHeading animated:YES completionHandler:^{ + completed = YES; + }]; + XCTAssertTrue(completed, @"Completion block should get called synchronously when there’s no location."); +} + +- (void)testTargetCoordinateCompletion { + __block BOOL completed = NO; + [mapView setTargetCoordinate:kCLLocationCoordinate2DInvalid animated:NO completionHandler:^{ + completed = YES; + }]; + XCTAssertTrue(completed, @"Completion block should get called synchronously when the target coordinate is unchanged."); + + completed = NO; + [mapView setTargetCoordinate:kCLLocationCoordinate2DInvalid animated:YES completionHandler:^{ + completed = YES; + }]; + XCTAssertTrue(completed, @"Completion block should get called synchronously when the target coordinate is unchanged."); + + completed = NO; + [mapView setUserTrackingMode:MGLUserTrackingModeFollow animated:NO completionHandler:nil]; + [mapView setTargetCoordinate:CLLocationCoordinate2DMake(39.128106, -84.516293) animated:YES completionHandler:^{ + completed = YES; + }]; + XCTAssertTrue(completed, @"Completion block should get called synchronously when not tracking user course."); + + completed = NO; + [mapView setUserTrackingMode:MGLUserTrackingModeFollowWithCourse animated:NO completionHandler:nil]; + [mapView setTargetCoordinate:CLLocationCoordinate2DMake(39.224407, -84.394957) animated:YES completionHandler:^{ + completed = YES; + }]; + XCTAssertTrue(completed, @"Completion block should get called synchronously when there’s no location."); +} +#endif + +- (void)testVisibleCoordinatesCompletion { + XCTestExpectation *expectation = [self expectationWithDescription:@"Completion block should get called when not animated"]; + MGLCoordinateBounds unitBounds = MGLCoordinateBoundsMake(CLLocationCoordinate2DMake(0, 0), CLLocationCoordinate2DMake(1, 1)); + [mapView setVisibleCoordinateBounds:unitBounds edgePadding:MGLEdgeInsetsZero animated:NO completionHandler:^{ + [expectation fulfill]; + }]; + [self waitForExpectations:@[expectation] timeout:1]; + +#if TARGET_OS_IPHONE + expectation = [self expectationWithDescription:@"Completion block should get called when animated"]; + CLLocationCoordinate2D antiunitCoordinates[] = { + CLLocationCoordinate2DMake(0, 0), + CLLocationCoordinate2DMake(-1, -1), + }; + [mapView setVisibleCoordinates:antiunitCoordinates + count:sizeof(antiunitCoordinates) / sizeof(antiunitCoordinates[0]) + edgePadding:UIEdgeInsetsZero + direction:0 + duration:0 + animationTimingFunction:nil + completionHandler:^{ + [expectation fulfill]; + }]; + [self waitForExpectations:@[expectation] timeout:1]; +#endif +} + +- (void)testShowAnnotationsCompletion { + __block BOOL completed = NO; + [mapView showAnnotations:@[] edgePadding:MGLEdgeInsetsZero animated:NO completionHandler:^{ + completed = YES; + }]; + XCTAssertTrue(completed, @"Completion block should get called synchronously when there are no annotations to show."); + + XCTestExpectation *expectation = [self expectationWithDescription:@"Completion block should get called when not animated"]; + MGLPointAnnotation *annotation = [[MGLPointAnnotation alloc] init]; + [mapView showAnnotations:@[annotation] edgePadding:MGLEdgeInsetsZero animated:NO completionHandler:^{ + [expectation fulfill]; + }]; + [self waitForExpectations:@[expectation] timeout:1]; + + expectation = [self expectationWithDescription:@"Completion block should get called when animated."]; + [mapView showAnnotations:@[annotation] edgePadding:MGLEdgeInsetsZero animated:YES completionHandler:^{ + [expectation fulfill]; + }]; + [self waitForExpectations:@[expectation] timeout:1]; +} + @end |