blob: faf7d66a8a4ae1f671ed3ae707424a98cca37a4f [file] [log] [blame]
// Copyright 2014 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.
#import "ios/web/public/test/http_server.h"
#import <Foundation/Foundation.h>
#include <string>
#import "base/mac/scoped_nsobject.h"
#include "base/memory/scoped_ptr.h"
#include "base/strings/sys_string_conversions.h"
#import "base/test/ios/wait_util.h"
#include "ios/web/public/test/response_providers/string_response_provider.h"
#import "ios/web/test/web_int_test.h"
#import "net/base/mac/url_conversions.h"
#include "net/http/http_response_headers.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "testing/gtest_mac.h"
// A test fixture for verifying the behavior of web::test::HttpServer.
typedef web::WebIntTest HttpServerTest;
// Tests that a web::test::HttpServer can be started and can send and receive
// requests and response from |TestResponseProvider|.
TEST_F(HttpServerTest, StartAndInterfaceWithResponseProvider) {
const std::string kHelloWorld = "Hello World";
scoped_ptr<web::StringResponseProvider> provider(
new web::StringResponseProvider(kHelloWorld));
web::test::HttpServer& server = web::test::HttpServer::GetSharedInstance();
ASSERT_TRUE(server.IsRunning());
server.AddResponseProvider(provider.release());
__block base::scoped_nsobject<NSString> page_result;
id completion_handler =
^(NSData* data, NSURLResponse* response, NSError* error) {
page_result.reset([[NSString alloc]
initWithData:data encoding:NSUTF8StringEncoding]);
};
NSURL* url = net::NSURLWithGURL(server.MakeUrl("http://whatever"));
NSURLSessionDataTask* data_task =
[[NSURLSession sharedSession] dataTaskWithURL:url
completionHandler:completion_handler];
[data_task resume];
base::test::ios::WaitUntilCondition(^bool() {
return page_result;
});
EXPECT_NSEQ(page_result, base::SysUTF8ToNSString(kHelloWorld));
}