summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMinh Nguyễn <mxn@1ec5.org>2016-04-24 23:38:49 -0700
committerMinh Nguyễn <mxn@1ec5.org>2016-04-24 23:38:49 -0700
commitbf313b0c5fb17569ba69be63bfc8af41fd5cffa6 (patch)
tree7dbc3229018c01bb036fce0ec8fc75301abb45b0
parent57f0a211251a9378fa004ee22b2c6f4d21e2bd59 (diff)
downloadqtlocation-mapboxgl-bf313b0c5fb17569ba69be63bfc8af41fd5cffa6.tar.gz
[ios, osx] Fixed direction formatter edge cases
Fixed an issue causing angles that are multiples of 360°, such as 720°, to be described as 0 o’clock. Fixed a crash when a compass direction is close enough to 360° to round up to 360°.
-rw-r--r--platform/darwin/src/MGLClockDirectionFormatter.m5
-rw-r--r--platform/darwin/src/MGLCompassDirectionFormatter.m2
-rw-r--r--platform/darwin/test/MGLClockDirectionFormatterTests.m20
-rw-r--r--platform/darwin/test/MGLCompassDirectionFormatterTests.m10
4 files changed, 35 insertions, 2 deletions
diff --git a/platform/darwin/src/MGLClockDirectionFormatter.m b/platform/darwin/src/MGLClockDirectionFormatter.m
index c8c07487ba..fd67968e65 100644
--- a/platform/darwin/src/MGLClockDirectionFormatter.m
+++ b/platform/darwin/src/MGLClockDirectionFormatter.m
@@ -19,7 +19,10 @@
}
- (NSString *)stringFromDirection:(CLLocationDirection)direction {
- NSInteger hour = round(-wrap(-direction, -360, 0) / 360 * 12);
+ NSInteger hour = round(wrap(direction, 0, 360) / 360 * 12);
+ if (hour == 0) {
+ hour = 12;
+ }
NSString *format;
switch (self.unitStyle) {
case NSFormattingUnitStyleShort:
diff --git a/platform/darwin/src/MGLCompassDirectionFormatter.m b/platform/darwin/src/MGLCompassDirectionFormatter.m
index 8a4118ba55..c46fe9e4d5 100644
--- a/platform/darwin/src/MGLCompassDirectionFormatter.m
+++ b/platform/darwin/src/MGLCompassDirectionFormatter.m
@@ -98,7 +98,7 @@
NSAssert(shortStrings.count == longStrings.count, @"Long and short compass direction string arrays must have the same size.");
});
- NSInteger cardinalPoint = round(wrap(direction, 0, 360) / 360 * shortStrings.count);
+ NSInteger cardinalPoint = wrap(round(wrap(direction, 0, 360) / 360 * shortStrings.count), 0, shortStrings.count);
switch (self.unitStyle) {
case NSFormattingUnitStyleShort:
return shortStrings[cardinalPoint];
diff --git a/platform/darwin/test/MGLClockDirectionFormatterTests.m b/platform/darwin/test/MGLClockDirectionFormatterTests.m
index 2b98de0861..a020ed88b2 100644
--- a/platform/darwin/test/MGLClockDirectionFormatterTests.m
+++ b/platform/darwin/test/MGLClockDirectionFormatterTests.m
@@ -49,6 +49,26 @@ static NSString * const MGLTestLocaleIdentifier = @"en-US";
XCTAssertEqualObjects(@"9:00", [shortFormatter stringFromDirection:direction]);
XCTAssertEqualObjects(@"9 o’clock", [mediumFormatter stringFromDirection:direction]);
XCTAssertEqualObjects(@"9 o’clock", [longFormatter stringFromDirection:direction]);
+
+ direction = 359.34951805867024;
+ XCTAssertEqualObjects(@"12:00", [shortFormatter stringFromDirection:direction]);
+ XCTAssertEqualObjects(@"12 o’clock", [mediumFormatter stringFromDirection:direction]);
+ XCTAssertEqualObjects(@"12 o’clock", [longFormatter stringFromDirection:direction]);
+
+ direction = 360;
+ XCTAssertEqualObjects(@"12:00", [shortFormatter stringFromDirection:direction]);
+ XCTAssertEqualObjects(@"12 o’clock", [mediumFormatter stringFromDirection:direction]);
+ XCTAssertEqualObjects(@"12 o’clock", [longFormatter stringFromDirection:direction]);
+
+ direction = 360.1;
+ XCTAssertEqualObjects(@"12:00", [shortFormatter stringFromDirection:direction]);
+ XCTAssertEqualObjects(@"12 o’clock", [mediumFormatter stringFromDirection:direction]);
+ XCTAssertEqualObjects(@"12 o’clock", [longFormatter stringFromDirection:direction]);
+
+ direction = 720;
+ XCTAssertEqualObjects(@"12:00", [shortFormatter stringFromDirection:direction]);
+ XCTAssertEqualObjects(@"12 o’clock", [mediumFormatter stringFromDirection:direction]);
+ XCTAssertEqualObjects(@"12 o’clock", [longFormatter stringFromDirection:direction]);
}
@end
diff --git a/platform/darwin/test/MGLCompassDirectionFormatterTests.m b/platform/darwin/test/MGLCompassDirectionFormatterTests.m
index 08b0b92f0b..bba0317ebf 100644
--- a/platform/darwin/test/MGLCompassDirectionFormatterTests.m
+++ b/platform/darwin/test/MGLCompassDirectionFormatterTests.m
@@ -64,11 +64,21 @@
XCTAssertEqualObjects(@"west", [mediumFormatter stringFromDirection:direction]);
XCTAssertEqualObjects(@"west", [longFormatter stringFromDirection:direction]);
+ direction = 359.34951805867024;
+ XCTAssertEqualObjects(@"N", [shortFormatter stringFromDirection:direction]);
+ XCTAssertEqualObjects(@"north", [mediumFormatter stringFromDirection:direction]);
+ XCTAssertEqualObjects(@"north", [longFormatter stringFromDirection:direction]);
+
direction = 360;
XCTAssertEqualObjects(@"N", [shortFormatter stringFromDirection:direction]);
XCTAssertEqualObjects(@"north", [mediumFormatter stringFromDirection:direction]);
XCTAssertEqualObjects(@"north", [longFormatter stringFromDirection:direction]);
+ direction = 360.1;
+ XCTAssertEqualObjects(@"N", [shortFormatter stringFromDirection:direction]);
+ XCTAssertEqualObjects(@"north", [mediumFormatter stringFromDirection:direction]);
+ XCTAssertEqualObjects(@"north", [longFormatter stringFromDirection:direction]);
+
direction = 720;
XCTAssertEqualObjects(@"N", [shortFormatter stringFromDirection:direction]);
XCTAssertEqualObjects(@"north", [mediumFormatter stringFromDirection:direction]);