| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #import "ios/web/web_state/ui/crw_wk_script_message_router.h" | 5 #import "ios/web/web_state/ui/crw_wk_script_message_router.h" |
| 6 | 6 |
| 7 #include "base/mac/scoped_block.h" | 7 #include "base/mac/scoped_block.h" |
| 8 #import "base/mac/scoped_nsobject.h" | |
| 9 #include "base/memory/ptr_util.h" | 8 #include "base/memory/ptr_util.h" |
| 10 #include "ios/web/public/test/fakes/test_browser_state.h" | 9 #include "ios/web/public/test/fakes/test_browser_state.h" |
| 11 #import "ios/web/public/test/fakes/test_web_client.h" | 10 #import "ios/web/public/test/fakes/test_web_client.h" |
| 12 #include "ios/web/public/test/scoped_testing_web_client.h" | 11 #include "ios/web/public/test/scoped_testing_web_client.h" |
| 13 #include "ios/web/public/test/web_test.h" | 12 #include "ios/web/public/test/web_test.h" |
| 14 #import "ios/web/public/web_view_creation_util.h" | 13 #import "ios/web/public/web_view_creation_util.h" |
| 15 #include "third_party/ocmock/OCMock/OCMock.h" | 14 #include "third_party/ocmock/OCMock/OCMock.h" |
| 16 #include "third_party/ocmock/gtest_support.h" | 15 #include "third_party/ocmock/gtest_support.h" |
| 17 | 16 |
| 17 #if !defined(__has_feature) || !__has_feature(objc_arc) |
| 18 #error "This file requires ARC support." |
| 19 #endif |
| 20 |
| 18 namespace { | 21 namespace { |
| 19 | 22 |
| 20 // Returns WKScriptMessage mock. | 23 // Returns WKScriptMessage mock. |
| 21 id GetScriptMessageMock(WKWebView* web_view, NSString* name) { | 24 id GetScriptMessageMock(WKWebView* web_view, NSString* name) { |
| 22 id result = [OCMockObject mockForClass:[WKScriptMessage class]]; | 25 id result = [OCMockObject mockForClass:[WKScriptMessage class]]; |
| 23 [[[result stub] andReturn:web_view] webView]; | 26 [[[result stub] andReturn:web_view] webView]; |
| 24 [[[result stub] andReturn:name] name]; | 27 [[[result stub] andReturn:name] name]; |
| 25 return result; | 28 return result; |
| 26 } | 29 } |
| 27 | 30 |
| 28 // Test fixture for CRWWKScriptMessageRouter. | 31 // Test fixture for CRWWKScriptMessageRouter. |
| 29 class CRWWKScriptMessageRouterTest : public web::WebTest { | 32 class CRWWKScriptMessageRouterTest : public web::WebTest { |
| 30 public: | 33 public: |
| 31 CRWWKScriptMessageRouterTest() | 34 CRWWKScriptMessageRouterTest() |
| 32 : web_client_(base::WrapUnique(new web::WebClient)) {} | 35 : web_client_(base::WrapUnique(new web::WebClient)) {} |
| 33 | 36 |
| 34 protected: | 37 protected: |
| 35 void SetUp() override { | 38 void SetUp() override { |
| 36 web::WebTest::SetUp(); | 39 web::WebTest::SetUp(); |
| 37 // Mock WKUserContentController object. | 40 // Mock WKUserContentController object. |
| 38 controller_mock_.reset( | 41 controller_mock_ = |
| 39 [[OCMockObject mockForClass:[WKUserContentController class]] retain]); | 42 [OCMockObject mockForClass:[WKUserContentController class]]; |
| 40 [controller_mock_ setExpectationOrderMatters:YES]; | 43 [controller_mock_ setExpectationOrderMatters:YES]; |
| 41 | 44 |
| 42 // Create testable CRWWKScriptMessageRouter. | 45 // Create testable CRWWKScriptMessageRouter. |
| 43 router_.reset(static_cast<id<WKScriptMessageHandler>>( | 46 router_ = static_cast<id<WKScriptMessageHandler>>( |
| 44 [[CRWWKScriptMessageRouter alloc] | 47 [[CRWWKScriptMessageRouter alloc] |
| 45 initWithUserContentController:controller_mock_])); | 48 initWithUserContentController:controller_mock_]); |
| 46 | 49 |
| 47 // Prepare test data. | 50 // Prepare test data. |
| 48 handler1_.reset([^{ | 51 handler1_ = [^{ |
| 49 } copy]); | 52 } copy]; |
| 50 handler2_.reset([^{ | 53 handler2_ = [^{ |
| 51 } copy]); | 54 } copy]; |
| 52 handler3_.reset([^{ | 55 handler3_ = [^{ |
| 53 } copy]); | 56 } copy]; |
| 54 name1_.reset([@"name1" copy]); | 57 name1_ = [@"name1" copy]; |
| 55 name2_.reset([@"name2" copy]); | 58 name2_ = [@"name2" copy]; |
| 56 name3_.reset([@"name3" copy]); | 59 name3_ = [@"name3" copy]; |
| 57 web_view1_.reset([web::BuildWKWebView(CGRectZero, &browser_state_) retain]); | 60 web_view1_ = web::BuildWKWebView(CGRectZero, &browser_state_); |
| 58 web_view2_.reset([web::BuildWKWebView(CGRectZero, &browser_state_) retain]); | 61 web_view2_ = web::BuildWKWebView(CGRectZero, &browser_state_); |
| 59 web_view3_.reset([web::BuildWKWebView(CGRectZero, &browser_state_) retain]); | 62 web_view3_ = web::BuildWKWebView(CGRectZero, &browser_state_); |
| 60 } | 63 } |
| 61 void TearDown() override { | 64 void TearDown() override { |
| 62 EXPECT_OCMOCK_VERIFY(controller_mock_); | 65 EXPECT_OCMOCK_VERIFY(controller_mock_); |
| 63 web::WebTest::TearDown(); | 66 web::WebTest::TearDown(); |
| 64 } | 67 } |
| 65 | 68 |
| 66 // WKUserContentController mock used to create testable router. | 69 // WKUserContentController mock used to create testable router. |
| 67 base::scoped_nsobject<id> controller_mock_; | 70 id controller_mock_; |
| 68 | 71 |
| 69 // CRWWKScriptMessageRouter set up for testing. | 72 // CRWWKScriptMessageRouter set up for testing. |
| 70 base::scoped_nsobject<id> router_; | 73 id router_; |
| 71 | 74 |
| 72 // Tests data. | 75 // Tests data. |
| 73 typedef void (^WKScriptMessageHandler)(WKScriptMessage*); | 76 typedef void (^WKScriptMessageHandler)(WKScriptMessage*); |
| 74 base::mac::ScopedBlock<WKScriptMessageHandler> handler1_; | 77 WKScriptMessageHandler handler1_; |
| 75 base::mac::ScopedBlock<WKScriptMessageHandler> handler2_; | 78 WKScriptMessageHandler handler2_; |
| 76 base::mac::ScopedBlock<WKScriptMessageHandler> handler3_; | 79 WKScriptMessageHandler handler3_; |
| 77 base::scoped_nsobject<NSString> name1_; | 80 NSString* name1_; |
| 78 base::scoped_nsobject<NSString> name2_; | 81 NSString* name2_; |
| 79 base::scoped_nsobject<NSString> name3_; | 82 NSString* name3_; |
| 80 base::scoped_nsobject<WKWebView> web_view1_; | 83 WKWebView* web_view1_; |
| 81 base::scoped_nsobject<WKWebView> web_view2_; | 84 WKWebView* web_view2_; |
| 82 base::scoped_nsobject<WKWebView> web_view3_; | 85 WKWebView* web_view3_; |
| 83 | 86 |
| 84 private: | 87 private: |
| 85 // WebClient and BrowserState for testing. | 88 // WebClient and BrowserState for testing. |
| 86 web::ScopedTestingWebClient web_client_; | 89 web::ScopedTestingWebClient web_client_; |
| 87 web::TestBrowserState browser_state_; | 90 web::TestBrowserState browser_state_; |
| 88 }; | 91 }; |
| 89 | 92 |
| 90 // Tests CRWWKScriptMessageRouter designated initializer. | 93 // Tests CRWWKScriptMessageRouter designated initializer. |
| 91 TEST_F(CRWWKScriptMessageRouterTest, Initialization) { | 94 TEST_F(CRWWKScriptMessageRouterTest, Initialization) { |
| 92 EXPECT_TRUE(router_); | 95 EXPECT_TRUE(router_); |
| (...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 193 didReceiveScriptMessage:message1]; | 196 didReceiveScriptMessage:message1]; |
| 194 [router_ userContentController:controller_mock_ | 197 [router_ userContentController:controller_mock_ |
| 195 didReceiveScriptMessage:message2]; | 198 didReceiveScriptMessage:message2]; |
| 196 [router_ userContentController:controller_mock_ | 199 [router_ userContentController:controller_mock_ |
| 197 didReceiveScriptMessage:message3]; | 200 didReceiveScriptMessage:message3]; |
| 198 | 201 |
| 199 EXPECT_EQ(3, last_called_handler); | 202 EXPECT_EQ(3, last_called_handler); |
| 200 } | 203 } |
| 201 | 204 |
| 202 } // namespace | 205 } // namespace |
| OLD | NEW |