// Copyright 2017 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef IOS_WEB_VIEW_TEST_WEB_VIEW_TEST_UTIL_H_
#define IOS_WEB_VIEW_TEST_WEB_VIEW_TEST_UTIL_H_
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@class CWVWebView;
namespace ios_web_view {
namespace test {
// Creates web view with default configuration and frame equal to screen bounds.
[[nodiscard]] CWVWebView* CreateWebView();
// Loads |URL| in |web_view| and waits until the load completes. Asserts if
// loading does not complete.
[[nodiscard]] bool LoadUrl(CWVWebView* web_view, NSURL* url);
// Returns whether the element with |element_id| in the passed |web_view| has
// been tapped using a JavaScript click() event.
[[nodiscard]] bool TapWebViewElementWithId(CWVWebView* web_view,
NSString* element_id);
// Waits until |script| is executed and synchronously returns the evaluation
// result.
id EvaluateJavaScript(CWVWebView* web_view,
NSString* script,
NSError** error = nil);
// Waits for |web_view| to contain |text|. Returns false if the condition is not
// met within a timeout.
[[nodiscard]] bool WaitForWebViewContainingTextOrTimeout(CWVWebView* web_view,
NSString* text);
// Waits until |web_view| stops loading. Returns false if the condition is not
// met within a timeout.
[[nodiscard]] bool WaitForWebViewLoadCompletionOrTimeout(CWVWebView* web_view);
// Copies the state of |source_web_view| to |destination_web_view| using state
// restoration.
void CopyWebViewState(CWVWebView* source_web_view,
CWVWebView* destination_web_view);
} // namespace test
} // namespace ios_web_view
NS_ASSUME_NONNULL_END
#endif // IOS_WEB_VIEW_TEST_WEB_VIEW_TEST_UTIL_H_