From 1b407e85e9ee03124e24b71a856045c254775e6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Minh=20Nguye=CC=82=CC=83n?= Date: Thu, 21 Dec 2017 00:28:19 -0800 Subject: [PATCH] [ios, macos] Fixed MGLMapSnapshotter test crash MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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. --- platform/darwin/src/MGLMapSnapshotter.h | 8 ++--- .../test/MGLDocumentationExampleTests.swift | 35 +++++++++++++++---- 2 files changed, 33 insertions(+), 10 deletions(-) diff --git a/platform/darwin/src/MGLMapSnapshotter.h b/platform/darwin/src/MGLMapSnapshotter.h index fc68204a7..426ab1bb0 100644 --- a/platform/darwin/src/MGLMapSnapshotter.h +++ b/platform/darwin/src/MGLMapSnapshotter.h @@ -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 } ``` */ diff --git a/platform/darwin/test/MGLDocumentationExampleTests.swift b/platform/darwin/test/MGLDocumentationExampleTests.swift index 8762af9ba..668e5f57f 100644 --- a/platform/darwin/test/MGLDocumentationExampleTests.swift +++ b/platform/darwin/test/MGLDocumentationExampleTests.swift @@ -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().