Use copy-swap idiom for GURL::operator=
All the work to correctly handle ownership and internal state of GURL
is already done by the copy-constructor, destructor, and GURL::Swap.
Repeating that work for GURL::operator= is just another place where we
might get it wrong.
BUG=309975
Review URL: https://codereview.chromium.org/30693010
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@230829 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/url/gurl_unittest.cc b/url/gurl_unittest.cc
index ddb55d89..67da8e48 100644
--- a/url/gurl_unittest.cc
+++ b/url/gurl_unittest.cc
@@ -136,6 +136,48 @@
EXPECT_EQ("", invalid2.ref());
}
+TEST(GURLTest, Assign) {
+ GURL url(WStringToUTF16(L"http://user:[email protected]:99/foo;bar?q=a#ref"));
+
+ GURL url2;
+ url2 = url;
+ EXPECT_TRUE(url2.is_valid());
+
+ EXPECT_EQ("http://user:[email protected]:99/foo;bar?q=a#ref", url2.spec());
+ EXPECT_EQ("http", url2.scheme());
+ EXPECT_EQ("user", url2.username());
+ EXPECT_EQ("pass", url2.password());
+ EXPECT_EQ("google.com", url2.host());
+ EXPECT_EQ("99", url2.port());
+ EXPECT_EQ(99, url2.IntPort());
+ EXPECT_EQ("/foo;bar", url2.path());
+ EXPECT_EQ("q=a", url2.query());
+ EXPECT_EQ("ref", url2.ref());
+
+ // Assignment of invalid URL should be invalid
+ GURL invalid;
+ GURL invalid2;
+ invalid2 = invalid;
+ EXPECT_FALSE(invalid2.is_valid());
+ EXPECT_EQ("", invalid2.spec());
+ EXPECT_EQ("", invalid2.scheme());
+ EXPECT_EQ("", invalid2.username());
+ EXPECT_EQ("", invalid2.password());
+ EXPECT_EQ("", invalid2.host());
+ EXPECT_EQ("", invalid2.port());
+ EXPECT_EQ(url_parse::PORT_UNSPECIFIED, invalid2.IntPort());
+ EXPECT_EQ("", invalid2.path());
+ EXPECT_EQ("", invalid2.query());
+ EXPECT_EQ("", invalid2.ref());
+}
+
+// This is a regression test for http://crbug.com/309975 .
+TEST(GURLTest, SelfAssign) {
+ GURL a("filesystem:http://example.com/temporary/");
+ // This should not crash.
+ a = a;
+}
+
TEST(GURLTest, CopyFileSystem) {
GURL url(WStringToUTF16(L"filesystem:https://user:[email protected]:99/t/foo;bar?q=a#ref"));
@@ -487,10 +529,3 @@
GURL c("foo://bar/baz");
EXPECT_FALSE(c.IsStandard());
}
-
-// This is a regression test for http://crbug.com/309975 .
-TEST(GURLTest, SelfAssignment) {
- GURL a("filesystem:http://example.com/temporary/");
- // This should not crash.
- a = a;
-}