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.
99#import < XCTest/XCTest.h>
1010
1111#import " WebViewJavascriptBridge.h"
12+ #import " WKWebViewJavascriptBridge.h"
1213#import " AppDelegate.h"
1314
1415static 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
0 commit comments