Skip to content

Commit b59c15f

Browse files
committed
Run tests for both UIWebView and WKWebView. Done in a pretty ghetto way. Much better would be to bundle WK/UI bridges into a single class, which can handle both webview types
1 parent 810806f commit b59c15f

File tree

3 files changed

+88
-61
lines changed

3 files changed

+88
-61
lines changed

Tests/WebViewJavascriptBridge.xcodeproj/project.pbxproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
2C3E7C641C5A928700A1E322 /* WebViewJavascriptBridge_JS.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C3E7C5E1C5A928700A1E322 /* WebViewJavascriptBridge_JS.m */; };
1313
2C3E7C651C5A928700A1E322 /* WebViewJavascriptBridgeBase.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C3E7C601C5A928700A1E322 /* WebViewJavascriptBridgeBase.m */; };
1414
2C3E7C661C5A928700A1E322 /* WKWebViewJavascriptBridge.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C3E7C621C5A928700A1E322 /* WKWebViewJavascriptBridge.m */; };
15+
2C864FFD1C60FC8A00954B70 /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2C864FFC1C60FC8A00954B70 /* WebKit.framework */; };
1516
3D99867E1AE2A3B2001DDA2C /* echo.html in Resources */ = {isa = PBXBuildFile; fileRef = 3D99867D1AE2A3B2001DDA2C /* echo.html */; };
1617
3D9E5F2F1AE288E5009D1C36 /* BridgeTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D9E5F2E1AE288E5009D1C36 /* BridgeTests.m */; };
1718
3DCCF7DB1AE28C2900CE7C51 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 3DCCF7DA1AE28C2900CE7C51 /* main.m */; };
@@ -39,6 +40,7 @@
3940
2C3E7C601C5A928700A1E322 /* WebViewJavascriptBridgeBase.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WebViewJavascriptBridgeBase.m; sourceTree = "<group>"; };
4041
2C3E7C611C5A928700A1E322 /* WKWebViewJavascriptBridge.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKWebViewJavascriptBridge.h; sourceTree = "<group>"; };
4142
2C3E7C621C5A928700A1E322 /* WKWebViewJavascriptBridge.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WKWebViewJavascriptBridge.m; sourceTree = "<group>"; };
43+
2C864FFC1C60FC8A00954B70 /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = System/Library/Frameworks/WebKit.framework; sourceTree = SDKROOT; };
4244
3D0FE4751AE2886500BB4104 /* WebViewJavascriptBridgeTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = WebViewJavascriptBridgeTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
4345
3D0FE47B1AE2886500BB4104 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
4446
3D99867D1AE2A3B2001DDA2C /* echo.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = echo.html; path = WebViewJavascriptBridgeTests/echo.html; sourceTree = SOURCE_ROOT; };
@@ -56,6 +58,7 @@
5658
isa = PBXFrameworksBuildPhase;
5759
buildActionMask = 2147483647;
5860
files = (
61+
2C864FFD1C60FC8A00954B70 /* WebKit.framework in Frameworks */,
5962
);
6063
runOnlyForDeploymentPostprocessing = 0;
6164
};
@@ -89,6 +92,7 @@
8992
3D0FE4611AE2886400BB4104 = {
9093
isa = PBXGroup;
9194
children = (
95+
2C864FFC1C60FC8A00954B70 /* WebKit.framework */,
9296
2C35E9751C5A7F8E0093FB29 /* [email protected] */,
9397
2C3E7C5A1C5A928700A1E322 /* WebViewJavascriptBridge */,
9498
3D0FE4791AE2886500BB4104 /* WebViewJavascriptBridgeTests */,
Lines changed: 83 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
//
22
// BridgeTests.m
3-
// WebViewJavascriptBridge
3+
// WKWebViewJavascriptBridge
44
//
55
// Created by Pieter De Baets on 18/04/2015.
66
// Copyright (c) 2015 marcuswestin. All rights reserved.
@@ -9,6 +9,7 @@
99
#import <XCTest/XCTest.h>
1010

1111
#import "WebViewJavascriptBridge.h"
12+
#import "WKWebViewJavascriptBridge.h"
1213
#import "AppDelegate.h"
1314

1415
static NSString *const echoHandler = @"echoHandler";
@@ -18,92 +19,114 @@ @interface BridgeTests : XCTestCase
1819
@end
1920

2021
@implementation BridgeTests {
21-
UIWebView *_webView;
22+
UIWebView *_uiWebView;
23+
WKWebView *_wkWebView;
2224
}
2325

24-
- (void)setUp
25-
{
26-
[super setUp];
27-
28-
UIViewController *rootVC = [[(AppDelegate *)[[UIApplication sharedApplication] delegate] window] rootViewController];
29-
_webView = [[UIWebView alloc] initWithFrame:rootVC.view.bounds];
30-
[rootVC.view addSubview:_webView];
26+
- (void)setUp {
27+
[super setUp];
28+
29+
UIViewController *rootVC = [[(AppDelegate *)[[UIApplication sharedApplication] delegate] window] rootViewController];
30+
_uiWebView = [[UIWebView alloc] initWithFrame:rootVC.view.bounds];
31+
CGRect wkFrame = _uiWebView.frame;
32+
wkFrame.origin.y += _uiWebView.frame.size.height;
33+
_wkWebView = [[WKWebView alloc] initWithFrame:wkFrame];
34+
[rootVC.view addSubview:_wkWebView];
3135
}
3236

33-
- (void)tearDown
34-
{
35-
[super tearDown];
36-
[_webView removeFromSuperview];
37+
- (void)tearDown {
38+
[super tearDown];
39+
[_uiWebView removeFromSuperview];
40+
[_wkWebView removeFromSuperview];
3741
}
3842

39-
static void loadEchoSample(UIWebView *webView)
40-
{
41-
NSURLRequest *request = [NSURLRequest requestWithURL:[[NSBundle mainBundle] URLForResource:@"echo" withExtension:@"html"]];
42-
[webView loadRequest:request];
43+
static void loadEchoSample(id webView) {
44+
NSURLRequest *request = [NSURLRequest requestWithURL:[[NSBundle mainBundle] URLForResource:@"echo" withExtension:@"html"]];
45+
[(UIWebView*)webView loadRequest:request];
4346
}
4447

45-
- (void)testInitialization
46-
{
47-
XCTestExpectation *startup = [self expectationWithDescription:@"Startup completed"];
48-
WebViewJavascriptBridge *bridge = [WebViewJavascriptBridge bridgeForWebView:_webView];
48+
- (void)testInitialization {
49+
[self classSpecificTestInitialization:[WebViewJavascriptBridge class] webView:_uiWebView];
50+
[self classSpecificTestInitialization:[WKWebViewJavascriptBridge class] webView:_wkWebView];
51+
[self waitForExpectationsWithTimeout:10 handler:NULL];
52+
}
53+
- (void)classSpecificTestInitialization:(Class)cls webView:(id)webView {
54+
XCTestExpectation *startup = [self expectationWithDescription:@"Startup completed"];
55+
WebViewJavascriptBridge *bridge = [self bridgeForCls:cls webView:webView];
4956
[bridge registerHandler:@"Greet" handler:^(id data, WVJBResponseCallback responseCallback) {
5057
XCTAssertEqualObjects(data, @"Hello world");
5158
[startup fulfill];
5259
}];
53-
XCTAssertNotNil(bridge);
54-
55-
loadEchoSample(_webView);
56-
[self waitForExpectationsWithTimeout:1 handler:NULL];
60+
XCTAssertNotNil(bridge);
61+
62+
loadEchoSample(webView);
5763
}
5864

59-
- (void)testEchoHandler
60-
{
61-
WebViewJavascriptBridge *bridge = [WebViewJavascriptBridge bridgeForWebView:_webView];
62-
63-
XCTestExpectation *callbackInvocked = [self expectationWithDescription:@"Callback invoked"];
64-
[bridge callHandler:echoHandler data:@"testEchoHandler" responseCallback:^(id responseData) {
65-
XCTAssertEqualObjects(responseData, @"testEchoHandler");
66-
[callbackInvocked fulfill];
67-
}];
68-
69-
loadEchoSample(_webView);
70-
[self waitForExpectationsWithTimeout:1 handler:NULL];
65+
- (void)testEchoHandler {
66+
[self classSpecificTestEchoHandler:[WebViewJavascriptBridge class] webView:_uiWebView];
67+
[self classSpecificTestEchoHandler:[WKWebViewJavascriptBridge class] webView:_wkWebView];
68+
[self waitForExpectationsWithTimeout:10 handler:NULL];
69+
}
70+
- (void)classSpecificTestEchoHandler:(Class)cls webView:(id)webView {
71+
WebViewJavascriptBridge *bridge = [self bridgeForCls:cls webView:webView];
72+
73+
XCTestExpectation *callbackInvocked = [self expectationWithDescription:@"Callback invoked"];
74+
[bridge callHandler:echoHandler data:@"testEchoHandler" responseCallback:^(id responseData) {
75+
XCTAssertEqualObjects(responseData, @"testEchoHandler");
76+
[callbackInvocked fulfill];
77+
}];
78+
79+
loadEchoSample(webView);
7180
}
7281

73-
- (void)testEchoHandlerAfterSetup
74-
{
75-
WebViewJavascriptBridge *bridge = [WebViewJavascriptBridge bridgeForWebView:_webView];
82+
- (void)testEchoHandlerAfterSetup {
83+
[self classSpecificTestEchoHandlerAfterSetup:[WebViewJavascriptBridge class] webView:_uiWebView];
84+
[self classSpecificTestEchoHandlerAfterSetup:[WKWebViewJavascriptBridge class] webView:_wkWebView];
85+
[self waitForExpectationsWithTimeout:10 handler:NULL];
86+
}
87+
- (void)classSpecificTestEchoHandlerAfterSetup:(Class)cls webView:(id)webView {
88+
WebViewJavascriptBridge *bridge = [self bridgeForCls:cls webView:webView];
7689

7790
XCTestExpectation *callbackInvocked = [self expectationWithDescription:@"Callback invoked"];
78-
loadEchoSample(_webView);
91+
loadEchoSample(webView);
7992
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 150 * NSEC_PER_MSEC), dispatch_get_main_queue(), ^{
8093
[bridge callHandler:echoHandler data:@"testEchoHandler" responseCallback:^(id responseData) {
8194
XCTAssertEqualObjects(responseData, @"testEchoHandler");
8295
[callbackInvocked fulfill];
8396
}];
8497
});
85-
[self waitForExpectationsWithTimeout:1 handler:NULL];
8698
}
8799

88-
- (void)testObjectEncoding
89-
{
90-
WebViewJavascriptBridge *bridge = [WebViewJavascriptBridge bridgeForWebView:_webView];
91-
92-
void (^echoObject)(id) = ^void(id object) {
93-
XCTestExpectation *callbackInvocked = [self expectationWithDescription:@"Callback invoked"];
94-
[bridge callHandler:echoHandler data:object responseCallback:^(id responseData) {
95-
XCTAssertEqualObjects(responseData, object);
96-
[callbackInvocked fulfill];
97-
}];
98-
};
100+
- (void)testObjectEncoding {
101+
[self classSpecificTestObjectEncoding:[WebViewJavascriptBridge class] webView:_uiWebView];
102+
[self classSpecificTestObjectEncoding:[WKWebViewJavascriptBridge class] webView:_wkWebView];
103+
[self waitForExpectationsWithTimeout:10 handler:NULL];
104+
}
105+
- (void)classSpecificTestObjectEncoding:(Class)cls webView:(id)webView {
106+
WebViewJavascriptBridge *bridge = [self bridgeForCls:cls webView:webView];
107+
108+
void (^echoObject)(id) = ^void(id object) {
109+
XCTestExpectation *callbackInvocked = [self expectationWithDescription:@"Callback invoked"];
110+
[bridge callHandler:echoHandler data:object responseCallback:^(id responseData) {
111+
XCTAssertEqualObjects(responseData, object);
112+
[callbackInvocked fulfill];
113+
}];
114+
};
115+
116+
echoObject(@"A string sent over the wire");
117+
echoObject(@"A string with '\"'/\\");
118+
echoObject(@[ @1, @2, @3 ]);
119+
echoObject(@{ @"a" : @1, @"b" : @2 });
120+
121+
loadEchoSample(webView);
122+
}
99123

100-
echoObject(@"A string sent over the wire");
101-
echoObject(@"A string with '\"'/\\");
102-
echoObject(@[ @1, @2, @3 ]);
103-
echoObject(@{ @"a" : @1, @"b" : @2 });
104124

105-
loadEchoSample(_webView);
106-
[self waitForExpectationsWithTimeout:1 handler:NULL];
125+
- (WebViewJavascriptBridge*)bridgeForCls:(Class)cls webView:(id)webView {
126+
if (cls == [WebViewJavascriptBridge class]) {
127+
return [WebViewJavascriptBridge bridgeForWebView:webView];
128+
} else {
129+
return (WebViewJavascriptBridge*)[WKWebViewJavascriptBridge bridgeForWebView:_wkWebView];
130+
}
107131
}
108-
109132
@end

WebViewJavascriptBridge/WKWebViewJavascriptBridge.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
// Copyright (c) 2014 @LokiMeyburg. All rights reserved.
66
//
77

8-
#if (__MAC_OS_X_VERSION_MAX_ALLOWED > __MAC_10_9 || __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_7_1)
8+
#if (__MAC_OS_X_VERSION_MAX_ALLOWED > __MAC_10_9 || __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_7_1)
99
#define supportsWKWebKit
1010
#endif
1111

0 commit comments

Comments
 (0)