#import #import #import "MLNFoundation_Private.h" #import "MLNCluster.h" #if TARGET_OS_IPHONE #import "MLNUserLocation_Private.h" #endif @interface MLNCodingTests : XCTestCase @end @implementation MLNCodingTests - (NSString *)temporaryFilePathForClass:(Class)clazz { return [NSTemporaryDirectory() stringByAppendingPathComponent:NSStringFromClass(clazz)]; } - (void)testPointAnnotation { MLNPointAnnotation *annotation = [[MLNPointAnnotation alloc] init]; annotation.coordinate = CLLocationCoordinate2DMake(0.5, 0.5); annotation.title = @"title"; annotation.subtitle = @"subtitle"; NSString *filePath = [self temporaryFilePathForClass:MLNPointAnnotation.class]; [NSKeyedArchiver archiveRootObject:annotation toFile:filePath]; MLNPointAnnotation *unarchivedAnnotation = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath]; XCTAssertEqualObjects(annotation, unarchivedAnnotation); } - (void)testPointFeature { MLNPointFeature *pointFeature = [[MLNPointFeature alloc] init]; pointFeature.title = @"title"; pointFeature.subtitle = @"subtitle"; pointFeature.identifier = @(123); pointFeature.attributes = @{@"bbox": @[@1, @2, @3, @4]}; NSString *filePath = [self temporaryFilePathForClass:MLNPointFeature.class]; [NSKeyedArchiver archiveRootObject:pointFeature toFile:filePath]; MLNPointFeature *unarchivedPointFeature = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath]; XCTAssertEqualObjects(pointFeature, unarchivedPointFeature); } - (void)testPointFeatureCluster { MLNPointFeature *pointFeature = [[MLNPointFeatureCluster alloc] init]; pointFeature.title = @"title"; pointFeature.subtitle = @"subtitle"; pointFeature.identifier = @(123); pointFeature.attributes = @{ @"cluster" : @(YES), @"cluster_id" : @(456), @"point_count" : @(2), }; XCTAssert([pointFeature isKindOfClass:[MLNPointFeature class]], @""); NSString *filePath = [self temporaryFilePathForClass:MLNPointFeature.class]; [NSKeyedArchiver archiveRootObject:pointFeature toFile:filePath]; MLNPointFeature *unarchivedPointFeature = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath]; XCTAssertEqualObjects(pointFeature, unarchivedPointFeature); // Unarchive process should ensure we still have a cluster XCTAssert([unarchivedPointFeature isMemberOfClass:[MLNPointFeatureCluster class]]); id cluster = MLN_OBJC_DYNAMIC_CAST_AS_PROTOCOL(unarchivedPointFeature, MLNCluster); XCTAssert(cluster); XCTAssert(cluster.clusterIdentifier == 456); XCTAssert(cluster.clusterPointCount == 2); } - (void)testPolyline { CLLocationCoordinate2D coordinates[] = { CLLocationCoordinate2DMake(0.129631234123, 1.7812739312551), CLLocationCoordinate2DMake(2.532083092342, 3.5216418292392) }; NSUInteger numberOfCoordinates = sizeof(coordinates) / sizeof(CLLocationCoordinate2D); MLNPolyline *polyline = [MLNPolyline polylineWithCoordinates:coordinates count:numberOfCoordinates]; polyline.title = @"title"; polyline.subtitle = @"subtitle"; NSString *filePath = [self temporaryFilePathForClass:[MLNPolyline class]]; [NSKeyedArchiver archiveRootObject:polyline toFile:filePath]; MLNPolyline *unarchivedPolyline = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath]; XCTAssertEqualObjects(polyline, unarchivedPolyline); CLLocationCoordinate2D otherCoordinates[] = { CLLocationCoordinate2DMake(-1, -2) }; [unarchivedPolyline replaceCoordinatesInRange:NSMakeRange(0, 1) withCoordinates:otherCoordinates]; XCTAssertNotEqualObjects(polyline, unarchivedPolyline); CLLocationCoordinate2D multiLineCoordinates[] = { CLLocationCoordinate2DMake(51.000000, 0.000000), CLLocationCoordinate2DMake(51.000000, 1.000000), CLLocationCoordinate2DMake(51.000000, 2.000000), }; NSUInteger multiLineCoordinatesCount = sizeof(multiLineCoordinates) / sizeof(CLLocationCoordinate2D); MLNPolyline *multiLine = [MLNPolyline polylineWithCoordinates:multiLineCoordinates count:multiLineCoordinatesCount]; CLLocationCoordinate2D multiLineCenter = CLLocationCoordinate2DMake(51.000000, 1.000000); XCTAssertEqual([multiLine coordinate].latitude, multiLineCenter.latitude); XCTAssertEqual([multiLine coordinate].longitude, multiLineCenter.longitude); CLLocationCoordinate2D segmentCoordinates[] = { CLLocationCoordinate2DMake(35.040390, -85.311477), CLLocationCoordinate2DMake(35.040390, -85.209510), }; NSUInteger segmentCoordinatesCount = sizeof(segmentCoordinates) / sizeof(CLLocationCoordinate2D); MLNPolyline *segmentLine = [MLNPolyline polylineWithCoordinates:segmentCoordinates count:segmentCoordinatesCount]; CLLocationCoordinate2D segmentCenter = CLLocationCoordinate2DMake(35.0404006631, -85.2604935); XCTAssertEqualWithAccuracy([segmentLine coordinate].latitude, segmentCenter.latitude, 0.0001); XCTAssertEqualWithAccuracy([segmentLine coordinate].longitude, segmentCenter.longitude, 0.0001); CLLocationCoordinate2D sfToBerkeleyCoordinates[] = { CLLocationCoordinate2DMake(37.782440, -122.397111), CLLocationCoordinate2DMake(37.818384, -122.352994), CLLocationCoordinate2DMake(37.831401, -122.274545), CLLocationCoordinate2DMake(37.862172, -122.262700), }; NSUInteger sfToBerkeleyCoordinatesCount = sizeof(sfToBerkeleyCoordinates) / sizeof(CLLocationCoordinate2D); MLNPolyline *sfToBerkeleyLine = [MLNPolyline polylineWithCoordinates:sfToBerkeleyCoordinates count:sfToBerkeleyCoordinatesCount]; CLLocationCoordinate2D sfToBerkeleyCenter = CLLocationCoordinate2DMake(37.8230575118,-122.324867587); XCTAssertEqualWithAccuracy([sfToBerkeleyLine coordinate].latitude, sfToBerkeleyCenter.latitude, 0.0001); XCTAssertEqualWithAccuracy([sfToBerkeleyLine coordinate].longitude, sfToBerkeleyCenter.longitude, 0.0001); } - (void)testPolygon { CLLocationCoordinate2D coordinates[] = { CLLocationCoordinate2DMake(35.090745, -85.300259), CLLocationCoordinate2DMake(35.092035, -85.298885), CLLocationCoordinate2DMake(35.090639, -85.297416), CLLocationCoordinate2DMake(35.089112, -85.298928) }; NSUInteger numberOfCoordinates = sizeof(coordinates) / sizeof(CLLocationCoordinate2D); MLNPolygon *polygon = [MLNPolygon polygonWithCoordinates:coordinates count:numberOfCoordinates]; polygon.title = nil; polygon.subtitle = @"subtitle"; NSString *filePath = [self temporaryFilePathForClass:[MLNPolygon class]]; [NSKeyedArchiver archiveRootObject:polygon toFile:filePath]; MLNPolygon *unarchivedPolygon = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath]; [unarchivedPolygon coordinate]; XCTAssertEqualObjects(polygon, unarchivedPolygon); CLLocationCoordinate2D squareCoordinates[] = { CLLocationCoordinate2DMake(100.0, 0.0), CLLocationCoordinate2DMake(101.0, 0.0), CLLocationCoordinate2DMake(101.0, 1.0), CLLocationCoordinate2DMake(100.0, 1.0), }; NSUInteger squareCoordinatesCount = sizeof(squareCoordinates) / sizeof(CLLocationCoordinate2D); MLNPolygon *squarePolygon = [MLNPolygon polygonWithCoordinates:squareCoordinates count:squareCoordinatesCount]; CLLocationCoordinate2D squareCenter = CLLocationCoordinate2DMake(100.5, 0.5); XCTAssertEqual([squarePolygon coordinate].latitude, squareCenter.latitude); XCTAssertEqual([squarePolygon coordinate].longitude, squareCenter.longitude); } - (void)testPolygonWithInteriorPolygons { CLLocationCoordinate2D coordinates[] = { CLLocationCoordinate2DMake(0, 1), CLLocationCoordinate2DMake(10, 20) }; NSUInteger numberOfCoordinates = sizeof(coordinates) / sizeof(CLLocationCoordinate2D); CLLocationCoordinate2D interiorCoordinates[] = { CLLocationCoordinate2DMake(4, 4), CLLocationCoordinate2DMake(6, 6) }; NSUInteger numberOfInteriorCoordinates = sizeof(interiorCoordinates) / sizeof(CLLocationCoordinate2D); MLNPolygon *interiorPolygon = [MLNPolygon polygonWithCoordinates:interiorCoordinates count:numberOfInteriorCoordinates]; MLNPolygon *polygon = [MLNPolygon polygonWithCoordinates:coordinates count:numberOfCoordinates interiorPolygons:@[interiorPolygon]]; NSString *filePath = [self temporaryFilePathForClass:[MLNPolygon class]]; [NSKeyedArchiver archiveRootObject:polygon toFile:filePath]; MLNPolygon *unarchivedPolygon = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath]; XCTAssertEqualObjects(polygon, unarchivedPolygon); } - (void)testPolylineFeature { CLLocationCoordinate2D coordinates[] = { CLLocationCoordinate2DMake(0, 1), CLLocationCoordinate2DMake(10, 20) }; NSUInteger numberOfCoordinates = sizeof(coordinates) / sizeof(CLLocationCoordinate2D); MLNPolylineFeature *polylineFeature = [MLNPolylineFeature polylineWithCoordinates:coordinates count:numberOfCoordinates]; polylineFeature.attributes = @{@"bbox": @[@0, @1, @2, @3]}; polylineFeature.identifier = @"identifier"; NSString *filePath = [self temporaryFilePathForClass:[MLNPolylineFeature class]]; [NSKeyedArchiver archiveRootObject:polylineFeature toFile:filePath]; MLNPolylineFeature *unarchivedPolylineFeature = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath]; XCTAssertEqualObjects(polylineFeature, unarchivedPolylineFeature); unarchivedPolylineFeature.attributes = @{@"bbox": @[@4, @3, @2, @1]}; XCTAssertNotEqualObjects(polylineFeature, unarchivedPolylineFeature); } - (void)testPolygonFeature { CLLocationCoordinate2D coordinates[] = { CLLocationCoordinate2DMake(0, 1), CLLocationCoordinate2DMake(10, 20) }; NSUInteger numberOfCoordinates = sizeof(coordinates) / sizeof(CLLocationCoordinate2D); MLNPolygonFeature *polygonFeature = [MLNPolygonFeature polygonWithCoordinates:coordinates count:numberOfCoordinates]; NSString *filePath = [self temporaryFilePathForClass:[MLNPolygonFeature class]]; [NSKeyedArchiver archiveRootObject:polygonFeature toFile:filePath]; MLNPolygonFeature *unarchivedPolygonFeature = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath]; XCTAssertEqualObjects(polygonFeature, unarchivedPolygonFeature); unarchivedPolygonFeature.identifier = @"test"; XCTAssertNotEqualObjects(polygonFeature, unarchivedPolygonFeature); } - (void)testPointCollection { CLLocationCoordinate2D coordinates[] = { CLLocationCoordinate2DMake(0, 1), CLLocationCoordinate2DMake(10, 11), CLLocationCoordinate2DMake(20, 21), CLLocationCoordinate2DMake(30, 31), }; NSUInteger numberOfCoordinates = sizeof(coordinates) / sizeof(CLLocationCoordinate2D); MLNPointCollection *pointCollection = [MLNPointCollection pointCollectionWithCoordinates:coordinates count:numberOfCoordinates]; CLLocationCoordinate2D pointsCenter = CLLocationCoordinate2DMake(0, 1); XCTAssertEqual([pointCollection coordinate].latitude, pointsCenter.latitude); XCTAssertEqual([pointCollection coordinate].longitude, pointsCenter.longitude); NSString *filePath = [self temporaryFilePathForClass:[MLNPointCollection class]]; [NSKeyedArchiver archiveRootObject:pointCollection toFile:filePath]; MLNPointCollection *unarchivedPointCollection = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath]; XCTAssertEqualObjects(pointCollection, unarchivedPointCollection); } - (void)testPointCollectionFeature { NSMutableArray *features = [NSMutableArray array]; for (NSUInteger i = 0; i < 100; i++) { MLNPointFeature *feature = [[MLNPointFeature alloc] init]; feature.coordinate = CLLocationCoordinate2DMake(arc4random() % 90, arc4random() % 180); [features addObject:feature]; } CLLocationCoordinate2D coordinates[] = { CLLocationCoordinate2DMake(0, 1), CLLocationCoordinate2DMake(10, 11), CLLocationCoordinate2DMake(20, 21), CLLocationCoordinate2DMake(30, 31), }; NSUInteger numberOfCoordinates = sizeof(coordinates) / sizeof(CLLocationCoordinate2D); MLNPointCollectionFeature *collection = [MLNPointCollectionFeature pointCollectionWithCoordinates:coordinates count:numberOfCoordinates]; collection.identifier = @"identifier"; collection.attributes = @{@"bbox": @[@1, @2, @3, @4]}; NSString *filePath = [self temporaryFilePathForClass:[MLNPointCollectionFeature class]]; [NSKeyedArchiver archiveRootObject:collection toFile:filePath]; MLNPointCollectionFeature *unarchivedCollection = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath]; XCTAssertEqualObjects(collection, unarchivedCollection); unarchivedCollection.identifier = @"newIdentifier"; XCTAssertNotEqualObjects(collection, unarchivedCollection); } - (void)testMultiPolyline { CLLocationCoordinate2D coordinates[] = { CLLocationCoordinate2DMake(0, 1), CLLocationCoordinate2DMake(10, 11), CLLocationCoordinate2DMake(20, 21), CLLocationCoordinate2DMake(30, 31), }; CLLocationCoordinate2D line1[] = { CLLocationCoordinate2DMake(100, 40), CLLocationCoordinate2DMake(105, 45), CLLocationCoordinate2DMake(110, 55) }; CLLocationCoordinate2D line2[] = { CLLocationCoordinate2DMake(105, 40), CLLocationCoordinate2DMake(110, 45), CLLocationCoordinate2DMake(115, 55) }; NSUInteger road1CoordinatesCount = sizeof(line1) / sizeof(CLLocationCoordinate2D); NSUInteger road2CoordinatesCount = sizeof(line2) / sizeof(CLLocationCoordinate2D); MLNPolyline *road1Polyline = [MLNPolyline polylineWithCoordinates:line1 count:road1CoordinatesCount]; MLNPolyline *road2Polyline = [MLNPolyline polylineWithCoordinates:line1 count:road2CoordinatesCount]; MLNMultiPolyline *roads = [MLNMultiPolyline multiPolylineWithPolylines:@[road1Polyline, road2Polyline]]; CLLocationCoordinate2D roadCenter = CLLocationCoordinate2DMake(100, 40); XCTAssertEqual([roads coordinate].latitude, roadCenter.latitude); XCTAssertEqual([roads coordinate].longitude, roadCenter.longitude); NSUInteger numberOfCoordinates = sizeof(coordinates) / sizeof(CLLocationCoordinate2D); NSMutableArray *polylines = [NSMutableArray array]; for (NSUInteger i = 0; i < 100; i++) { MLNPolyline *polyline = [MLNPolyline polylineWithCoordinates:coordinates count:numberOfCoordinates]; [polylines addObject:polyline]; } MLNMultiPolyline *multiPolyline = [MLNMultiPolyline multiPolylineWithPolylines:polylines]; NSString *filePath = [self temporaryFilePathForClass:[MLNMultiPolyline class]]; [NSKeyedArchiver archiveRootObject:multiPolyline toFile:filePath]; MLNMultiPolyline *unarchivedMultiPolyline = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath]; MLNMultiPolyline *anotherMultipolyline = [MLNMultiPolyline multiPolylineWithPolylines:[polylines subarrayWithRange:NSMakeRange(0, polylines.count/2)]]; XCTAssertEqualObjects(multiPolyline, unarchivedMultiPolyline); XCTAssertNotEqualObjects(unarchivedMultiPolyline, anotherMultipolyline); } - (void)testMultiPolygon { CLLocationCoordinate2D coordinates[] = { CLLocationCoordinate2DMake(0, 1), CLLocationCoordinate2DMake(10, 11), CLLocationCoordinate2DMake(20, 21), CLLocationCoordinate2DMake(30, 31), }; CLLocationCoordinate2D outerSquare[] = { CLLocationCoordinate2DMake(100.0, 0.0), CLLocationCoordinate2DMake(101.0, 0.0), CLLocationCoordinate2DMake(101.0, 1.0), CLLocationCoordinate2DMake(100.0, 1.0), }; CLLocationCoordinate2D innerSquare[] = { CLLocationCoordinate2DMake(100.35, 0.35), CLLocationCoordinate2DMake(100.65, 0.35), CLLocationCoordinate2DMake(100.65, 0.65), CLLocationCoordinate2DMake(100.35, 0.65), }; NSUInteger outerCoordinatesCount = sizeof(outerSquare) / sizeof(CLLocationCoordinate2D); NSUInteger innerCoordinatesCount = sizeof(innerSquare) / sizeof(CLLocationCoordinate2D); MLNPolygon *innerPolygonSquare = [MLNPolygon polygonWithCoordinates:innerSquare count:innerCoordinatesCount]; MLNPolygon *outerPolygonSquare = [MLNPolygon polygonWithCoordinates:outerSquare count:outerCoordinatesCount interiorPolygons:@[innerPolygonSquare]]; MLNMultiPolygon *squares = [MLNMultiPolygon multiPolygonWithPolygons:@[outerPolygonSquare, innerPolygonSquare]]; CLLocationCoordinate2D squareCenter = CLLocationCoordinate2DMake(100.5, 0.5); XCTAssertEqual([squares coordinate].latitude, squareCenter.latitude); XCTAssertEqual([squares coordinate].longitude, squareCenter.longitude); NSUInteger numberOfCoordinates = sizeof(coordinates) / sizeof(CLLocationCoordinate2D); NSMutableArray *polygons = [NSMutableArray array]; for (NSUInteger i = 0; i < 100; i++) { MLNPolygon *polygon = [MLNPolygon polygonWithCoordinates:coordinates count:numberOfCoordinates]; [polygons addObject:polygon]; } MLNMultiPolygon *multiPolygon = [MLNMultiPolygon multiPolygonWithPolygons:polygons]; NSString *filePath = [self temporaryFilePathForClass:[MLNMultiPolygon class]]; [NSKeyedArchiver archiveRootObject:multiPolygon toFile:filePath]; MLNMultiPolygon *unarchivedMultiPolygon = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath]; MLNMultiPolygon *anotherMultiPolygon = [MLNMultiPolygon multiPolygonWithPolygons:[polygons subarrayWithRange:NSMakeRange(0, polygons.count/2)]]; XCTAssertEqualObjects(multiPolygon, unarchivedMultiPolygon); XCTAssertNotEqualObjects(anotherMultiPolygon, unarchivedMultiPolygon); } - (void)testShapeCollection { CLLocationCoordinate2D coordinates[] = { CLLocationCoordinate2DMake(10.12315786, 11.23451186), CLLocationCoordinate2DMake(20.91836515, 21.93689215), CLLocationCoordinate2DMake(30.55697246, 31.33988123), }; NSUInteger numberOfCoordinates = sizeof(coordinates) / sizeof(CLLocationCoordinate2D); MLNPolyline *polyline = [MLNPolyline polylineWithCoordinates:coordinates count:numberOfCoordinates]; MLNPolygon *polygon = [MLNPolygon polygonWithCoordinates:coordinates count:numberOfCoordinates]; MLNShapeCollection *shapeCollection = [MLNShapeCollection shapeCollectionWithShapes:@[polyline, polygon]]; NSString *filePath = [self temporaryFilePathForClass:[MLNShapeCollection class]]; [NSKeyedArchiver archiveRootObject:shapeCollection toFile:filePath]; MLNShapeCollection *unarchivedShapeCollection = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath]; MLNShapeCollection *anotherShapeCollection = [MLNShapeCollection shapeCollectionWithShapes:@[polygon]]; XCTAssertEqualObjects(shapeCollection, unarchivedShapeCollection); XCTAssertNotEqualObjects(shapeCollection, anotherShapeCollection); } - (void)testMultiPolylineFeature { CLLocationCoordinate2D coordinates[] = { CLLocationCoordinate2DMake(10.12315786, 11.23451186), CLLocationCoordinate2DMake(20.91836515, 21.93689215), CLLocationCoordinate2DMake(30.55697246, 31.33988123), }; NSUInteger numberOfCoordinates = sizeof(coordinates) / sizeof(CLLocationCoordinate2D); NSMutableArray *polylines = [NSMutableArray array]; for (NSUInteger i = 0; i < 100; i++) { MLNPolylineFeature *polylineFeature = [MLNPolylineFeature polylineWithCoordinates:coordinates count:numberOfCoordinates]; polylineFeature.identifier = @(arc4random() % 100).stringValue; [polylines addObject:polylineFeature]; } MLNMultiPolylineFeature *multiPolylineFeature = [MLNMultiPolylineFeature multiPolylineWithPolylines:polylines]; multiPolylineFeature.attributes = @{@"bbox": @[@4, @3, @2, @1]}; NSString *filePath = [self temporaryFilePathForClass:[MLNMultiPolylineFeature class]]; [NSKeyedArchiver archiveRootObject:multiPolylineFeature toFile:filePath]; MLNMultiPolylineFeature *unarchivedMultiPolylineFeature = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath]; MLNMultiPolylineFeature *anotherMultiPolylineFeature = [MLNMultiPolylineFeature multiPolylineWithPolylines:[polylines subarrayWithRange:NSMakeRange(0, polylines.count/2)]]; XCTAssertEqualObjects(multiPolylineFeature, unarchivedMultiPolylineFeature); XCTAssertNotEqualObjects(unarchivedMultiPolylineFeature, anotherMultiPolylineFeature); } - (void)testMultiPolygonFeature { CLLocationCoordinate2D coordinates[] = { CLLocationCoordinate2DMake(10.12315786, 11.23451185), CLLocationCoordinate2DMake(20.88471238, 21.93684215), CLLocationCoordinate2DMake(30.15697236, 31.32988123), }; NSUInteger numberOfCoordinates = sizeof(coordinates) / sizeof(CLLocationCoordinate2D); NSMutableArray *polygons = [NSMutableArray array]; for (NSUInteger i = 0; i < 100; i++ ) { MLNPolygonFeature *polygonFeature = [MLNPolygonFeature polygonWithCoordinates:coordinates count:numberOfCoordinates]; polygonFeature.identifier = @(arc4random_uniform(100)).stringValue; [polygons addObject:polygonFeature]; } MLNMultiPolygonFeature *multiPolygonFeature = [MLNMultiPolygonFeature multiPolygonWithPolygons:polygons]; multiPolygonFeature.attributes = @{@"bbox": @[@(arc4random_uniform(100)), @(arc4random_uniform(100)), @(arc4random_uniform(100)), @(arc4random_uniform(100))]}; NSString *filePath = [self temporaryFilePathForClass:[MLNMultiPolylineFeature class]]; [NSKeyedArchiver archiveRootObject:multiPolygonFeature toFile:filePath]; MLNMultiPolygonFeature *unarchivedMultiPolygonFeature = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath]; MLNMultiPolygonFeature *anotherMultiPolygonFeature = [MLNMultiPolygonFeature multiPolygonWithPolygons:[polygons subarrayWithRange:NSMakeRange(0, polygons.count/2)]]; XCTAssertEqualObjects(multiPolygonFeature, unarchivedMultiPolygonFeature); XCTAssertNotEqualObjects(anotherMultiPolygonFeature, unarchivedMultiPolygonFeature); } - (void)testShapeCollectionFeature { CLLocationCoordinate2D coordinates[] = { CLLocationCoordinate2DMake(10.12315786, 11.23451186), CLLocationCoordinate2DMake(20.91836515, 21.93689215), CLLocationCoordinate2DMake(30.55697246, 31.33988123), }; NSUInteger numberOfCoordinates = sizeof(coordinates) / sizeof(CLLocationCoordinate2D); MLNPolylineFeature *polyline = [MLNPolylineFeature polylineWithCoordinates:coordinates count:numberOfCoordinates]; MLNPolygonFeature *polygon = [MLNPolygonFeature polygonWithCoordinates:coordinates count:numberOfCoordinates]; MLNShapeCollectionFeature *shapeCollectionFeature = [MLNShapeCollectionFeature shapeCollectionWithShapes:@[polyline, polygon]]; shapeCollectionFeature.identifier = @(arc4random_uniform(100)).stringValue; shapeCollectionFeature.attributes = @{@"bbox":@[@(arc4random_uniform(100)), @(arc4random_uniform(100)), @(arc4random_uniform(100)), @(arc4random_uniform(100))]}; NSString *filePath = [self temporaryFilePathForClass:[MLNShapeCollectionFeature class]]; [NSKeyedArchiver archiveRootObject:shapeCollectionFeature toFile:filePath]; MLNShapeCollectionFeature *unarchivedShapeCollectionFeature = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath]; XCTAssertEqualObjects(shapeCollectionFeature, unarchivedShapeCollectionFeature); } - (void)testAnnotationImage { #if TARGET_OS_IPHONE UIGraphicsBeginImageContext(CGSizeMake(10, 10)); [[UIColor redColor] setFill]; UIRectFill(CGRectMake(0, 0, 10, 10)); UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); #else NSImage *image = [[NSImage alloc] initWithSize:CGSizeMake(10, 10)]; [image lockFocus]; [[NSColor redColor] drawSwatchInRect:CGRectMake(0, 0, 10, 10)]; [image unlockFocus]; #endif MLNAnnotationImage *annotationImage = [MLNAnnotationImage annotationImageWithImage:image reuseIdentifier:@(arc4random_uniform(100)).stringValue]; NSString *filePath = [self temporaryFilePathForClass:[MLNAnnotationImage class]]; [NSKeyedArchiver archiveRootObject:annotationImage toFile:filePath]; MLNAnnotationImage *unarchivedAnnotationImage = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath]; XCTAssertEqualObjects(annotationImage, unarchivedAnnotationImage); } #if TARGET_OS_IPHONE - (void)testAnnotationView { MLNAnnotationView *annotationView = [[MLNAnnotationView alloc] initWithReuseIdentifier:@"id"]; annotationView.enabled = NO; annotationView.selected = YES; annotationView.draggable = YES; annotationView.centerOffset = CGVectorMake(10, 10); annotationView.scalesWithViewingDistance = NO; NSString *filePath = [self temporaryFilePathForClass:[MLNAnnotationView class]]; [NSKeyedArchiver archiveRootObject:annotationView toFile:filePath]; MLNAnnotationView *unarchivedAnnotationView = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath]; XCTAssertEqual(annotationView.enabled, unarchivedAnnotationView.enabled); XCTAssertEqual(annotationView.selected, unarchivedAnnotationView.selected); XCTAssertEqual(annotationView.draggable, unarchivedAnnotationView.draggable); XCTAssertEqualObjects(NSStringFromCGVector(annotationView.centerOffset), NSStringFromCGVector(unarchivedAnnotationView.centerOffset)); XCTAssertEqual(annotationView.scalesWithViewingDistance, unarchivedAnnotationView.scalesWithViewingDistance); } #endif #if TARGET_OS_IPHONE - (void)testUserLocation { MLNUserLocation *userLocation = [[MLNUserLocation alloc] init]; userLocation.location = [[CLLocation alloc] initWithLatitude:1 longitude:1]; NSString *filePath = [self temporaryFilePathForClass:[MLNUserLocation class]]; [NSKeyedArchiver archiveRootObject:userLocation toFile:filePath]; MLNUserLocation *unarchivedUserLocation = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath]; XCTAssertEqualObjects(userLocation, unarchivedUserLocation); unarchivedUserLocation.location = [[CLLocation alloc] initWithLatitude:10 longitude:10]; XCTAssertNotEqualObjects(userLocation, unarchivedUserLocation); } #endif #if TARGET_OS_IPHONE - (void)testUserLocationAnnotationView { MLNUserLocationAnnotationView *annotationView = [[MLNUserLocationAnnotationView alloc] init]; annotationView.enabled = NO; annotationView.selected = YES; annotationView.draggable = YES; annotationView.centerOffset = CGVectorMake(10, 10); annotationView.scalesWithViewingDistance = NO; NSString *filePath = [self temporaryFilePathForClass:[MLNUserLocationAnnotationView class]]; [NSKeyedArchiver archiveRootObject:annotationView toFile:filePath]; MLNUserLocationAnnotationView *unarchivedAnnotationView = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath]; XCTAssertEqual(annotationView.enabled, unarchivedAnnotationView.enabled); XCTAssertEqual(annotationView.selected, unarchivedAnnotationView.selected); XCTAssertEqual(annotationView.draggable, unarchivedAnnotationView.draggable); XCTAssertEqualObjects(NSStringFromCGVector(annotationView.centerOffset), NSStringFromCGVector(unarchivedAnnotationView.centerOffset)); XCTAssertEqual(annotationView.scalesWithViewingDistance, unarchivedAnnotationView.scalesWithViewingDistance); } #endif @end