summaryrefslogtreecommitdiff
path: root/platform/ios/test/MGLMapViewPitchTests.m
diff options
context:
space:
mode:
Diffstat (limited to 'platform/ios/test/MGLMapViewPitchTests.m')
-rw-r--r--platform/ios/test/MGLMapViewPitchTests.m190
1 files changed, 0 insertions, 190 deletions
diff --git a/platform/ios/test/MGLMapViewPitchTests.m b/platform/ios/test/MGLMapViewPitchTests.m
deleted file mode 100644
index fa657eb994..0000000000
--- a/platform/ios/test/MGLMapViewPitchTests.m
+++ /dev/null
@@ -1,190 +0,0 @@
-#import <Mapbox/Mapbox.h>
-#import <XCTest/XCTest.h>
-
-@interface MockUIPanGestureRecognizer : UIPanGestureRecognizer
-@property(nonatomic, readwrite) UIGestureRecognizerState state;
-@property NSUInteger mbx_numberOfFingersForGesture;
-@property CGPoint mbx_middlePoint;
-@property CGPoint mbx_westPoint;
-@property CGPoint mbx_eastPoint;
-@end
-
-@implementation MockUIPanGestureRecognizer
-
-@synthesize state;
-
-- (instancetype)initWithTarget:(id)target action:(SEL)action {
- if (self = [super initWithTarget:target action:action]) {
- self.mbx_numberOfFingersForGesture = 2;
- self.mbx_westPoint = CGPointMake(100, 0);
- self.mbx_eastPoint = CGPointMake(200, 0);
- }
- return self;
-}
-- (NSUInteger)numberOfTouches { return self.mbx_numberOfFingersForGesture; }
-- (CGPoint)translationInView:(UIView *)view { return self.mbx_middlePoint; }
-- (CGPoint)locationOfTouch:(NSUInteger)touchIndex inView:(UIView *)view {
- if (touchIndex == 0) {
- return self.mbx_westPoint;
- }
- return self.mbx_eastPoint;
-}
-- (void)setTiltGestureYTranslationForPitchDegrees:(CGFloat)degrees {
- // The tilt gesture takes the number of screen points the fingers have moved and then divides them by a "slowdown" factor, which happens to be set to 2.0 in -[MGLMapView handleTwoFingerDragGesture:].
- CGFloat mbx_tiltGestureYTranslation = -(degrees * 2.0);
- self.mbx_westPoint = CGPointMake(self.mbx_westPoint.x, mbx_tiltGestureYTranslation);
- self.mbx_eastPoint = CGPointMake(self.mbx_eastPoint.x, mbx_tiltGestureYTranslation);
- self.mbx_middlePoint = CGPointMake(self.mbx_middlePoint.x, mbx_tiltGestureYTranslation);
-}
-@end
-
-// Forward declare relevant private methods
-@interface MGLMapView (MGLMapViewPitchTests)
-- (void)handleTwoFingerDragGesture:(UIPanGestureRecognizer *)rotate;
-- (MGLMapCamera *)cameraByTiltingToPitch:(CGFloat)pitch;
-@end
-
-@interface MGLMapViewPitchTests : XCTestCase
-@property (nonatomic) MGLMapView *mapView;
-@end
-
-@implementation MGLMapViewPitchTests
-
-- (void)setUp {
- [super setUp];
-
- [MGLAccountManager setAccessToken:@"pk.feedcafedeadbeefbadebede"];
- NSURL *styleURL = [[NSBundle bundleForClass:[self class]] URLForResource:@"one-liner" withExtension:@"json"];
- self.mapView = [[MGLMapView alloc] initWithFrame:CGRectMake(0, 0, 400, 400) styleURL:styleURL];
-}
-
-- (void)tearDown {
- self.mapView = nil;
- [MGLAccountManager setAccessToken:nil];
- [super tearDown];
-}
-
-- (void)testPitchEnabled {
- self.mapView.pitchEnabled = NO;
- self.mapView.camera = [self.mapView cameraByTiltingToPitch:30];
- XCTAssertEqualWithAccuracy(self.mapView.camera.pitch, 30, 0.001, @"Tilt should not be set when pitchEnabled = NO.");
-
- self.mapView.pitchEnabled = YES;
- self.mapView.camera = [self.mapView cameraByTiltingToPitch:30];
- XCTAssertEqualWithAccuracy(self.mapView.camera.pitch, 30, 0.001, @"Tilt should be set when pitchEnabled = YES.");
-}
-
-- (void)testPitchInValidRange {
- for (NSNumber *degrees in @[@0, @5, @20, @40, @60]) {
- CGFloat inputDegrees = [degrees floatValue];
- self.mapView.camera = [self.mapView cameraByTiltingToPitch:inputDegrees];
- XCTAssertEqualWithAccuracy(self.mapView.camera.pitch, inputDegrees, 0.001, @"Tilt should be able to be set within range 0-60°.");
- }
-}
-
-- (void)testNegativePitchClamping {
- for (NSNumber *degrees in @[@CGFLOAT_MIN, @-999, @-60, @-30, @-0]) {
- CGFloat inputDegrees = [degrees floatValue];
- self.mapView.camera = [self.mapView cameraByTiltingToPitch:inputDegrees];
- XCTAssertEqualWithAccuracy(self.mapView.camera.pitch, 0, 0.001, @"Minimum tilt should be clamped to 0°.");
- }
-}
-
-- (void)testPositivePitchClamping {
- for (NSNumber *degrees in @[@61, @90, @999, @CGFLOAT_MAX]) {
- CGFloat inputDegrees = [degrees floatValue];
- self.mapView.camera = [self.mapView cameraByTiltingToPitch:inputDegrees];
- XCTAssertEqualWithAccuracy(self.mapView.camera.pitch, 60, 0.001, @"Maximum tilt should be clamped to 60°.");
- }
-}
-
-- (void)testPitchAtVariousZoomLevels {
- for (NSNumber *zoomLevel in @[@0, @5, @10, @15, @18, @21, @CGFLOAT_MAX]) {
- self.mapView.camera = [self.mapView cameraByTiltingToPitch:0];
- self.mapView.zoomLevel = 0;
-
- CGFloat inputZoomLevel = [zoomLevel floatValue];
- self.mapView.zoomLevel = inputZoomLevel;
- self.mapView.camera = [self.mapView cameraByTiltingToPitch:30];
- XCTAssertEqualWithAccuracy(self.mapView.camera.pitch, 30, 0.001, @"Tilting should be allowed at z%.f.", inputZoomLevel);
- }
-}
-
-- (void)testTiltGesture {
- MockUIPanGestureRecognizer *gesture = [[MockUIPanGestureRecognizer alloc] initWithTarget:self.mapView action:nil];
- gesture.state = UIGestureRecognizerStateBegan;
- [self.mapView handleTwoFingerDragGesture:gesture];
- XCTAssertEqual(self.mapView.camera.pitch, 0, @"Pitch should initially be set to 0°.");
-
- // Use a tilt gesture to tilt the map within its acceptable range (0-60°).
- for (NSNumber *degrees in @[@0, @5, @20, @40, @60]) {
- self.mapView.camera = [self.mapView cameraByTiltingToPitch:0];
- gesture.state = UIGestureRecognizerStateChanged;
-
- CGFloat inputDegrees = [degrees floatValue];
- [gesture setTiltGestureYTranslationForPitchDegrees:inputDegrees];
- [self.mapView handleTwoFingerDragGesture:gesture];
- XCTAssertEqualWithAccuracy(self.mapView.camera.pitch, inputDegrees, 0.001, @"Pitch should be set to %.f°.", inputDegrees);
- }
-}
-
-- (void)testHorizontalTiltGesture {
- MockUIPanGestureRecognizer *gesture = [[MockUIPanGestureRecognizer alloc] initWithTarget:self.mapView action:nil];
- gesture.state = UIGestureRecognizerStateBegan;
- [self.mapView handleTwoFingerDragGesture:gesture];
- XCTAssertEqual(self.mapView.camera.pitch, 0, @"Pitch should initially be set to 0°.");
-
- // Tilt gestures should not be triggered on horizontal dragging.
- for (NSInteger deltaX = 0; deltaX < 5; deltaX++) {
- gesture.mbx_westPoint = CGPointMake(100 - deltaX, 100);
- gesture.mbx_eastPoint = CGPointMake(100 - deltaX, 50);
- gesture.mbx_middlePoint = CGPointMake((gesture.mbx_westPoint.x + gesture.mbx_westPoint.x)/2, (gesture.mbx_westPoint.y + gesture.mbx_westPoint.y)/2);
-
- gesture.state = UIGestureRecognizerStateChanged;
-
- [self.mapView handleTwoFingerDragGesture:gesture];
- XCTAssertEqual(self.mapView.camera.pitch, 0, @"Horizontal dragging should not tilt the map.");
- }
-}
-
-- (void)testTiltGestureFromInitialTilt {
- CGFloat initialTilt = 20;
- CGFloat additionalTilt = 30;
-
- // Set the map camera to a pitched state, perhaps from a previous gesture or camera movement.
- self.mapView.camera = [self.mapView cameraByTiltingToPitch:initialTilt];
- XCTAssertEqual(self.mapView.camera.pitch, initialTilt, @"Tilt should initially be set to %.f°.", initialTilt);
-
- // Initialize a tilt gesture.
- MockUIPanGestureRecognizer *gesture = [[MockUIPanGestureRecognizer alloc] initWithTarget:self.mapView action:nil];
- gesture.state = UIGestureRecognizerStateBegan;
- [self.mapView handleTwoFingerDragGesture:gesture];
-
- // Use the gesture to tilt the map even more.
- gesture.state = UIGestureRecognizerStateChanged;
- [gesture setTiltGestureYTranslationForPitchDegrees:additionalTilt];
- [self.mapView handleTwoFingerDragGesture:gesture];
- XCTAssertEqualWithAccuracy(self.mapView.camera.pitch, initialTilt + additionalTilt, 0.001, @"Tilt should be set to %.f°.", initialTilt + additionalTilt);
-}
-
-- (void)testTiltGestureNumberOfFingersRequired {
- // Initialize a tilt gesture with two fingers.
- MockUIPanGestureRecognizer *gesture = [[MockUIPanGestureRecognizer alloc] initWithTarget:self.mapView action:nil];
- gesture.state = UIGestureRecognizerStateBegan;
- gesture.mbx_numberOfFingersForGesture = 2;
-
- // Use the gesture to tilt to 30°.
- [gesture setTiltGestureYTranslationForPitchDegrees:30];
- [self.mapView handleTwoFingerDragGesture:gesture];
- XCTAssertEqualWithAccuracy(self.mapView.camera.pitch, 30, 0.001, @"Tilt gesture should work with two fingers down.");
-
- // Change the gesture's number of fingers to one and try to update the pitch.
- gesture.mbx_numberOfFingersForGesture = 1;
- gesture.state = UIGestureRecognizerStateChanged;
- [gesture setTiltGestureYTranslationForPitchDegrees:0];
- [self.mapView handleTwoFingerDragGesture:gesture];
- XCTAssertEqual(gesture.state, UIGestureRecognizerStateEnded, @"Gesture should end when the number of fingers is less than two.");
- XCTAssertEqualWithAccuracy(self.mapView.camera.pitch, 30, 0.001, @"Pitch should remain unchanged if gesture has ended.");
-}
-
-@end