1c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Copyright 2007 Google Inc. All Rights Reserved. 2c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Author: brettw@google.com (Brett Wilson) 3c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 4c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "googleurl/src/gurl.h" 5c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "googleurl/src/url_canon.h" 6c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "googleurl/src/url_test_utils.h" 7c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "testing/gtest/include/gtest/gtest.h" 8c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 9c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Some implementations of base/basictypes.h may define ARRAYSIZE. 10c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// If it's not defined, we define it to the ARRAYSIZE_UNSAFE macro 11c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// which is in our version of basictypes.h. 12c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#ifndef ARRAYSIZE 13c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define ARRAYSIZE ARRAYSIZE_UNSAFE 14c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#endif 15c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 16c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottusing url_test_utils::WStringToUTF16; 17c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottusing url_test_utils::ConvertUTF8ToUTF16; 18c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 19c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottnamespace { 20c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 21c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scotttemplate<typename CHAR> 22c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottvoid SetupReplacement(void (url_canon::Replacements<CHAR>::*func)(const CHAR*, 23c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const url_parse::Component&), 24c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott url_canon::Replacements<CHAR>* replacements, 25c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const CHAR* str) { 26c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott if (str) { 27c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott url_parse::Component comp; 28c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott if (str[0]) 29c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott comp.len = static_cast<int>(strlen(str)); 30c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott (replacements->*func)(str, comp); 31c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 32c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 33c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Returns the canonicalized string for the given URL string for the 35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// GURLTest.Types test. 36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochstd::string TypesTestCase(const char* src) { 37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GURL gurl(src); 38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return gurl.possibly_invalid_spec(); 39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 41c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} // namespace 42c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 43c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Different types of URLs should be handled differently by url_util, and 44c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// handed off to different canonicalizers. 45c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST(GURLTest, Types) { 46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // URLs with unknown schemes should be treated as path URLs, even when they 47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // have things like "://". 48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ("something:///HOSTNAME.com/", 49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch TypesTestCase("something:///HOSTNAME.com/")); 50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // In the reverse, known schemes should always trigger standard URL handling. 52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ("http://hostname.com/", TypesTestCase("http:HOSTNAME.com")); 53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ("http://hostname.com/", TypesTestCase("http:/HOSTNAME.com")); 54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ("http://hostname.com/", TypesTestCase("http://HOSTNAME.com")); 55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ("http://hostname.com/", TypesTestCase("http:///HOSTNAME.com")); 56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 57c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#ifdef WIN32 58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // URLs that look like absolute Windows drive specs. 59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ("file:///C:/foo.txt", TypesTestCase("c:\\foo.txt")); 60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ("file:///Z:/foo.txt", TypesTestCase("Z|foo.txt")); 61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ("file://server/foo.txt", TypesTestCase("\\\\server\\foo.txt")); 62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ("file://server/foo.txt", TypesTestCase("//server/foo.txt")); 63c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#endif 64c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 65c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 66c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Test the basic creation and querying of components in a GURL. We assume 67c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// the parser is already tested and works, so we are mostly interested if the 68c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// object does the right thing with the results. 69c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST(GURLTest, Components) { 70c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott GURL url(WStringToUTF16(L"http://user:pass@google.com:99/foo;bar?q=a#ref")); 71c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_TRUE(url.is_valid()); 72c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_TRUE(url.SchemeIs("http")); 73c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_FALSE(url.SchemeIsFile()); 74c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 75c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // This is the narrow version of the URL, which should match the wide input. 76c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("http://user:pass@google.com:99/foo;bar?q=a#ref", url.spec()); 77c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 78c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("http", url.scheme()); 79c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("user", url.username()); 80c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("pass", url.password()); 81c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("google.com", url.host()); 82c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("99", url.port()); 83c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ(99, url.IntPort()); 84c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("/foo;bar", url.path()); 85c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("q=a", url.query()); 86c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("ref", url.ref()); 87c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 88c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 89c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST(GURLTest, Empty) { 90c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott GURL url; 91c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_FALSE(url.is_valid()); 92c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", url.spec()); 93c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 94c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", url.scheme()); 95c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", url.username()); 96c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", url.password()); 97c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", url.host()); 98c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", url.port()); 99c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ(url_parse::PORT_UNSPECIFIED, url.IntPort()); 100c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", url.path()); 101c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", url.query()); 102c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", url.ref()); 103c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 104c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 105c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST(GURLTest, Copy) { 106c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott GURL url(WStringToUTF16(L"http://user:pass@google.com:99/foo;bar?q=a#ref")); 107c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 108c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott GURL url2(url); 109c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_TRUE(url2.is_valid()); 110c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 111c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("http://user:pass@google.com:99/foo;bar?q=a#ref", url2.spec()); 112c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("http", url2.scheme()); 113c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("user", url2.username()); 114c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("pass", url2.password()); 115c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("google.com", url2.host()); 116c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("99", url2.port()); 117c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ(99, url2.IntPort()); 118c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("/foo;bar", url2.path()); 119c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("q=a", url2.query()); 120c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("ref", url2.ref()); 121c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 122c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Copying of invalid URL should be invalid 123c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott GURL invalid; 124c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott GURL invalid2(invalid); 125c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_FALSE(invalid2.is_valid()); 126c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", invalid2.spec()); 127c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", invalid2.scheme()); 128c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", invalid2.username()); 129c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", invalid2.password()); 130c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", invalid2.host()); 131c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", invalid2.port()); 132c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ(url_parse::PORT_UNSPECIFIED, invalid2.IntPort()); 133c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", invalid2.path()); 134c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", invalid2.query()); 135c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", invalid2.ref()); 136c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 137c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 138c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Given an invalid URL, we should still get most of the components. 139c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST(GURLTest, Invalid) { 140c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott GURL url("http:google.com:foo"); 141c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_FALSE(url.is_valid()); 142c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("http://google.com:foo/", url.possibly_invalid_spec()); 143c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 144c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("http", url.scheme()); 145c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", url.username()); 146c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", url.password()); 147c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("google.com", url.host()); 148c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("foo", url.port()); 149c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ(url_parse::PORT_INVALID, url.IntPort()); 150c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("/", url.path()); 151c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", url.query()); 152c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", url.ref()); 153c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 154c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 155c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST(GURLTest, Resolve) { 156c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // The tricky cases for relative URL resolving are tested in the 157c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // canonicalizer unit test. Here, we just test that the GURL integration 158c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // works properly. 159c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott struct ResolveCase { 160c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const char* base; 161c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const char* relative; 162c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott bool expected_valid; 163c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const char* expected; 164c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } resolve_cases[] = { 165c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott {"http://www.google.com/", "foo.html", true, "http://www.google.com/foo.html"}, 166c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott {"http://www.google.com/", "http://images.google.com/foo.html", true, "http://images.google.com/foo.html"}, 167c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott {"http://www.google.com/blah/bloo?c#d", "../../../hello/./world.html?a#b", true, "http://www.google.com/hello/world.html?a#b"}, 168c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott {"http://www.google.com/foo#bar", "#com", true, "http://www.google.com/foo#com"}, 169c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott {"http://www.google.com/", "Https:images.google.com", true, "https://images.google.com/"}, 170c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Unknown schemes are not standard. 171c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott {"data:blahblah", "http://google.com/", true, "http://google.com/"}, 172c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott {"data:blahblah", "http:google.com", true, "http://google.com/"}, 173c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott {"data:/blahblah", "file.html", false, ""}, 174c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott }; 175c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 176c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott for (size_t i = 0; i < ARRAYSIZE(resolve_cases); i++) { 177c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // 8-bit code path. 178c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott GURL input(resolve_cases[i].base); 179c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott GURL output = input.Resolve(resolve_cases[i].relative); 180c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(resolve_cases[i].expected_valid, output.is_valid()) << i; 181c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(resolve_cases[i].expected, output.spec()) << i; 182c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 183c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Wide code path. 184c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott GURL inputw(ConvertUTF8ToUTF16(resolve_cases[i].base)); 185c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott GURL outputw = 186c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott input.Resolve(ConvertUTF8ToUTF16(resolve_cases[i].relative)); 187c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(resolve_cases[i].expected_valid, outputw.is_valid()) << i; 188c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(resolve_cases[i].expected, outputw.spec()) << i; 189c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 190c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 191c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 192c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST(GURLTest, GetOrigin) { 193c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott struct TestCase { 194c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const char* input; 195c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const char* expected; 196c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } cases[] = { 197c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott {"http://www.google.com", "http://www.google.com/"}, 198c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott {"javascript:window.alert(\"hello,world\");", ""}, 199c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott {"http://user:pass@www.google.com:21/blah#baz", "http://www.google.com:21/"}, 200c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott {"http://user@www.google.com", "http://www.google.com/"}, 201c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott {"http://:pass@www.google.com", "http://www.google.com/"}, 202c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott {"http://:@www.google.com", "http://www.google.com/"}, 203c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott }; 204c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott for (size_t i = 0; i < ARRAYSIZE(cases); i++) { 205c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott GURL url(cases[i].input); 206c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott GURL origin = url.GetOrigin(); 207c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ(cases[i].expected, origin.spec()); 208c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 209c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 210c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 211c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST(GURLTest, GetWithEmptyPath) { 212c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott struct TestCase { 213c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const char* input; 214c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const char* expected; 215c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } cases[] = { 216c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott {"http://www.google.com", "http://www.google.com/"}, 217c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott {"javascript:window.alert(\"hello, world\");", ""}, 218c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott {"http://www.google.com/foo/bar.html?baz=22", "http://www.google.com/"}, 219c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott }; 220c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 221c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott for (size_t i = 0; i < ARRAYSIZE(cases); i++) { 222c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott GURL url(cases[i].input); 223c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott GURL empty_path = url.GetWithEmptyPath(); 224c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ(cases[i].expected, empty_path.spec()); 225c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 226c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 227c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 228c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST(GURLTest, Replacements) { 229c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // The url canonicalizer replacement test will handle most of these case. 230c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // The most important thing to do here is to check that the proper 231c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // canonicalizer gets called based on the scheme of the input. 232c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott struct ReplaceCase { 233c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const char* base; 234c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const char* scheme; 235c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const char* username; 236c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const char* password; 237c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const char* host; 238c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const char* port; 239c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const char* path; 240c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const char* query; 241c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const char* ref; 242c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const char* expected; 243c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } replace_cases[] = { 244c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott {"http://www.google.com/foo/bar.html?foo#bar", NULL, NULL, NULL, NULL, NULL, "/", "", "", "http://www.google.com/"}, 245c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott {"http://www.google.com/foo/bar.html?foo#bar", "javascript", "", "", "", "", "window.open('foo');", "", "", "javascript:window.open('foo');"}, 246c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott {"file:///C:/foo/bar.txt", "http", NULL, NULL, "www.google.com", "99", "/foo","search", "ref", "http://www.google.com:99/foo?search#ref"}, 247c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#ifdef WIN32 248c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott {"http://www.google.com/foo/bar.html?foo#bar", "file", "", "", "", "", "c:\\", "", "", "file:///C:/"}, 249c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#endif 250c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott }; 251c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 252c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott for (size_t i = 0; i < ARRAYSIZE(replace_cases); i++) { 253c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const ReplaceCase& cur = replace_cases[i]; 254c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott GURL url(cur.base); 255c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott GURL::Replacements repl; 256c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott SetupReplacement(&GURL::Replacements::SetScheme, &repl, cur.scheme); 257c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott SetupReplacement(&GURL::Replacements::SetUsername, &repl, cur.username); 258c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott SetupReplacement(&GURL::Replacements::SetPassword, &repl, cur.password); 259c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott SetupReplacement(&GURL::Replacements::SetHost, &repl, cur.host); 260c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott SetupReplacement(&GURL::Replacements::SetPort, &repl, cur.port); 261c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott SetupReplacement(&GURL::Replacements::SetPath, &repl, cur.path); 262c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott SetupReplacement(&GURL::Replacements::SetQuery, &repl, cur.query); 263c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott SetupReplacement(&GURL::Replacements::SetRef, &repl, cur.ref); 264c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott GURL output = url.ReplaceComponents(repl); 265c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 266c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ(replace_cases[i].expected, output.spec()); 267c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 268c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 269c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 270c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST(GURLTest, PathForRequest) { 271c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott struct TestCase { 272c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const char* input; 273c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const char* expected; 274c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } cases[] = { 275c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott {"http://www.google.com", "/"}, 276c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott {"http://www.google.com/", "/"}, 277c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott {"http://www.google.com/foo/bar.html?baz=22", "/foo/bar.html?baz=22"}, 278c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott {"http://www.google.com/foo/bar.html#ref", "/foo/bar.html"}, 279c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott {"http://www.google.com/foo/bar.html?query#ref", "/foo/bar.html?query"}, 280c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott }; 281c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 282c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott for (size_t i = 0; i < ARRAYSIZE(cases); i++) { 283c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott GURL url(cases[i].input); 284c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott std::string path_request = url.PathForRequest(); 285c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ(cases[i].expected, path_request); 286c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 287c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 288c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 289c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST(GURLTest, EffectiveIntPort) { 290c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott struct PortTest { 291c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const char* spec; 292c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott int expected_int_port; 293c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } port_tests[] = { 294c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // http 295c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott {"http://www.google.com/", 80}, 296c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott {"http://www.google.com:80/", 80}, 297c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott {"http://www.google.com:443/", 443}, 298c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 299c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // https 300c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott {"https://www.google.com/", 443}, 301c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott {"https://www.google.com:443/", 443}, 302c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott {"https://www.google.com:80/", 80}, 303c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 304c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // ftp 305c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott {"ftp://www.google.com/", 21}, 306c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott {"ftp://www.google.com:21/", 21}, 307c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott {"ftp://www.google.com:80/", 80}, 308c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 309c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // gopher 310c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott {"gopher://www.google.com/", 70}, 311c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott {"gopher://www.google.com:70/", 70}, 312c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott {"gopher://www.google.com:80/", 80}, 313c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 314c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // file - no port 315c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott {"file://www.google.com/", url_parse::PORT_UNSPECIFIED}, 316c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott {"file://www.google.com:443/", url_parse::PORT_UNSPECIFIED}, 317c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 318c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // data - no port 319c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott {"data:www.google.com:90", url_parse::PORT_UNSPECIFIED}, 320c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott {"data:www.google.com", url_parse::PORT_UNSPECIFIED}, 321c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott }; 322c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 323c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott for (size_t i = 0; i < ARRAYSIZE(port_tests); i++) { 324c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott GURL url(port_tests[i].spec); 325c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ(port_tests[i].expected_int_port, url.EffectiveIntPort()); 326c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 327c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 328c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 329c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST(GURLTest, IPAddress) { 330c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott struct IPTest { 331c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const char* spec; 332c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott bool expected_ip; 333c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } ip_tests[] = { 334c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott {"http://www.google.com/", false}, 335c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott {"http://192.168.9.1/", true}, 336c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott {"http://192.168.9.1.2/", false}, 337c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott {"http://192.168.m.1/", false}, 338c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott {"http://2001:db8::1/", false}, 339c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott {"http://[2001:db8::1]/", true}, 340c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott {"", false}, 341c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott {"some random input!", false}, 342c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott }; 343c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 344c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott for (size_t i = 0; i < ARRAYSIZE(ip_tests); i++) { 345c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott GURL url(ip_tests[i].spec); 346c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ(ip_tests[i].expected_ip, url.HostIsIPAddress()); 347c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 348c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 349c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 350c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST(GURLTest, HostNoBrackets) { 351c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott struct TestCase { 352c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const char* input; 353c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const char* expected_host; 354c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const char* expected_plainhost; 355c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } cases[] = { 356c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott {"http://www.google.com", "www.google.com", "www.google.com"}, 357c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott {"http://[2001:db8::1]/", "[2001:db8::1]", "2001:db8::1"}, 358c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott {"http://[::]/", "[::]", "::"}, 359c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 360c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Don't require a valid URL, but don't crash either. 361c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott {"http://[]/", "[]", ""}, 362c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott {"http://[x]/", "[x]", "x"}, 363c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott {"http://[x/", "[x", "[x"}, 364c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott {"http://x]/", "x]", "x]"}, 365c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott {"http://[/", "[", "["}, 366c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott {"http://]/", "]", "]"}, 367c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott {"", "", ""}, 368c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott }; 369c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott for (size_t i = 0; i < ARRAYSIZE(cases); i++) { 370c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott GURL url(cases[i].input); 371c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ(cases[i].expected_host, url.host()); 372c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ(cases[i].expected_plainhost, url.HostNoBrackets()); 373c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 374c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 375c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 376c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST(GURLTest, DomainIs) { 377c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const char google_domain[] = "google.com"; 378c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 379c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott GURL url_1("http://www.google.com:99/foo"); 380c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_TRUE(url_1.DomainIs(google_domain)); 381c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 382c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott GURL url_2("http://google.com:99/foo"); 383c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_TRUE(url_2.DomainIs(google_domain)); 384c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 385c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott GURL url_3("http://google.com./foo"); 386c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_TRUE(url_3.DomainIs(google_domain)); 387c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 388c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott GURL url_4("http://google.com/foo"); 389c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_FALSE(url_4.DomainIs("google.com.")); 390c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 391c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott GURL url_5("http://google.com./foo"); 392c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_TRUE(url_5.DomainIs("google.com.")); 393c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 394c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott GURL url_6("http://www.google.com./foo"); 395c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_TRUE(url_6.DomainIs(".com.")); 396c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 397c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott GURL url_7("http://www.balabala.com/foo"); 398c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_FALSE(url_7.DomainIs(google_domain)); 399c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 400c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott GURL url_8("http://www.google.com.cn/foo"); 401c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_FALSE(url_8.DomainIs(google_domain)); 402c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 403c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott GURL url_9("http://www.iamnotgoogle.com/foo"); 404c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_FALSE(url_9.DomainIs(google_domain)); 405c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 406c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott GURL url_10("http://www.iamnotgoogle.com../foo"); 407c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_FALSE(url_10.DomainIs(".com")); 408c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 409c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 410c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Newlines should be stripped from inputs. 411c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST(GURLTest, Newlines) { 412c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Constructor. 413c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott GURL url_1(" \t ht\ntp://\twww.goo\rgle.com/as\ndf \n "); 414c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("http://www.google.com/asdf", url_1.spec()); 415c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 416c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Relative path resolver. 417c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott GURL url_2 = url_1.Resolve(" \n /fo\to\r "); 418c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("http://www.google.com/foo", url_2.spec()); 419c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 420c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Note that newlines are NOT stripped from ReplaceComponents. 421c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 422c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 423c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST(GURLTest, IsStandard) { 424c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott GURL a("http:foo/bar"); 425c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_TRUE(a.IsStandard()); 426c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 427c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott GURL b("foo:bar/baz"); 428c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_FALSE(b.IsStandard()); 429c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 430c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott GURL c("foo://bar/baz"); 431c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_FALSE(c.IsStandard()); 432c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 433