Authored by Hal Mueller

added another unit test to exercise the coordinate calculation bug

@@ -30,7 +30,6 @@ @@ -30,7 +30,6 @@
30 WithLocation:initialCenter]; 30 WithLocation:initialCenter];
31 NSLog(@"contentView %@ mapView %@", contentView, mapView); 31 NSLog(@"contentView %@ mapView %@", contentView, mapView);
32 [contentView addSubview:mapView]; 32 [contentView addSubview:mapView];
33 - [NSThread sleepForTimeInterval:3.0];  
34 } 33 }
35 34
36 -(void)tearDown { 35 -(void)tearDown {
@@ -83,29 +82,30 @@ @@ -83,29 +82,30 @@
83 - (void)testMarkerCreation 82 - (void)testMarkerCreation
84 { 83 {
85 CLLocationCoordinate2D markerPosition; 84 CLLocationCoordinate2D markerPosition;
86 -#define kNumberRows 1  
87 -#define kNumberColumns 5  
88 -#define kSpacing 2.0 85 + NSUInteger nRows = 1;
  86 + NSUInteger nColumns = 8;
  87 + double columnSpacing = 2.0;
89 88
90 UIImage *markerImage = [UIImage imageNamed:@"marker-red.png"]; 89 UIImage *markerImage = [UIImage imageNamed:@"marker-red.png"];
91 - STAssertNotNil(markerImage, @"marker image did not load");  
92 - markerPosition.latitude = initialCenter.latitude - ((kNumberRows - 1)/2.0 * kSpacing); 90 + STAssertNotNil(markerImage, @"testMarkerCreation marker image did not load");
  91 + markerPosition.latitude = initialCenter.latitude - ((nRows - 1)/2.0 * columnSpacing);
93 int i, j; 92 int i, j;
94 - for (i = 0; i < kNumberRows; i++) {  
95 - markerPosition.longitude = initialCenter.longitude - ((kNumberColumns - 1)/2.0 * kSpacing);  
96 - for (j = 0; j < kNumberColumns; j++) {  
97 - markerPosition.longitude += kSpacing; 93 + for (i = 0; i < nRows; i++) {
  94 + markerPosition.longitude = initialCenter.longitude - ((nColumns - 1)/2.0 * columnSpacing);
  95 + for (j = 0; j < nColumns; j++) {
  96 + markerPosition.longitude += columnSpacing;
98 NSLog(@"%f %f", markerPosition.latitude, markerPosition.longitude); 97 NSLog(@"%f %f", markerPosition.latitude, markerPosition.longitude);
99 RMMarker *newMarker = [[RMMarker alloc] initWithUIImage:markerImage]; 98 RMMarker *newMarker = [[RMMarker alloc] initWithUIImage:markerImage];
  99 + STAssertNotNil(newMarker, @"testMarkerCreation marker creation failed");
100 #ifdef DEBUG 100 #ifdef DEBUG
101 [newMarker setLatlon:markerPosition]; 101 [newMarker setLatlon:markerPosition];
102 #endif 102 #endif
103 [mapView.contents.markerManager addMarker:newMarker 103 [mapView.contents.markerManager addMarker:newMarker
104 AtLatLong:markerPosition]; 104 AtLatLong:markerPosition];
105 } 105 }
106 - markerPosition.latitude += kSpacing; 106 + markerPosition.latitude += columnSpacing;
107 } 107 }
108 - 108 +
109 #ifdef DEBUG 109 #ifdef DEBUG
110 RMMarkerManager *mangler = [[mapView contents] markerManager]; 110 RMMarkerManager *mangler = [[mapView contents] markerManager];
111 111
@@ -116,6 +116,48 @@ @@ -116,6 +116,48 @@
116 screenPosition.y, screenPosition.x); 116 screenPosition.y, screenPosition.x);
117 } 117 }
118 #endif 118 #endif
  119 +}
  120 +
  121 +- (void)testMarkerCoordinates
  122 +{
  123 + CLLocationCoordinate2D markerPosition;
  124 +
  125 + NSUInteger nColumns = 8;
  126 + double columnSpacing = 2.0;
  127 +
  128 + UIImage *markerImage = [UIImage imageNamed:@"marker-red.png"];
  129 + markerPosition.latitude = initialCenter.latitude;
  130 + markerPosition.longitude = initialCenter.longitude - ((nColumns - 1)/2.0 * columnSpacing);
  131 + int j;
  132 + NSMutableArray *testMarkers = [NSMutableArray arrayWithCapacity:nColumns];
  133 + for (j = 0; j < nColumns; j++) {
  134 + markerPosition.longitude += columnSpacing;
  135 + NSLog(@"%f %f", markerPosition.latitude, markerPosition.longitude);
  136 + RMMarker *newMarker = [[RMMarker alloc] initWithUIImage:markerImage];
  137 + [testMarkers addObject:newMarker];
  138 +#ifdef DEBUG
  139 + [newMarker setLatlon:markerPosition];
  140 +#endif
  141 + [mapView.contents.markerManager addMarker:newMarker
  142 + AtLatLong:markerPosition];
  143 + }
  144 + STAssertGreaterThan(columnSpacing, 0.0, @"this test requires positive columnSpacing");
  145 +#ifdef DEBUG
  146 + RMMarkerManager *mangler = [[mapView contents] markerManager];
  147 +
  148 + [[mapView contents] moveBy:CGSizeMake(-5.0, 0.0)];
  149 + for (j = 1; j < nColumns; j++) {
  150 + RMMarker *leftMarker = [testMarkers objectAtIndex:j - 1];
  151 + RMMarker *rightMarker = [testMarkers objectAtIndex:j];
  152 + CGPoint leftScreenPosition = [mangler getMarkerScreenCoordinate:leftMarker];
  153 + CGPoint rightScreenPosition = [mangler getMarkerScreenCoordinate:rightMarker];
  154 + STAssertLessThan(leftScreenPosition.x, rightScreenPosition.x,
  155 + @"screen position calculation failed: left (%f, %f) right (%f, %f) mapped to left (%f, %f) right (%f, %f)",
  156 + leftMarker.latlon.longitude, leftMarker.latlon.latitude,
  157 + rightMarker.latlon.longitude, rightMarker.latlon.latitude,
  158 + leftScreenPosition.x, leftScreenPosition.y, rightScreenPosition.x, rightScreenPosition.y);
  159 + }
  160 +#endif
119 161
120 } 162 }
121 @end 163 @end