176 lines
9.1 KiB
Objective-C
176 lines
9.1 KiB
Objective-C
#import <XCTest/XCTest.h>
|
|
#import <CoreLocation/CoreLocation.h>
|
|
#import <Mapbox.h>
|
|
#import <MapKit/MapKit.h>
|
|
|
|
@interface MLNMapCameraTests : XCTestCase
|
|
|
|
@end
|
|
|
|
@implementation MLNMapCameraTests
|
|
|
|
- (void)testEyeCoordinateInitialization {
|
|
CLLocationCoordinate2D fountainSquare = CLLocationCoordinate2DMake(39.10152215, -84.5124439696089);
|
|
CLLocationCoordinate2D unionTerminal = CLLocationCoordinate2DMake(39.10980955, -84.5352778794236);
|
|
|
|
MLNMapCamera *camera = [MLNMapCamera cameraLookingAtCenterCoordinate:fountainSquare
|
|
fromEyeCoordinate:fountainSquare
|
|
eyeAltitude:1000];
|
|
MKMapCamera *mkCamera = [MKMapCamera cameraLookingAtCenterCoordinate:fountainSquare
|
|
fromEyeCoordinate:fountainSquare
|
|
eyeAltitude:1000];
|
|
XCTAssertEqual(camera.centerCoordinate.latitude, fountainSquare.latitude);
|
|
XCTAssertEqual(camera.centerCoordinate.longitude, fountainSquare.longitude);
|
|
XCTAssertEqual(camera.centerCoordinate.latitude, mkCamera.centerCoordinate.latitude);
|
|
XCTAssertEqual(camera.centerCoordinate.longitude, mkCamera.centerCoordinate.longitude);
|
|
XCTAssertEqual(camera.altitude, 1000, @"Eye altitude should be equivalent to altitude in untilted camera.");
|
|
XCTAssertEqual(camera.altitude, mkCamera.altitude, @"Eye altitude in untilted camera should match MapKit.");
|
|
XCTAssertEqual(camera.pitch, 0, @"Camera directly over center coordinate should be untilted.");
|
|
XCTAssertEqual(camera.pitch, mkCamera.pitch, @"Camera directly over center coordinate should have same pitch as MapKit.");
|
|
|
|
XCTAssertEqual(camera.heading, 0, @"Camera directly over center coordinate should be unrotated.");
|
|
XCTAssertEqual(camera.heading, mkCamera.heading, @"Camera directly over center coordinate should have same heading as MapKit.");
|
|
|
|
camera = [MLNMapCamera cameraLookingAtCenterCoordinate:fountainSquare
|
|
fromEyeCoordinate:unionTerminal
|
|
eyeAltitude:1000];
|
|
mkCamera = [MKMapCamera cameraLookingAtCenterCoordinate:fountainSquare
|
|
fromEyeCoordinate:unionTerminal
|
|
eyeAltitude:1000];
|
|
XCTAssertEqual(camera.centerCoordinate.latitude, fountainSquare.latitude);
|
|
XCTAssertEqual(camera.centerCoordinate.longitude, fountainSquare.longitude);
|
|
XCTAssertEqual(camera.centerCoordinate.latitude, mkCamera.centerCoordinate.latitude);
|
|
XCTAssertEqual(camera.centerCoordinate.longitude, mkCamera.centerCoordinate.longitude);
|
|
XCTAssertEqual(camera.altitude, 1000);
|
|
XCTAssertEqual(camera.altitude, mkCamera.altitude, @"Eye altitude in tilted camera should match MapKit.");
|
|
XCTAssertEqualWithAccuracy(camera.pitch, 65.3469146074, 0.01);
|
|
XCTAssertEqual(camera.pitch, mkCamera.pitch);
|
|
XCTAssertEqualWithAccuracy(camera.heading, 115.066396383, 0.01);
|
|
XCTAssertEqualWithAccuracy(camera.heading, mkCamera.heading, 0.01);
|
|
}
|
|
|
|
- (void)testViewingDistanceInitialization {
|
|
CLLocationCoordinate2D fountainSquare = CLLocationCoordinate2DMake(39.10152215, -84.5124439696089);
|
|
MLNMapCamera *camera = [MLNMapCamera cameraLookingAtCenterCoordinate:fountainSquare
|
|
acrossDistance:10000
|
|
pitch:0
|
|
heading:0];
|
|
MKMapCamera *mkCamera = [MKMapCamera cameraLookingAtCenterCoordinate:fountainSquare
|
|
fromDistance:10000
|
|
pitch:0
|
|
heading:0];
|
|
XCTAssertEqualWithAccuracy(camera.altitude, 10000, 0.01, @"Untilted camera should use distance verbatim.");
|
|
XCTAssertEqualWithAccuracy(camera.altitude, mkCamera.altitude, 0.01, @"Untilted camera altitude should match MapKit.");
|
|
|
|
camera = [MLNMapCamera cameraLookingAtCenterCoordinate:fountainSquare
|
|
altitude:10000
|
|
pitch:0
|
|
heading:0];
|
|
XCTAssertEqual(camera.altitude, 10000, @"Untilted camera should use altitude verbatim.");
|
|
|
|
camera = [MLNMapCamera cameraLookingAtCenterCoordinate:fountainSquare
|
|
acrossDistance:10000
|
|
pitch:60
|
|
heading:0];
|
|
mkCamera = [MKMapCamera cameraLookingAtCenterCoordinate:fountainSquare
|
|
fromDistance:10000
|
|
pitch:60
|
|
heading:0];
|
|
XCTAssertEqualWithAccuracy(camera.altitude, 5000, 0.01, @"Tilted camera altitude should account for pitch.");
|
|
XCTAssertEqualWithAccuracy(camera.altitude, mkCamera.altitude, 0.01, @"Tilted camera altitude should match MapKit.");
|
|
|
|
camera = [MLNMapCamera cameraLookingAtCenterCoordinate:fountainSquare
|
|
altitude:10000
|
|
pitch:60
|
|
heading:0];
|
|
XCTAssertEqual(camera.altitude, 10000, @"Tilted camera should use altitude verbatim.");
|
|
}
|
|
|
|
- (void)testViewingDistance {
|
|
MLNMapCamera *camera = [MLNMapCamera camera];
|
|
camera.altitude = 10000;
|
|
XCTAssertEqual(camera.altitude, 10000);
|
|
XCTAssertEqual(camera.viewingDistance, 10000);
|
|
camera.viewingDistance = 10000;
|
|
XCTAssertEqual(camera.altitude, 10000);
|
|
XCTAssertEqual(camera.viewingDistance, 10000);
|
|
|
|
camera.pitch = 60;
|
|
camera.altitude = 10000;
|
|
XCTAssertEqual(camera.altitude, 10000);
|
|
XCTAssertEqualWithAccuracy(camera.viewingDistance, 20000, 0.01);
|
|
camera.viewingDistance = 10000;
|
|
XCTAssertEqualWithAccuracy(camera.altitude, 5000, 0.01);
|
|
XCTAssertEqual(camera.viewingDistance, 10000);
|
|
}
|
|
|
|
- (void)testRollProperty {
|
|
MLNMapCamera *camera = [MLNMapCamera camera];
|
|
XCTAssertEqual(camera.roll, 0, @"Default camera should have zero roll.");
|
|
|
|
camera.roll = 45;
|
|
XCTAssertEqual(camera.roll, 45, @"Roll should be set correctly.");
|
|
|
|
camera.roll = -30;
|
|
XCTAssertEqual(camera.roll, -30, @"Roll should accept negative values.");
|
|
|
|
camera.roll = 180;
|
|
XCTAssertEqual(camera.roll, 180, @"Roll should accept 180 degrees.");
|
|
}
|
|
|
|
- (void)testRollInCopy {
|
|
MLNMapCamera *camera = [MLNMapCamera camera];
|
|
camera.roll = 30;
|
|
|
|
MLNMapCamera *copy = [camera copy];
|
|
XCTAssertEqual(copy.roll, 30, @"Copied camera should preserve roll value.");
|
|
}
|
|
|
|
- (void)testRollInEncoding {
|
|
CLLocationCoordinate2D coord = CLLocationCoordinate2DMake(40.0, -80.0);
|
|
MLNMapCamera *camera = [MLNMapCamera cameraLookingAtCenterCoordinate:coord
|
|
altitude:1000
|
|
pitch:45
|
|
heading:90];
|
|
camera.roll = 25;
|
|
|
|
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:camera requiringSecureCoding:YES error:NULL];
|
|
MLNMapCamera *decodedCamera = [NSKeyedUnarchiver unarchivedObjectOfClass:[MLNMapCamera class] fromData:data error:NULL];
|
|
|
|
XCTAssertEqual(decodedCamera.roll, 25, @"Decoded camera should preserve roll value.");
|
|
}
|
|
|
|
- (void)testRollInEquality {
|
|
CLLocationCoordinate2D coord = CLLocationCoordinate2DMake(40.0, -80.0);
|
|
MLNMapCamera *camera1 = [MLNMapCamera cameraLookingAtCenterCoordinate:coord
|
|
altitude:1000
|
|
pitch:45
|
|
heading:90];
|
|
camera1.roll = 30;
|
|
|
|
MLNMapCamera *camera2 = [MLNMapCamera cameraLookingAtCenterCoordinate:coord
|
|
altitude:1000
|
|
pitch:45
|
|
heading:90];
|
|
camera2.roll = 30;
|
|
|
|
XCTAssertTrue([camera1 isEqual:camera2], @"Cameras with same roll should be equal.");
|
|
XCTAssertTrue([camera1 isEqualToMapCamera:camera2], @"Cameras with same roll should be equal (isEqualToMapCamera).");
|
|
|
|
camera2.roll = 35;
|
|
XCTAssertFalse([camera1 isEqual:camera2], @"Cameras with different roll should not be equal.");
|
|
XCTAssertFalse([camera1 isEqualToMapCamera:camera2], @"Cameras with different roll should not be equal (isEqualToMapCamera).");
|
|
}
|
|
|
|
- (void)testRollInHash {
|
|
MLNMapCamera *camera1 = [MLNMapCamera camera];
|
|
camera1.roll = 45;
|
|
|
|
MLNMapCamera *camera2 = [MLNMapCamera camera];
|
|
camera2.roll = 45;
|
|
|
|
XCTAssertEqual(camera1.hash, camera2.hash, @"Cameras with same properties including roll should have same hash.");
|
|
}
|
|
|
|
@end
|