@@ -39,6 +39,7 @@ final class WKEngineSessionTests: XCTestCase {
3939 subject? . load ( url: url)
4040
4141 XCTAssertEqual ( webViewProvider. webView. loadCalled, 0 )
42+ prepareForTearDown ( subject!)
4243 }
4344
4445 func testLoadURLGivenNotAURLThenDoesntLoad( ) {
@@ -49,6 +50,7 @@ final class WKEngineSessionTests: XCTestCase {
4950
5051 // TODO: FXIOS-7981 Check scheme before loading
5152 XCTAssertEqual ( webViewProvider. webView. loadCalled, 1 )
53+ prepareForTearDown ( subject!)
5254 }
5355
5456 func testLoadURLGivenNormalURLThenLoad( ) {
@@ -59,6 +61,7 @@ final class WKEngineSessionTests: XCTestCase {
5961
6062 XCTAssertEqual ( webViewProvider. webView. loadCalled, 1 )
6163 XCTAssertEqual ( webViewProvider. webView. url? . absoluteString, url)
64+ prepareForTearDown ( subject!)
6265 }
6366
6467 func testLoadURLGivenReaderModeURLThenLoad( ) {
@@ -70,6 +73,7 @@ final class WKEngineSessionTests: XCTestCase {
7073 XCTAssertEqual ( webViewProvider. webView. loadCalled, 1 )
7174 XCTAssertEqual ( webViewProvider. webView. url? . absoluteString,
7275 " http://localhost:0/reader-mode/page?url=http%3A%2F%2Fexample%2Ecom " )
76+ prepareForTearDown ( subject!)
7377 }
7478
7579 func testLoadURLGivenFileURLThenLoadFileURL( ) {
@@ -82,6 +86,7 @@ final class WKEngineSessionTests: XCTestCase {
8286 XCTAssertEqual ( webViewProvider. webView. loadFileURLCalled, 1 )
8387 XCTAssertEqual ( webViewProvider. webView. url? . absoluteString, " file://path/to/abc/dirA/A.html " )
8488 XCTAssertEqual ( webViewProvider. webView. loadFileReadAccessURL? . absoluteString, " file://path/to/abc/dirA/ " )
89+ prepareForTearDown ( subject!)
8590 }
8691
8792 // MARK: Stop URL
@@ -92,6 +97,7 @@ final class WKEngineSessionTests: XCTestCase {
9297 subject? . stopLoading ( )
9398
9499 XCTAssertEqual ( webViewProvider. webView. stopLoadingCalled, 1 )
100+ prepareForTearDown ( subject!)
95101 }
96102
97103 // MARK: Go back
@@ -102,6 +108,7 @@ final class WKEngineSessionTests: XCTestCase {
102108 subject? . goBack ( )
103109
104110 XCTAssertEqual ( webViewProvider. webView. goBackCalled, 1 )
111+ prepareForTearDown ( subject!)
105112 }
106113
107114 // MARK: Go forward
@@ -112,6 +119,7 @@ final class WKEngineSessionTests: XCTestCase {
112119 subject? . goForward ( )
113120
114121 XCTAssertEqual ( webViewProvider. webView. goForwardCalled, 1 )
122+ prepareForTearDown ( subject!)
115123 }
116124
117125 // MARK: Reload
@@ -122,6 +130,7 @@ final class WKEngineSessionTests: XCTestCase {
122130 subject? . reload ( )
123131
124132 XCTAssertEqual ( webViewProvider. webView. reloadFromOriginCalled, 1 )
133+ prepareForTearDown ( subject!)
125134 }
126135
127136 func testReloadWhenErrorPageThenReplaceLocation( ) {
@@ -135,6 +144,7 @@ final class WKEngineSessionTests: XCTestCase {
135144 XCTAssertEqual ( webViewProvider. webView. reloadFromOriginCalled, 0 )
136145 XCTAssertEqual ( webViewProvider. webView. replaceLocationCalled, 1 )
137146 XCTAssertEqual ( webViewProvider. webView. url? . absoluteString, errorPageURL)
147+ prepareForTearDown ( subject!)
138148 }
139149
140150 // MARK: Restore
@@ -147,6 +157,7 @@ final class WKEngineSessionTests: XCTestCase {
147157
148158 XCTAssertEqual ( webViewProvider. webView. interactionState as! Data , restoredState)
149159 XCTAssertEqual ( webViewProvider. webView. loadCalled, 0 )
160+ prepareForTearDown ( subject!)
150161 }
151162
152163 func testRestoreWhenHasLastRequestThenLoadISCalled( ) {
@@ -158,13 +169,15 @@ final class WKEngineSessionTests: XCTestCase {
158169
159170 XCTAssertEqual ( webViewProvider. webView. interactionState as! Data , restoredState)
160171 XCTAssertEqual ( webViewProvider. webView. loadCalled, 2 , " Load calls it once, then restore calls it again " )
172+ prepareForTearDown ( subject!)
161173 }
162174
163175 // MARK: Observers
164176
165177 func testAddObserversWhenCreatedSubjectThenObserversAreAdded( ) {
166- _ = createSubject ( )
178+ let subject = createSubject ( )
167179 XCTAssertEqual ( webViewProvider. webView. addObserverCalled, 7 , " There are 7 KVO Constants " )
180+ prepareForTearDown ( subject!)
168181 }
169182
170183 func testRemoveObserversWhenCloseIsCalledThenObserversAreRemoved( ) {
@@ -173,6 +186,7 @@ final class WKEngineSessionTests: XCTestCase {
173186 subject? . close ( )
174187
175188 XCTAssertEqual ( webViewProvider. webView. removeObserverCalled, 7 , " There are 7 KVO Constants " )
189+ prepareForTearDown ( subject!)
176190 }
177191
178192 func testCanGoBackGivenWebviewStateThenCallsNavigationStateChanged( ) {
@@ -189,6 +203,7 @@ final class WKEngineSessionTests: XCTestCase {
189203 XCTAssertEqual ( engineSessionDelegate. onNavigationStateChangeCalled, 1 )
190204 XCTAssertTrue ( engineSessionDelegate. savedCanGoBack!)
191205 XCTAssertFalse ( engineSessionDelegate. savedCanGoForward!)
206+ prepareForTearDown ( subject!)
192207 }
193208
194209 func testCanGoForwardGivenWebviewStateThenCallsNavigationStateChanged( ) {
@@ -205,6 +220,7 @@ final class WKEngineSessionTests: XCTestCase {
205220 XCTAssertEqual ( engineSessionDelegate. onNavigationStateChangeCalled, 1 )
206221 XCTAssertFalse ( engineSessionDelegate. savedCanGoBack!)
207222 XCTAssertTrue ( engineSessionDelegate. savedCanGoForward!)
223+ prepareForTearDown ( subject!)
208224 }
209225
210226 func testEstimatedProgressGivenWebviewStateThenCallsOnProgress( ) {
@@ -219,6 +235,7 @@ final class WKEngineSessionTests: XCTestCase {
219235
220236 XCTAssertEqual ( engineSessionDelegate. onProgressCalled, 1 )
221237 XCTAssertEqual ( engineSessionDelegate. savedProgressValue, 70 )
238+ prepareForTearDown ( subject!)
222239 }
223240
224241 func testLoadingGivenNoChangeThenDoesNotCallOnLoadingStateChange( ) {
@@ -231,6 +248,7 @@ final class WKEngineSessionTests: XCTestCase {
231248 context: nil )
232249
233250 XCTAssertEqual ( engineSessionDelegate. onLoadingStateChangeCalled, 0 )
251+ prepareForTearDown ( subject!)
234252 }
235253
236254 func testLoadingGivenOldKeyThenDoesNotCallOnLoadingStateChange( ) {
@@ -243,6 +261,7 @@ final class WKEngineSessionTests: XCTestCase {
243261 context: nil )
244262
245263 XCTAssertEqual ( engineSessionDelegate. onLoadingStateChangeCalled, 0 )
264+ prepareForTearDown ( subject!)
246265 }
247266
248267 func testLoadingGivenNewKeyThenCallsOnLoadingStateChange( ) {
@@ -256,13 +275,15 @@ final class WKEngineSessionTests: XCTestCase {
256275
257276 XCTAssertEqual ( engineSessionDelegate. onLoadingStateChangeCalled, 1 )
258277 XCTAssertTrue ( engineSessionDelegate. savedLoading!)
278+ prepareForTearDown ( subject!)
259279 }
260280
261281 // MARK: User script manager
262282
263283 func testUserScriptWhenSubjectCreatedThenInjectionIntoWebviewCalled( ) {
264- _ = createSubject ( )
284+ let subject = createSubject ( )
265285 XCTAssertEqual ( userScriptManager. injectUserScriptsIntoWebViewCalled, 1 )
286+ prepareForTearDown ( subject!)
266287 }
267288
268289 // MARK: Content script manager
@@ -285,7 +306,16 @@ final class WKEngineSessionTests: XCTestCase {
285306 contentScriptManager: contentScriptManager) else {
286307 return nil
287308 }
309+
288310 trackForMemoryLeaks ( subject, file: file, line: line)
311+
289312 return subject
290313 }
314+
315+ // Adding a special teardown since as part of tracking memory leaks, we can't use an instance variable on the
316+ // test suite. A normal instance `tearDown` is called after a `addTeardownBlock`. To ensure we still can
317+ // `trackForMemoryLeaks` we need to always close any engine session that is opened, otherwise leaks happens.
318+ func prepareForTearDown( _ subject: WKEngineSession ) {
319+ subject. close ( )
320+ }
291321}
0 commit comments