// 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.

#include "ios/net/nsurlrequest_util.h"

#include "testing/gtest/include/gtest/gtest.h"
#include "testing/platform_test.h"

#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
#endif

namespace {

using NSURLRequestUtilTest = PlatformTest;

// Tests that FormatUrlRequestForLogging outputs the string in the form:
// request:<url> request.mainDocURL:<mainDocumentURL>.
TEST_F(NSURLRequestUtilTest, FormatUrlRequestForLogging) {
  NSMutableURLRequest* request = [[NSMutableURLRequest alloc] init];
  request.URL = [NSURL URLWithString:@"http://www.google.com"];
  request.mainDocumentURL = [NSURL URLWithString:@"http://www.google1.com"];
  std::string actualString, expectedString;

  actualString = net::FormatUrlRequestForLogging(request);
  expectedString = "request: http://www.google.com"
                   " request.mainDocURL: http://www.google1.com";
  EXPECT_EQ(expectedString, actualString);

  request.URL = nil;
  request.mainDocumentURL = [NSURL URLWithString:@"http://www.google1.com"];
  actualString = net::FormatUrlRequestForLogging(request);
  expectedString = "request: [nil] request.mainDocURL: http://www.google1.com";
  EXPECT_EQ(expectedString, actualString);

  request.URL = [NSURL URLWithString:@"http://www.google.com"];
  request.mainDocumentURL = nil;
  actualString = net::FormatUrlRequestForLogging(request);
  expectedString = "request: http://www.google.com request.mainDocURL: [nil]";
  EXPECT_EQ(expectedString, actualString);

  request.URL = nil;
  request.mainDocumentURL = nil;
  actualString = net::FormatUrlRequestForLogging(request);
  expectedString = "request: [nil] request.mainDocURL: [nil]";
  EXPECT_EQ(expectedString, actualString);
}

}  // namespace
