[ios] Clean-up direction and compass tests
This commit is contained in:
@@ -426,7 +426,7 @@
|
||||
96E516FB20005A4000A02306 /* MGLUserLocationHeadingBeamLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 966FCF4A1F3A5C9200F2B6DE /* MGLUserLocationHeadingBeamLayer.h */; };
|
||||
96E516FC20005A4400A02306 /* MGLUserLocationHeadingIndicator.h in Headers */ = {isa = PBXBuildFile; fileRef = 96F3F73B1F5711F1003E2D2C /* MGLUserLocationHeadingIndicator.h */; };
|
||||
96E5170420005A6B00A02306 /* SMCalloutView.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8848891CBB037E00AB86E3 /* SMCalloutView.h */; };
|
||||
96E6145622CC135200109F14 /* MGLCompassButtonTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 96E6145522CC135200109F14 /* MGLCompassButtonTests.m */; };
|
||||
96E6145622CC135200109F14 /* MGLMapViewCompassViewTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = 96E6145522CC135200109F14 /* MGLMapViewCompassViewTests.mm */; };
|
||||
96E6145922CC169000109F14 /* MGLCompassButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 96E6145722CC169000109F14 /* MGLCompassButton.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
96E6145A22CC169000109F14 /* MGLCompassButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 96E6145722CC169000109F14 /* MGLCompassButton.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
96E6145B22CC169000109F14 /* MGLCompassButton.mm in Sources */ = {isa = PBXBuildFile; fileRef = 96E6145822CC169000109F14 /* MGLCompassButton.mm */; };
|
||||
@@ -1141,7 +1141,7 @@
|
||||
96E0272C1E57C7E5004B8E66 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/Localizable.strings; sourceTree = "<group>"; };
|
||||
96E0272D1E57C7E6004B8E66 /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vi; path = vi.lproj/Localizable.strings; sourceTree = "<group>"; };
|
||||
96E0272E1E57C7E7004B8E66 /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/Localizable.strings"; sourceTree = "<group>"; };
|
||||
96E6145522CC135200109F14 /* MGLCompassButtonTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MGLCompassButtonTests.m; sourceTree = "<group>"; };
|
||||
96E6145522CC135200109F14 /* MGLMapViewCompassViewTests.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLMapViewCompassViewTests.mm; sourceTree = "<group>"; };
|
||||
96E6145722CC169000109F14 /* MGLCompassButton.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MGLCompassButton.h; sourceTree = "<group>"; };
|
||||
96E6145822CC169000109F14 /* MGLCompassButton.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLCompassButton.mm; sourceTree = "<group>"; };
|
||||
96ED34DD22374C0900E9FCA9 /* MGLMapViewDirectionTests.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLMapViewDirectionTests.mm; sourceTree = "<group>"; };
|
||||
@@ -2042,7 +2042,6 @@
|
||||
DA35A2C31CCA9F8300E826B2 /* MGLClockDirectionFormatterTests.m */,
|
||||
35D9DDE11DA25EEC00DAAD69 /* MGLCodingTests.mm */,
|
||||
DA35A2C41CCA9F8300E826B2 /* MGLCompassDirectionFormatterTests.m */,
|
||||
96E6145522CC135200109F14 /* MGLCompassButtonTests.m */,
|
||||
DA35A2A91CCA058D00E826B2 /* MGLCoordinateFormatterTests.m */,
|
||||
3598544C1E1D38AA00B29F84 /* MGLDistanceFormatterTests.m */,
|
||||
6407D66F1E0085FD00F6A9C3 /* MGLDocumentationExampleTests.swift */,
|
||||
@@ -2052,6 +2051,7 @@
|
||||
DA2E885C1CC0382C00F24E7B /* MGLGeometryTests.mm */,
|
||||
DA5DB1291FABF1EE001C2326 /* MGLMapAccessibilityElementTests.m */,
|
||||
DA695425215B1E75002041A4 /* MGLMapCameraTests.m */,
|
||||
96E6145522CC135200109F14 /* MGLMapViewCompassViewTests.mm */,
|
||||
96ED34DD22374C0900E9FCA9 /* MGLMapViewDirectionTests.mm */,
|
||||
16376B481FFEED010000563E /* MGLMapViewLayoutTests.m */,
|
||||
96381C0122C6F3950053497D /* MGLMapViewPitchTests.m */,
|
||||
@@ -3263,7 +3263,7 @@
|
||||
40CFA6511D7875BB008103BD /* MGLShapeSourceTests.mm in Sources */,
|
||||
DA35A2C51CCA9F8300E826B2 /* MGLClockDirectionFormatterTests.m in Sources */,
|
||||
35B8E08C1D6C8B5100E768D2 /* MGLPredicateTests.mm in Sources */,
|
||||
96E6145622CC135200109F14 /* MGLCompassButtonTests.m in Sources */,
|
||||
96E6145622CC135200109F14 /* MGLMapViewCompassViewTests.mm in Sources */,
|
||||
96036A0620059BBA00510F3D /* MGLNSOrthographyAdditionsTests.m in Sources */,
|
||||
1F95931D1E6DE2E900D5B294 /* MGLNSDateAdditionsTests.mm in Sources */,
|
||||
DA695426215B1E76002041A4 /* MGLMapCameraTests.m in Sources */,
|
||||
|
||||
@@ -1,18 +1,14 @@
|
||||
#import <Mapbox/Mapbox.h>
|
||||
#import <XCTest/XCTest.h>
|
||||
|
||||
#import "../../ios/src/MGLCompassButton_Private.h"
|
||||
#import <mbgl/math/wrap.hpp>
|
||||
|
||||
@interface MGLMapView (MGLCompassButtonTests)
|
||||
|
||||
- (void)resetNorthAnimated:(BOOL)animated;
|
||||
|
||||
@end
|
||||
|
||||
@interface MGLCompassButtonTests : XCTestCase
|
||||
|
||||
@property (nonatomic) MGLMapView *mapView;
|
||||
|
||||
@end
|
||||
|
||||
@implementation MGLCompassButtonTests
|
||||
@@ -34,8 +30,9 @@
|
||||
|
||||
- (void)testCompassButton {
|
||||
XCTAssertNotNil(self.mapView.compassView);
|
||||
XCTAssertTrue([self.mapView.compassView isKindOfClass:[MGLCompassButton class]]);
|
||||
XCTAssertTrue(self.mapView.compassView.userInteractionEnabled);
|
||||
XCTAssertEqual(self.mapView.compassView.gestureRecognizers.count, 1);
|
||||
XCTAssertEqual(self.mapView.compassView.gestureRecognizers.count, (unsigned long)1);
|
||||
XCTAssertEqual(self.mapView.compassView.accessibilityTraits, UIAccessibilityTraitButton);
|
||||
XCTAssertNotNil(self.mapView.compassView.accessibilityLabel);
|
||||
XCTAssertNotNil(self.mapView.compassView.accessibilityHint);
|
||||
@@ -81,4 +78,21 @@
|
||||
XCTAssertEqual(self.mapView.compassView.alpha, 1, @"Compass should continue to be visible when direction is north.");
|
||||
}
|
||||
|
||||
- (void)testCompassRotation {
|
||||
self.mapView.zoomLevel = 15;
|
||||
|
||||
for (NSNumber *degrees in @[@-999, @-359, @-240, @-180, @-90, @-45, @0, @45, @90, @180, @240, @360, @999]) {
|
||||
self.mapView.direction = [degrees doubleValue];
|
||||
CGFloat wrappedDirection = mbgl::util::wrap(-self.mapView.direction, 0., 360.);
|
||||
CGAffineTransform rotation = CGAffineTransformMakeRotation(MGLRadiansFromDegrees(wrappedDirection));
|
||||
XCTAssertTrue(CGAffineTransformEqualToTransform(self.mapView.compassView.transform, rotation),
|
||||
@"Compass transform direction %f° should equal wrapped transform direction %f° (~%.f°).", [self degreesFromAffineTransform:self.mapView.compassView.transform], [self degreesFromAffineTransform:rotation], wrappedDirection);
|
||||
}
|
||||
}
|
||||
|
||||
- (CGFloat)degreesFromAffineTransform:(CGAffineTransform)transform {
|
||||
CGFloat angle = atan2f(transform.b, transform.a);
|
||||
return MGLDegreesFromRadians(angle);
|
||||
}
|
||||
|
||||
@end
|
||||
@@ -3,8 +3,6 @@
|
||||
|
||||
#import <mbgl/math/wrap.hpp>
|
||||
|
||||
static MGLMapView *mapView;
|
||||
|
||||
@interface MGLMapView (MGLMapViewDirectionTests)
|
||||
- (void)handleRotateGesture:(UIRotationGestureRecognizer *)rotate;
|
||||
- (void)resetNorthAnimated:(BOOL)animated;
|
||||
@@ -15,6 +13,7 @@ static MGLMapView *mapView;
|
||||
@end
|
||||
|
||||
@interface MGLMapViewDirectionTests : XCTestCase
|
||||
@property (nonatomic) MGLMapView *mapView;
|
||||
@end
|
||||
|
||||
@implementation MGLMapViewDirectionTests
|
||||
@@ -24,35 +23,35 @@ static MGLMapView *mapView;
|
||||
|
||||
[MGLAccountManager setAccessToken:@"pk.feedcafedeadbeefbadebede"];
|
||||
NSURL *styleURL = [[NSBundle bundleForClass:[self class]] URLForResource:@"one-liner" withExtension:@"json"];
|
||||
mapView = [[MGLMapView alloc] initWithFrame:CGRectMake(0, 0, 64, 64) styleURL:styleURL];
|
||||
self.mapView = [[MGLMapView alloc] initWithFrame:CGRectMake(0, 0, 64, 64) styleURL:styleURL];
|
||||
}
|
||||
|
||||
- (void)tearDown {
|
||||
mapView = nil;
|
||||
self.mapView = nil;
|
||||
[MGLAccountManager setAccessToken:nil];
|
||||
[super tearDown];
|
||||
}
|
||||
|
||||
- (void)testDirection {
|
||||
mapView.zoomLevel = 0;
|
||||
mapView.direction = 30;
|
||||
XCTAssertEqual(mapView.direction, 0, @"Rotation is not allowed at world-scale zoom levels.");
|
||||
self.mapView.zoomLevel = 0;
|
||||
self.mapView.direction = 30;
|
||||
XCTAssertEqual(self.mapView.direction, 0, @"Rotation is not allowed at world-scale zoom levels.");
|
||||
|
||||
mapView.zoomLevel = 15;
|
||||
self.mapView.zoomLevel = 15;
|
||||
|
||||
for (NSNumber *degrees in @[@-999, @-359, @-240, @-180, @-90, @-45, @0, @45, @90, @180, @240, @360, @999]) {
|
||||
double inputDegrees = [degrees doubleValue];
|
||||
double wrappedDegrees = mbgl::util::wrap(inputDegrees, 0., 360.);
|
||||
mapView.direction = inputDegrees;
|
||||
XCTAssertEqualWithAccuracy(mapView.direction, wrappedDegrees, 0.001);
|
||||
self.mapView.direction = inputDegrees;
|
||||
XCTAssertEqualWithAccuracy(self.mapView.direction, wrappedDegrees, 0.001);
|
||||
}
|
||||
|
||||
[mapView resetNorthAnimated:NO];
|
||||
XCTAssertEqual(mapView.direction, 0, @"Reset-to-north should set direction to 0°.");
|
||||
[self.mapView resetNorthAnimated:NO];
|
||||
XCTAssertEqual(self.mapView.direction, 0, @"Reset-to-north should set direction to 0°.");
|
||||
}
|
||||
|
||||
- (void)testRotateEnabled {
|
||||
mapView.zoomLevel = 10;
|
||||
self.mapView.zoomLevel = 10;
|
||||
|
||||
UIRotationGestureRecognizer *gesture = [[UIRotationGestureRecognizer alloc] initWithTarget:nil action:nil];
|
||||
gesture.state = UIGestureRecognizerStateBegan;
|
||||
@@ -61,63 +60,51 @@ static MGLMapView *mapView;
|
||||
|
||||
// Disabled
|
||||
{
|
||||
mapView.rotateEnabled = NO;
|
||||
XCTAssertEqual(mapView.allowsRotating, NO);
|
||||
self.mapView.rotateEnabled = NO;
|
||||
XCTAssertEqual(self.mapView.allowsRotating, NO);
|
||||
|
||||
[mapView handleRotateGesture:gesture];
|
||||
XCTAssertNotEqual(mapView.direction, wrappedRotation, @"Gestural rotation should not work when rotation is disabled.");
|
||||
[self.mapView handleRotateGesture:gesture];
|
||||
XCTAssertNotEqual(self.mapView.direction, wrappedRotation, @"Gestural rotation should not work when rotation is disabled.");
|
||||
|
||||
mapView.direction = 45.f;
|
||||
XCTAssertEqualWithAccuracy(mapView.direction, 45, 0.001, @"Programmatic rotation is allowed when rotateEnabled = NO.");
|
||||
self.mapView.direction = 45.f;
|
||||
XCTAssertEqualWithAccuracy(self.mapView.direction, 45, 0.001, @"Programmatic rotation is allowed when rotateEnabled = NO.");
|
||||
}
|
||||
|
||||
// Enabled
|
||||
{
|
||||
[mapView resetNorthAnimated:NO];
|
||||
mapView.rotateEnabled = YES;
|
||||
XCTAssertEqual(mapView.allowsRotating, YES);
|
||||
[self.mapView resetNorthAnimated:NO];
|
||||
self.mapView.rotateEnabled = YES;
|
||||
XCTAssertEqual(self.mapView.allowsRotating, YES);
|
||||
|
||||
gesture.state = UIGestureRecognizerStateChanged;
|
||||
gesture.rotation = MGLRadiansFromDegrees(30);
|
||||
[mapView handleRotateGesture:gesture];
|
||||
XCTAssertEqualWithAccuracy(mapView.direction, wrappedRotation, 0.001, @"Gestural rotation should work when rotation is enabled.");
|
||||
[self.mapView handleRotateGesture:gesture];
|
||||
XCTAssertEqualWithAccuracy(self.mapView.direction, wrappedRotation, 0.001, @"Gestural rotation should work when rotation is enabled.");
|
||||
}
|
||||
}
|
||||
|
||||
- (void)testRotateGesture {
|
||||
mapView.zoomLevel = 15;
|
||||
- (void)testRotationGesture {
|
||||
self.mapView.zoomLevel = 15;
|
||||
|
||||
UIRotationGestureRecognizer *gesture = [[UIRotationGestureRecognizer alloc] initWithTarget:nil action:nil];
|
||||
gesture.state = UIGestureRecognizerStateBegan;
|
||||
gesture.rotation = 0;
|
||||
[mapView handleRotateGesture:gesture];
|
||||
XCTAssertEqual(mapView.direction, gesture.rotation);
|
||||
[self.mapView handleRotateGesture:gesture];
|
||||
XCTAssertEqual(self.mapView.direction, gesture.rotation);
|
||||
|
||||
for (NSNumber *degrees in @[@-999, @-360, @-240, @-180, @-90, @-45, @0, @45, @90, @180, @240, @359, @999]) {
|
||||
gesture.state = UIGestureRecognizerStateChanged;
|
||||
gesture.rotation = MGLRadiansFromDegrees([degrees doubleValue]);
|
||||
[mapView handleRotateGesture:gesture];
|
||||
[self.mapView handleRotateGesture:gesture];
|
||||
CGFloat wrappedRotation = mbgl::util::wrap(-MGLDegreesFromRadians(gesture.rotation), 0., 360.);
|
||||
XCTAssertEqualWithAccuracy(mapView.direction, wrappedRotation, 0.001, @"Map direction should match gesture rotation for input of %@°.", degrees);
|
||||
}
|
||||
}
|
||||
|
||||
- (void)testCompassRotation {
|
||||
mapView.zoomLevel = 15;
|
||||
|
||||
for (NSNumber *degrees in @[@-999, @-359, @-240, @-180, @-90, @-45, @0, @45, @90, @180, @240, @360, @999]) {
|
||||
mapView.direction = [degrees doubleValue];
|
||||
CGFloat wrappedDirection = mbgl::util::wrap(-mapView.direction, 0., 360.);
|
||||
CGAffineTransform rotation = CGAffineTransformMakeRotation(MGLRadiansFromDegrees(wrappedDirection));
|
||||
XCTAssertTrue(CGAffineTransformEqualToTransform(mapView.compassView.transform, rotation),
|
||||
@"Compass transform direction %f° should equal wrapped transform direction %f° (~%.f°).", [self degreesFromAffineTransform:mapView.compassView.transform], [self degreesFromAffineTransform:rotation], wrappedDirection);
|
||||
XCTAssertEqualWithAccuracy(self.mapView.direction, wrappedRotation, 0.001, @"Map direction should match gesture rotation for input of %@°.", degrees);
|
||||
}
|
||||
}
|
||||
|
||||
- (void)testResetPosition {
|
||||
[mapView resetPosition];
|
||||
MGLMapCamera *defaultCamera = [MGLMapCamera cameraLookingAtCenterCoordinate:CLLocationCoordinate2DMake(0, 0) altitude:mapView.camera.altitude pitch:0 heading:0];
|
||||
XCTAssertTrue([mapView.camera isEqualToMapCamera:defaultCamera], @"Map camera %@ should be equal to default camera %@.", mapView.camera, defaultCamera);
|
||||
[self.mapView resetPosition];
|
||||
MGLMapCamera *defaultCamera = [MGLMapCamera cameraLookingAtCenterCoordinate:CLLocationCoordinate2DMake(0, 0) altitude:self.mapView.camera.altitude pitch:0 heading:0];
|
||||
XCTAssertTrue([self.mapView.camera isEqualToMapCamera:defaultCamera], @"Map camera %@ should be equal to default camera %@.", self.mapView.camera, defaultCamera);
|
||||
}
|
||||
|
||||
- (CGFloat)degreesFromAffineTransform:(CGAffineTransform)transform {
|
||||
|
||||
Reference in New Issue
Block a user