1// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "net/base/net_errors.h"
6#include "net/proxy/proxy_info.h"
7#include "testing/gtest/include/gtest/gtest.h"
8
9namespace net {
10namespace {
11
12TEST(ProxyInfoTest, ProxyInfoIsDirectOnly) {
13  // Test the is_direct_only() predicate.
14  ProxyInfo info;
15
16  // An empty ProxyInfo is not considered direct.
17  EXPECT_FALSE(info.is_direct_only());
18
19  info.UseDirect();
20  EXPECT_TRUE(info.is_direct_only());
21
22  info.UsePacString("DIRECT");
23  EXPECT_TRUE(info.is_direct_only());
24
25  info.UsePacString("PROXY myproxy:80");
26  EXPECT_FALSE(info.is_direct_only());
27
28  info.UsePacString("DIRECT; PROXY myproxy:80");
29  EXPECT_TRUE(info.is_direct());
30  EXPECT_FALSE(info.is_direct_only());
31
32  info.UsePacString("PROXY myproxy:80; DIRECT");
33  EXPECT_FALSE(info.is_direct());
34  EXPECT_FALSE(info.is_direct_only());
35  EXPECT_EQ(2u, info.proxy_list().size());
36  EXPECT_EQ("PROXY myproxy:80;DIRECT", info.proxy_list().ToPacString());
37  // After falling back to direct, we shouldn't consider it DIRECT only.
38  EXPECT_TRUE(info.Fallback(ERR_PROXY_CONNECTION_FAILED, BoundNetLog()));
39  EXPECT_TRUE(info.is_direct());
40  EXPECT_FALSE(info.is_direct_only());
41}
42
43}  // namespace
44}  // namespace net
45