[ios, macos] Fixed MGLMapSnapshotter test crash
Fixed a crash in MGLDocumentationExampleTests caused by an asynchronous snapshot call that the test wasn’t waiting on, compounded by the use of a style that requires an access token (as opposed to the one-liner style that uses no remote resources. Employed some Swiftisms to fulfill expectations without making the example code look weird.
This commit is contained in:
committed by
Minh Nguyễn
parent
b9ef272730
commit
1b407e85e9
@@ -145,11 +145,11 @@ typedef void (^MGLMapSnapshotCompletionHandler)(MGLMapSnapshot* _Nullable snapsh
|
||||
|
||||
let snapshotter = MGLMapSnapshotter(options: options)
|
||||
snapshotter.start { (snapshot, error) in
|
||||
if error != nil {
|
||||
// error handler
|
||||
} else {
|
||||
// image handler
|
||||
if let error = error {
|
||||
fatalError(error.localizedDescription)
|
||||
}
|
||||
|
||||
image = snapshot?.image
|
||||
}
|
||||
```
|
||||
*/
|
||||
|
||||
@@ -27,11 +27,11 @@ import Mapbox
|
||||
class MGLDocumentationExampleTests: XCTestCase, MGLMapViewDelegate {
|
||||
var mapView: MGLMapView!
|
||||
var styleLoadingExpectation: XCTestExpectation!
|
||||
static let styleURL = Bundle(for: MGLDocumentationExampleTests.self).url(forResource: "one-liner", withExtension: "json")!
|
||||
|
||||
override func setUp() {
|
||||
super.setUp()
|
||||
let styleURL = Bundle(for: MGLDocumentationExampleTests.self).url(forResource: "one-liner", withExtension: "json")
|
||||
mapView = MGLMapView(frame: CGRect(x: 0, y: 0, width: 256, height: 256), styleURL: styleURL)
|
||||
mapView = MGLMapView(frame: CGRect(x: 0, y: 0, width: 256, height: 256), styleURL: MGLDocumentationExampleTests.styleURL)
|
||||
mapView.delegate = self
|
||||
styleLoadingExpectation = expectation(description: "Map view should finish loading style")
|
||||
waitForExpectations(timeout: 1, handler: nil)
|
||||
@@ -279,6 +279,27 @@ class MGLDocumentationExampleTests: XCTestCase, MGLMapViewDelegate {
|
||||
}
|
||||
|
||||
func testMGLMapSnapshotter() {
|
||||
let expectation = self.expectation(description: "MGLMapSnapshotter should produce a snapshot")
|
||||
#if os(macOS)
|
||||
var image: NSImage? {
|
||||
didSet {
|
||||
expectation.fulfill()
|
||||
}
|
||||
}
|
||||
#else
|
||||
var image: UIImage? {
|
||||
didSet {
|
||||
expectation.fulfill()
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
class MGLStyle {
|
||||
static func satelliteStreetsStyleURL() -> URL {
|
||||
return MGLDocumentationExampleTests.styleURL
|
||||
}
|
||||
}
|
||||
|
||||
//#-example-code
|
||||
let camera = MGLMapCamera(lookingAtCenter: CLLocationCoordinate2D(latitude: 37.7184, longitude: -122.4365), fromDistance: 100, pitch: 20, heading: 0)
|
||||
|
||||
@@ -287,13 +308,15 @@ class MGLDocumentationExampleTests: XCTestCase, MGLMapViewDelegate {
|
||||
|
||||
let snapshotter = MGLMapSnapshotter(options: options)
|
||||
snapshotter.start { (snapshot, error) in
|
||||
if error != nil {
|
||||
// error handler
|
||||
} else {
|
||||
// image handler
|
||||
if let error = error {
|
||||
fatalError(error.localizedDescription)
|
||||
}
|
||||
|
||||
image = snapshot?.image
|
||||
}
|
||||
//#-end-example-code
|
||||
|
||||
wait(for: [expectation], timeout: 1)
|
||||
}
|
||||
|
||||
// For testMGLMapView().
|
||||
|
||||
Reference in New Issue
Block a user