// Copyright 2017 The Chromium Authors. All rights reserved.
// 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_INTTEST_BASE_H_
#define IOS_WEB_VIEW_TEST_WEB_VIEW_INTTEST_BASE_H_

#import <Foundation/Foundation.h>
#include <memory>
#include <string>

#include "testing/platform_test.h"

NS_ASSUME_NONNULL_BEGIN

namespace net {
namespace test_server {
class EmbeddedTestServer;
}  // namespace test_server
}  // namespace net

@class CWVWebView;
class GURL;
@class NSURL;

namespace ios_web_view {

// A test fixture for testing CWVWebView. A test server is also created to
// support loading content. The server supports the urls returned by the GetUrl*
// methods below.
class WebViewInttestBase : public PlatformTest {
 protected:
  WebViewInttestBase();
  ~WebViewInttestBase() override;

  // Returns URL to an html page with title set to |title|.
  //
  // Call ASSERT_TRUE(test_server_->Start()) before accessing the returned URL.
  GURL GetUrlForPageWithTitle(const std::string& title);

  // Returns URL to an html page with |html| within page's body tags.
  //
  // Call ASSERT_TRUE(test_server_->Start()) before accessing the returned URL.
  GURL GetUrlForPageWithHtmlBody(const std::string& html);

  // Returns URL to an html page with title set to |title| and |body| within
  // the page's body tags.
  //
  // Call ASSERT_TRUE(test_server_->Start()) before accessing the returned URL.
  GURL GetUrlForPageWithTitleAndBody(const std::string& title,
                                     const std::string& body);

  // Returns URL to an html page with |html|. |html| contains entire html of the
  // page.
  //
  // Call ASSERT_TRUE(test_server_->Start()) before accessing the returned URL.
  GURL GetUrlForPageWithHtml(const std::string& html);

  // CWVWebView created with default configuration and frame equal to screen
  // bounds.
  CWVWebView* web_view_;

  // Embedded server for handling requests sent to the URLs returned by the
  // GetURL* methods.
  std::unique_ptr<net::test_server::EmbeddedTestServer> test_server_;
};

}  // namespace ios_web_view

NS_ASSUME_NONNULL_END

#endif  // IOS_WEB_VIEW_TEST_WEB_VIEW_INTTEST_BASE_H_
