Home | History | Annotate | Download | only in dump_cache
      1 // Copyright (c) 2010 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/tools/dump_cache/url_utilities.h"
      6 
      7 #include <string>
      8 
      9 #include "base/strings/string_util.h"
     10 #include "base/strings/stringprintf.h"
     11 #include "testing/gtest/include/gtest/gtest.h"
     12 
     13 namespace net {
     14 
     15 TEST(UrlUtilitiesTest, GetUrlHost) {
     16   EXPECT_EQ("www.foo.com",
     17             UrlUtilities::GetUrlHost("http://www.foo.com"));
     18   EXPECT_EQ("www.foo.com",
     19             UrlUtilities::GetUrlHost("http://www.foo.com:80"));
     20   EXPECT_EQ("www.foo.com",
     21             UrlUtilities::GetUrlHost("http://www.foo.com:80/"));
     22   EXPECT_EQ("www.foo.com",
     23             UrlUtilities::GetUrlHost("http://www.foo.com/news"));
     24   EXPECT_EQ("www.foo.com",
     25             UrlUtilities::GetUrlHost("www.foo.com:80/news?q=hello"));
     26   EXPECT_EQ("www.foo.com",
     27             UrlUtilities::GetUrlHost("www.foo.com/news?q=a:b"));
     28   EXPECT_EQ("www.foo.com",
     29             UrlUtilities::GetUrlHost("www.foo.com:80"));
     30 }
     31 
     32 TEST(UrlUtilitiesTest, GetUrlHostPath) {
     33   EXPECT_EQ("www.foo.com",
     34             UrlUtilities::GetUrlHostPath("http://www.foo.com"));
     35   EXPECT_EQ("www.foo.com:80",
     36             UrlUtilities::GetUrlHostPath("http://www.foo.com:80"));
     37   EXPECT_EQ("www.foo.com:80/",
     38             UrlUtilities::GetUrlHostPath("http://www.foo.com:80/"));
     39   EXPECT_EQ("www.foo.com/news",
     40             UrlUtilities::GetUrlHostPath("http://www.foo.com/news"));
     41   EXPECT_EQ("www.foo.com:80/news?q=hello",
     42             UrlUtilities::GetUrlHostPath("www.foo.com:80/news?q=hello"));
     43   EXPECT_EQ("www.foo.com/news?q=a:b",
     44             UrlUtilities::GetUrlHostPath("www.foo.com/news?q=a:b"));
     45   EXPECT_EQ("www.foo.com:80",
     46             UrlUtilities::GetUrlHostPath("www.foo.com:80"));
     47 }
     48 
     49 TEST(UrlUtilitiesTest, GetUrlPath) {
     50   EXPECT_EQ("/",
     51             UrlUtilities::GetUrlPath("http://www.foo.com"));
     52   EXPECT_EQ("/",
     53             UrlUtilities::GetUrlPath("http://www.foo.com:80"));
     54   EXPECT_EQ("/",
     55             UrlUtilities::GetUrlPath("http://www.foo.com:80/"));
     56   EXPECT_EQ("/news",
     57             UrlUtilities::GetUrlPath("http://www.foo.com/news"));
     58   EXPECT_EQ("/news?q=hello",
     59             UrlUtilities::GetUrlPath("www.foo.com:80/news?q=hello"));
     60   EXPECT_EQ("/news?q=a:b",
     61             UrlUtilities::GetUrlPath("www.foo.com/news?q=a:b"));
     62   EXPECT_EQ("/",
     63             UrlUtilities::GetUrlPath("www.foo.com:80"));
     64 }
     65 
     66 TEST(UrlUtilitiesTest, Unescape) {
     67   // Basic examples are left alone.
     68   EXPECT_EQ("http://www.foo.com",
     69             UrlUtilities::Unescape("http://www.foo.com"));
     70   EXPECT_EQ("www.foo.com:80/news?q=hello",
     71             UrlUtilities::Unescape("www.foo.com:80/news?q=hello"));
     72 
     73   // All chars can be unescaped.
     74   EXPECT_EQ("~`!@#$%^&*()_-+={[}]|\\:;\"'<,>.?/",
     75             UrlUtilities::Unescape("%7E%60%21%40%23%24%25%5E%26%2A%28%29%5F%2D"
     76                                    "%2B%3D%7B%5B%7D%5D%7C%5C%3A%3B%22%27%3C%2C"
     77                                    "%3E%2E%3F%2F"));
     78   for (int c = 0; c < 256; ++c) {
     79     std::string unescaped_char(1, implicit_cast<unsigned char>(c));
     80     std::string escaped_char = base::StringPrintf("%%%02X", c);
     81     EXPECT_EQ(unescaped_char, UrlUtilities::Unescape(escaped_char))
     82         << "escaped_char = " << escaped_char;
     83     escaped_char = base::StringPrintf("%%%02x", c);
     84     EXPECT_EQ(unescaped_char, UrlUtilities::Unescape(escaped_char))
     85         << "escaped_char = " << escaped_char;
     86   }
     87 
     88   // All non-% chars are left alone.
     89   EXPECT_EQ("~`!@#$^&*()_-+={[}]|\\:;\"'<,>.?/",
     90             UrlUtilities::Unescape("~`!@#$^&*()_-+={[}]|\\:;\"'<,>.?/"));
     91   for (int c = 0; c < 256; ++c) {
     92     if (c != '%') {
     93       std::string just_char(1, implicit_cast<unsigned char>(c));
     94       EXPECT_EQ(just_char, UrlUtilities::Unescape(just_char));
     95     }
     96   }
     97 
     98   // Some examples to unescape.
     99   EXPECT_EQ("Hello, world!", UrlUtilities::Unescape("Hello%2C world%21"));
    100 
    101   // Not actually escapes.
    102   EXPECT_EQ("%", UrlUtilities::Unescape("%"));
    103   EXPECT_EQ("%www", UrlUtilities::Unescape("%www"));
    104   EXPECT_EQ("%foo", UrlUtilities::Unescape("%foo"));
    105   EXPECT_EQ("%1", UrlUtilities::Unescape("%1"));
    106   EXPECT_EQ("%1x", UrlUtilities::Unescape("%1x"));
    107   EXPECT_EQ("%%", UrlUtilities::Unescape("%%"));
    108   // Escapes following non-escapes.
    109   EXPECT_EQ("%!", UrlUtilities::Unescape("%%21"));
    110   EXPECT_EQ("%2!", UrlUtilities::Unescape("%2%21"));
    111 }
    112 
    113 }  // namespace net
    114 
    115