Skip to content

Commit efa6554

Browse files
authored
Refactor FXIOS-8106 [v124] WKUIDelegate engine tests fix (mozilla-mobile#18365)
1 parent 0797c67 commit efa6554

File tree

2 files changed

+34
-3
lines changed

2 files changed

+34
-3
lines changed

BrowserKit/Tests/WebEngineTests/Mock/MockWKEngineWebView.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,12 @@ import WebKit
77
@testable import WebEngine
88

99
class MockWKEngineWebView: UIView, WKEngineWebView {
10+
var uiDelegate: WKUIDelegate?
11+
var navigationDelegate: WKNavigationDelegate?
1012
var engineConfiguration: WKEngineConfiguration
1113
var interactionState: Any?
1214
var scrollView = UIScrollView()
1315
var url: URL?
14-
var navigationDelegate: WKNavigationDelegate?
1516
var allowsBackForwardNavigationGestures = true
1617
var allowsLinkPreview = true
1718
var isInspectable = true

BrowserKit/Tests/WebEngineTests/WKEngineSessionTests.swift

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)