@@ -20,7 +20,7 @@ class ForwardGeocodingTests: XCTestCase {
2020 }
2121
2222 let geocoder = Geocoder ( accessToken: BogusToken)
23- var addressPlacemark : Placemark ! = nil
23+ var addressPlacemark : GeocodedPlacemark ! = nil
2424 let options = ForwardGeocodeOptions ( query: " 1600 pennsylvania ave " )
2525 options. allowedISOCountryCodes = [ " CA " ]
2626 let task = geocoder. geocode ( options: options) { ( placemarks, attribution, error) in
@@ -41,11 +41,12 @@ class ForwardGeocodingTests: XCTestCase {
4141 XCTAssertEqual ( addressPlacemark. description, " Pennsylvania Ave " , " forward geocode should populate description " )
4242 XCTAssertEqual ( addressPlacemark. debugDescription, " Pennsylvania Ave, Wasaga Beach, Ontario L9Z 3A8, Canada " , " forward geocode should populate debug description " )
4343 XCTAssertEqual ( addressPlacemark. name, " Pennsylvania Ave " , " forward geocode should populate name " )
44+ XCTAssertEqual ( addressPlacemark. qualifiedNameComponents, [ " Pennsylvania Ave " , " Wasaga Beach " , " Ontario L9Z 3A8 " , " Canada " ] , " forward geocode should populate name " )
4445 XCTAssertEqual ( addressPlacemark. qualifiedName, " Pennsylvania Ave, Wasaga Beach, Ontario L9Z 3A8, Canada " , " forward geocode should populate name " )
4546 XCTAssertEqual ( addressPlacemark. superiorPlacemarks? . count, 4 , " forward geocode should populate superior placemarks " )
46- XCTAssertEqual ( addressPlacemark. location? . coordinate. latitude, 44.5047077 , " forward geocode should populate location " )
47+ XCTAssertEqual ( addressPlacemark. location. coordinate. latitude, 44.5047077 , " forward geocode should populate location " )
4748
48- XCTAssertEqual ( addressPlacemark. location? . coordinate. longitude, - 79.9850737 , " forward geocode should populate location " )
49+ XCTAssertEqual ( addressPlacemark. location. coordinate. longitude, - 79.9850737 , " forward geocode should populate location " )
4950 XCTAssertEqual ( addressPlacemark. scope, PlacemarkScope . Address, " forward geocode should populate scope " )
5051 XCTAssertEqual ( addressPlacemark. country? . code, " CA " , " forward geocode should populate ISO country code " )
5152 XCTAssertEqual ( addressPlacemark. country? . name, " Canada " , " forward geocode should populate country " )
@@ -92,4 +93,62 @@ class ForwardGeocodingTests: XCTestCase {
9293 XCTAssertEqual ( task. state, NSURLSessionTaskState . Completed)
9394 }
9495 }
96+
97+ func testValidChineseForwardGeocode( ) {
98+ let expectation = expectationWithDescription ( " forward geocode should return results " )
99+
100+ stub ( isHost ( " api.mapbox.com " )
101+ && isPath ( " /geocoding/v5/mapbox.places/hainan.json " )
102+ && containsQueryParams ( [ " country " : " cn " , " language " : " zh " , " access_token " : BogusToken] ) ) { _ in
103+ let path = NSBundle ( forClass: self . dynamicType) . pathForResource ( " forward_valid_zh " , ofType: " json " )
104+ return OHHTTPStubsResponse ( fileAtPath: path!, statusCode: 200 , headers: [ " Content-Type " : " application/vnd.geo+json " ] )
105+ }
106+
107+ let geocoder = Geocoder ( accessToken: BogusToken)
108+ var placemark : GeocodedPlacemark ! = nil
109+ let options = ForwardGeocodeOptions ( query: " hainan " )
110+ options. allowedISOCountryCodes = [ " CN " ]
111+ options. locale = NSLocale ( localeIdentifier: " zh-Hans " )
112+ let task = geocoder. geocode ( options: options) { ( placemarks, attribution, error) in
113+ XCTAssertEqual ( placemarks? . count, 3 )
114+ placemark = placemarks![ 0 ]
115+
116+ XCTAssertEqual ( attribution, " NOTICE: © 2016 Mapbox and its suppliers. All rights reserved. Use of this data is subject to the Mapbox Terms of Service (https://www.mapbox.com/about/maps/). This response and the information it contains may not be retained. " )
117+
118+ expectation. fulfill ( )
119+ }
120+ XCTAssertNotNil ( task)
121+
122+ waitForExpectationsWithTimeout ( 1 ) { ( error) in
123+ XCTAssertNil ( error, " Error: \( error) " )
124+ XCTAssertEqual ( task. state, NSURLSessionTaskState . Completed)
125+ }
126+
127+ XCTAssertEqual ( placemark. description, " 海南区 " , " forward geocode should populate description " )
128+ XCTAssertEqual ( placemark. debugDescription, " 中国内蒙古乌海市海南区 " , " forward geocode should populate debug description " )
129+ XCTAssertEqual ( placemark. name, " 海南区 " , " forward geocode should populate name " )
130+ XCTAssertEqual ( placemark. qualifiedNameComponents, [ " 中国 " , " 内蒙古 " , " 乌海市 " , " 海南区 " ] , " forward geocode in Chinese should reverse address components " )
131+ XCTAssertEqual ( placemark. qualifiedName, " 中国内蒙古乌海市海南区 " , " forward geocode should populate name " )
132+ XCTAssertEqual ( placemark. superiorPlacemarks? . count, 3 , " forward geocode should populate superior placemarks " )
133+ XCTAssertEqual ( placemark. location. coordinate. latitude, 39.458115 , " forward geocode should populate location " )
134+
135+ XCTAssertEqual ( placemark. location. coordinate. longitude, 106.820552 , " forward geocode should populate location " )
136+ XCTAssertEqual ( placemark. scope, PlacemarkScope . Place, " forward geocode should populate scope " )
137+ XCTAssertEqual ( placemark. country? . code, " CN " , " forward geocode should populate ISO country code " )
138+ XCTAssertEqual ( placemark. country? . name, " 中国 " , " forward geocode should populate country " )
139+ XCTAssertNil ( placemark. postalCode, " forward geocode for place should not populate postal code " )
140+ XCTAssertEqual ( placemark. administrativeRegion? . name, " 内蒙古 " , " forward geocode should populate administrative region " )
141+ XCTAssertEqual ( placemark. district? . name, " 乌海市 " , " forward geocode should populate district area " )
142+ XCTAssertNil ( placemark. place? . name, " forward geocode for place should not populate locality " )
143+ XCTAssertNil ( placemark. thoroughfare, " forward geocode for place should not populate thoroughfare " )
144+ XCTAssertNil ( placemark. subThoroughfare, " forward geocode should not populate sub-thoroughfare for street-only result " )
145+
146+ XCTAssertNotNil ( placemark. addressDictionary)
147+ let addressDictionary = placemark. addressDictionary!
148+ XCTAssertNil ( addressDictionary [ MBPostalAddressStreetKey] )
149+ XCTAssertNil ( addressDictionary [ MBPostalAddressCityKey] )
150+ XCTAssertEqual ( addressDictionary [ MBPostalAddressStateKey] as? String , " 内蒙古 " , " forward geocode should populate state in address dictionary " )
151+ XCTAssertEqual ( addressDictionary [ MBPostalAddressCountryKey] as? String , " 中国 " , " forward geocode should populate country in address dictionary " )
152+ XCTAssertEqual ( addressDictionary [ MBPostalAddressISOCountryCodeKey] as? String , " CN " , " forward geocode should populate ISO country code in address dictionary " )
153+ }
95154}
0 commit comments