Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(103)

Side by Side Diff: ios/web/test/web_int_test.mm

Issue 2599233002: Created test for window.location.assign. (Closed)
Patch Set: move shared code to WebIntTest Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « ios/web/test/web_int_test.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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/test/web_int_test.h" 5 #import "ios/web/test/web_int_test.h"
6 6
7 #import "base/ios/block_types.h" 7 #import "base/ios/block_types.h"
8 8 #include "base/memory/ptr_util.h"
9 #import "base/test/ios/wait_util.h" 9 #import "base/test/ios/wait_util.h"
10 #import "ios/web/public/test/http_server.h" 10 #import "ios/web/public/test/http_server.h"
11 #import "ios/web/public/test/js_test_util.h"
12 #include "ios/web/public/web_state/web_state_observer.h"
11 #import "ios/web/public/web_view_creation_util.h" 13 #import "ios/web/public/web_view_creation_util.h"
12 14
13 namespace web { 15 namespace web {
14 16
17 #pragma mark - IntTestWebStateObserver
18
19 // WebStateObserver class that is used to track when page loads finish.
20 class IntTestWebStateObserver : public web::WebStateObserver {
21 public:
22 IntTestWebStateObserver(web::WebState* web_state)
23 : web::WebStateObserver(web_state), page_loaded_(false) {}
24
25 // Instructs the observer to listen for page loads for |url|.
26 void ExpectPageLoad(const GURL& url) {
27 expected_url_ = url;
28 page_loaded_ = false;
29 }
30
31 // Whether |expected_url_| has been loaded successfully.
32 bool IsExpectedPageLoaded() { return page_loaded_; }
33
34 // WebStateObserver methods:
35 void PageLoaded(
36 web::PageLoadCompletionStatus load_completion_status) override {
37 ASSERT_EQ(load_completion_status == web::PageLoadCompletionStatus::SUCCESS,
38 expected_url_.is_valid());
39 page_loaded_ = true;
40 }
41
42 private:
43 GURL expected_url_;
44 bool page_loaded_;
45 };
46
47 #pragma mark - WebIntTest
48
15 WebIntTest::WebIntTest() {} 49 WebIntTest::WebIntTest() {}
16 WebIntTest::~WebIntTest() {} 50 WebIntTest::~WebIntTest() {}
17 51
18 void WebIntTest::SetUp() { 52 void WebIntTest::SetUp() {
19 WebTest::SetUp(); 53 WebTest::SetUp();
20 54
55 // Start the http server.
21 web::test::HttpServer& server = web::test::HttpServer::GetSharedInstance(); 56 web::test::HttpServer& server = web::test::HttpServer::GetSharedInstance();
22 ASSERT_FALSE(server.IsRunning()); 57 ASSERT_FALSE(server.IsRunning());
23 server.StartOrDie(); 58 server.StartOrDie();
24 59
60 // Remove any previously existing WKWebView data.
25 RemoveWKWebViewCreatedData([WKWebsiteDataStore defaultDataStore], 61 RemoveWKWebViewCreatedData([WKWebsiteDataStore defaultDataStore],
26 [WKWebsiteDataStore allWebsiteDataTypes]); 62 [WKWebsiteDataStore allWebsiteDataTypes]);
63
64 // Create the WebState and its WebStateObserver.
65 web::WebState::CreateParams web_state_create_params(GetBrowserState());
66 web_state_ = web::WebState::Create(web_state_create_params);
67 observer_ = base::WrapUnique(new IntTestWebStateObserver(web_state()));
68
69 // Resize the webview so that pages can be properly rendered.
70 web_state()->GetView().frame =
71 [UIApplication sharedApplication].keyWindow.bounds;
72
73 // Enable web usage for the WebState.
74 web_state()->SetWebUsageEnabled(true);
27 } 75 }
28 76
29 void WebIntTest::TearDown() { 77 void WebIntTest::TearDown() {
30 RemoveWKWebViewCreatedData([WKWebsiteDataStore defaultDataStore], 78 RemoveWKWebViewCreatedData([WKWebsiteDataStore defaultDataStore],
31 [WKWebsiteDataStore allWebsiteDataTypes]); 79 [WKWebsiteDataStore allWebsiteDataTypes]);
32 80
33 web::test::HttpServer& server = web::test::HttpServer::GetSharedInstance(); 81 web::test::HttpServer& server = web::test::HttpServer::GetSharedInstance();
34 server.Stop(); 82 server.Stop();
35 EXPECT_FALSE(server.IsRunning()); 83 EXPECT_FALSE(server.IsRunning());
36 84
37 WebTest::TearDown(); 85 WebTest::TearDown();
38 } 86 }
39 87
88 id WebIntTest::ExecuteJavaScript(NSString* script) {
89 return web::ExecuteJavaScript(web_state()->GetJSInjectionReceiver(), script);
90 }
91
92 void WebIntTest::ExecuteBlockAndWaitForLoad(const GURL& url,
93 ProceduralBlock block) {
94 DCHECK(block);
95 observer_->ExpectPageLoad(url);
96 block();
97 base::test::ios::WaitUntilCondition(^bool {
98 return observer_->IsExpectedPageLoaded();
99 });
100 }
101
102 void WebIntTest::LoadUrl(const GURL& url) {
103 ExecuteBlockAndWaitForLoad(url, ^{
104 web::NavigationManager::WebLoadParams params(url);
105 navigation_manager()->LoadURLWithParams(params);
106 });
107 }
108
40 void WebIntTest::RemoveWKWebViewCreatedData(WKWebsiteDataStore* data_store, 109 void WebIntTest::RemoveWKWebViewCreatedData(WKWebsiteDataStore* data_store,
41 NSSet* websiteDataTypes) { 110 NSSet* websiteDataTypes) {
42 __block bool data_removed = false; 111 __block bool data_removed = false;
43 112
44 ProceduralBlock remove_data = ^{ 113 ProceduralBlock remove_data = ^{
45 [data_store removeDataOfTypes:websiteDataTypes 114 [data_store removeDataOfTypes:websiteDataTypes
46 modifiedSince:[NSDate distantPast] 115 modifiedSince:[NSDate distantPast]
47 completionHandler:^{ 116 completionHandler:^{
48 data_removed = true; 117 data_removed = true;
49 }]; 118 }];
(...skipping 14 matching lines...) Expand all
64 }]; 133 }];
65 } else { 134 } else {
66 remove_data(); 135 remove_data();
67 } 136 }
68 137
69 base::test::ios::WaitUntilCondition(^bool { 138 base::test::ios::WaitUntilCondition(^bool {
70 return data_removed; 139 return data_removed;
71 }); 140 });
72 } 141 }
73 142
143 NSInteger WebIntTest::GetIndexOfNavigationItem(
144 const web::NavigationItem* item) {
145 for (NSInteger i = 0; i < navigation_manager()->GetItemCount(); ++i) {
146 if (navigation_manager()->GetItemAtIndex(i) == item)
147 return i;
148 }
149 return NSNotFound;
150 }
151
74 } // namespace web 152 } // namespace web
OLDNEW
« no previous file with comments | « ios/web/test/web_int_test.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698