Skip to content

Commit 3a1efd3

Browse files
timbmsmxcl
authored andcommitted
Wrapped geocodePostalAddress into Promise (#12)
1 parent f4866f1 commit 3a1efd3

File tree

2 files changed

+64
-0
lines changed

2 files changed

+64
-0
lines changed

Sources/CLGeocoder+Promise.swift

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@ import CoreLocation.CLGeocoder
22
#if !PMKCocoaPods
33
import PromiseKit
44
#endif
5+
#if os(iOS) || os(watchOS) || os(OSX)
6+
import class Contacts.CNPostalAddress
7+
#endif
58

69
/**
710
To import the `CLGeocoder` category:
@@ -41,6 +44,25 @@ extension CLGeocoder {
4144
geocodeAddressString(addressString, in: region, completionHandler: seal.resolve)
4245
}
4346
}
47+
48+
#if !os(tvOS) && swift(>=3.2)
49+
/// Submits a forward-geocoding request using the specified postal address.
50+
@available(iOS 11.0, OSX 10.13, watchOS 4.0, *)
51+
@available(tvOS, unavailable)
52+
public func geocodePostalAddress(_ postalAddress: CNPostalAddress) -> Promise<[CLPlacemark]> {
53+
return Promise { seal in
54+
geocodePostalAddress(postalAddress, completionHandler: seal.resolve)
55+
}
56+
}
57+
58+
/// Submits a forward-geocoding requesting using the specified locale and postal address
59+
@available(iOS 11.0, OSX 10.13, watchOS 4.0, *)
60+
public func geocodePostalAddress(_ postalAddress: CNPostalAddress, preferredLocale locale: Locale?) -> Promise<[CLPlacemark]> {
61+
return Promise { seal in
62+
geocodePostalAddress(postalAddress, preferredLocale: locale, completionHandler: seal.resolve)
63+
}
64+
}
65+
#endif
4466
}
4567

4668
// TODO still not possible in Swift 3.2

Tests/CLGeocoderTests.swift

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@ import PMKCoreLocation
22
import CoreLocation
33
import PromiseKit
44
import XCTest
5+
#if os(iOS) || os(watchOS) || os(OSX)
6+
import class Contacts.CNPostalAddress
7+
#endif
58

69
class CLGeocoderTests: XCTestCase {
710
func test_reverseGeocodeLocation() {
@@ -54,6 +57,45 @@ class CLGeocoderTests: XCTestCase {
5457
}
5558
waitForExpectations(timeout: 1)
5659
}
60+
61+
#if !os(tvOS) && swift(>=3.2)
62+
@available(iOS 11.0, OSX 10.13, watchOS 4.0, *)
63+
func test_geocodePostalAddress() {
64+
class MockGeocoder: CLGeocoder {
65+
override func geocodePostalAddress(_ postalAddress: CNPostalAddress, completionHandler: @escaping CLGeocodeCompletionHandler) {
66+
after(.seconds(0)).done {
67+
completionHandler([dummyPlacemark], nil)
68+
}
69+
}
70+
}
71+
72+
let ex = expectation(description: "")
73+
MockGeocoder().geocodePostalAddress(CNPostalAddress()).done { x in
74+
XCTAssertEqual(x, [dummyPlacemark])
75+
ex.fulfill()
76+
}
77+
waitForExpectations(timeout: 1)
78+
}
79+
80+
@available(iOS 11.0, OSX 10.13, watchOS 4.0, *)
81+
@available(tvOS, unavailable)
82+
func test_geocodePostalAddressLocale() {
83+
class MockGeocoder: CLGeocoder {
84+
override func geocodePostalAddress(_ postalAddress: CNPostalAddress, preferredLocale locale: Locale?, completionHandler: @escaping CLGeocodeCompletionHandler) {
85+
after(.seconds(0)).done {
86+
completionHandler([dummyPlacemark], nil)
87+
}
88+
}
89+
}
90+
91+
let ex = expectation(description: "")
92+
MockGeocoder().geocodePostalAddress(CNPostalAddress(), preferredLocale: nil).done { x in
93+
XCTAssertEqual(x, [dummyPlacemark])
94+
ex.fulfill()
95+
}
96+
waitForExpectations(timeout: 1)
97+
}
98+
#endif
5799
}
58100

59101
private let dummyPlacemark = CLPlacemark()

0 commit comments

Comments
 (0)