Revert 30149 - The existing file_util::AbsolutePath() function was already doing what we needed to do in the ExtensionResource class.

BUG= http://crbug.com/25681 & http://crbug.com/25131

Review URL: http://codereview.chromium.org/334028

TBR=mad@chromium.org
Review URL: http://codereview.chromium.org/335042

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@30152 0039d316-1c4b-4281-b951-d872f2087c98


CrOS-Libchrome-Original-Commit: 71b0c7f62e9c674adb0ffc785ee0e8de05b55468
diff --git a/base/file_path_unittest.cc b/base/file_path_unittest.cc
index 7d8e386..9d45170 100644
--- a/base/file_path_unittest.cc
+++ b/base/file_path_unittest.cc
@@ -497,6 +497,98 @@
   }
 }
 
+TEST_F(FilePathTest, AppendAndResolveRelativeTest) {
+  const struct BinaryTestData cases[] = {
+#if defined(FILE_PATH_USES_DRIVE_LETTERS)
+    { { FPL("c:/"),              FPL("foo") },        FPL("c:/foo") },
+    { { FPL("f:/foo/bar"),       FPL("..") },         FPL("f:/foo") },
+    { { FPL("f:/foo.bar"),       FPL("..") },         FPL("f:/") },
+    { { FPL("F:/foo/.."),        FPL("./bar/.") },    FPL("F:/bar") },
+    { { FPL("E:/Foo/bar"),       FPL("../..") },      FPL("E:/") },
+    { { FPL("E:/Foo/bar/."),     FPL("../..") },      FPL("E:/") },
+    { { FPL("e:/foo/.."),        FPL("bar/..") },     FPL("e:/") },
+    { { FPL("c:/foo/./bar/.."),  FPL("../baz") },     FPL("c:/baz") },
+    { { FPL("E:/./foo/bar/.."),  FPL("../baz/..") },  FPL("E:/") },
+    { { FPL("x:/foo/../bar/.."), FPL("baz/../boo") }, FPL("x:/boo") },
+    { { FPL("E:/foo.bar/.."),    FPL("../baz/..") },  FPL("") },
+    { { FPL("Z:/foo"),           FPL("../..") },      FPL("") },
+    { { FPL("y:/"),              FPL("..") },         FPL("") },
+    { { FPL("B:/.."),            FPL("bar/.") },      FPL("") },
+    { { FPL("a:/foo/.."),        FPL("..") },         FPL("") },
+    { { FPL("r:/.."),            FPL("..") },         FPL("") },
+    { { FPL("F:/foo/.."),        FPL("../..") },      FPL("") },
+    { { FPL("O:/foo/bar/.."),    FPL("../..") },      FPL("") },
+#endif  // FILE_PATH_USES_DRIVE_LETTERS
+#if defined(FILE_PATH_USES_WIN_SEPARATORS)
+    { { FPL("\\\\"),                FPL("foo") },         FPL("\\\\foo") },
+    { { FPL("\\\\foo"),             FPL("bar") },         FPL("\\\\foo\\bar") },
+    { { FPL("\\\\foo\\bar"),        FPL("..") },          FPL("\\\\foo") },
+    { { FPL("\\\\foo.bar"),         FPL("..") },          FPL("\\\\") },
+    { { FPL("\\\\Foo\\bar"),        FPL("..\\..") },      FPL("\\\\") },
+    { { FPL("\\\\Foo\\bar\\."),     FPL("..\\..") },      FPL("\\\\") },
+    { { FPL("\\\\foo\\bar"), FPL("foo\\..\\baz") }, FPL("\\\\foo\\bar\\baz") },
+    { { FPL("\\\\foo\\.\\bar"),     FPL("..\\baz\\.") },  FPL("\\\\foo\\baz") },
+    { { FPL("\\\\.\\foo\\.."),      FPL("bar") },         FPL("\\\\bar") },
+    { { FPL("\\\\foo\\.."),         FPL(".\\bar\\..") },  FPL("\\\\") },
+    { { FPL("\\\\foo\\bar\\.."),    FPL("..\\baz") },     FPL("\\\\baz") },
+    { { FPL("\\\\foo\\bar\\.."),    FPL("..\\baz\\..") }, FPL("\\\\") },
+    { { FPL("\\\\foo\\..\\bar\\.."), FPL("baz\\..\\boo") }, FPL("\\\\boo"), },
+    { { FPL("\\\\foo.bar\\.."),     FPL("..\\baz\\..") }, FPL("") },
+    { { FPL("\\\\foo"),             FPL("..\\..") },      FPL("") },
+    { { FPL("\\\\"),                FPL("..") },          FPL("") },
+    { { FPL("\\\\.."),              FPL("bar\\.") },      FPL("") },
+    { { FPL("\\\\foo\\.."),         FPL("..") },          FPL("") },
+    { { FPL("\\\\.."),              FPL("..") },          FPL("") },
+    { { FPL("\\\\foo\\.."),         FPL("..\\..") },      FPL("") },
+    { { FPL("\\\\foo\\bar\\.."),    FPL("..\\..") },      FPL("") },
+#if defined(FILE_PATH_USES_DRIVE_LETTERS)
+    { { FPL("E:/foo"),           FPL("bar") },        FPL("E:/foo\\bar") },
+    { { FPL("C:/foo/bar"),       FPL("foo/../baz") }, FPL("C:/foo\\bar\\baz") },
+    { { FPL("e:/foo/bar"),       FPL("../baz") },     FPL("e:/foo\\baz") },
+#endif
+#else  // FILE_PATH_USES_WIN_SEPARAORS
+    { { FPL("/"),              FPL("foo") },        FPL("/foo") },
+    { { FPL("/foo"),           FPL("bar") },        FPL("/foo/bar") },
+    { { FPL("/foo/bar/"),      FPL("..") },         FPL("/foo") },
+    { { FPL("/foo.bar"),       FPL("..") },         FPL("/") },
+    { { FPL("//foo"),          FPL("..") },         FPL("//") },
+    { { FPL("/foo/./bar"),     FPL("../..") },      FPL("/") },
+    { { FPL("/foo/bar/."),     FPL("foo/../baz") }, FPL("/foo/bar/baz") },
+    { { FPL("/./foo/bar"),     FPL("../baz/.") },   FPL("/foo/baz") },
+    { { FPL("/foo/.."),        FPL("./bar") },      FPL("/bar") },
+    { { FPL("/foo/.."),        FPL("bar/..") },     FPL("/") },
+    { { FPL("//foo/bar/.."),   FPL("../baz") },     FPL("//baz") },
+    { { FPL("/foo/bar/.."),    FPL("../baz/..") },  FPL("/") },
+    { { FPL("/foo/../bar/.."), FPL("baz/../boo") }, FPL("/boo") },
+    { { FPL("//foo.bar/.."),   FPL("../baz") },     FPL("") },
+    { { FPL("/foo"),           FPL("../..") },      FPL("") },
+    { { FPL("//"),             FPL("..") },         FPL("") },
+    { { FPL("/.."),            FPL("./bar") },      FPL("") },
+    { { FPL("/foo/.."),        FPL("..") },         FPL("") },
+    { { FPL("/.."),            FPL("..") },         FPL("") },
+    { { FPL("/foo/.."),        FPL("../..") },      FPL("") },
+    { { FPL("/foo/bar/.."),    FPL("../..") },      FPL("") },
+#if defined(FILE_PATH_USES_DRIVE_LETTERS)
+    { { FPL("E:/foo"),           FPL("bar") },        FPL("E:/foo/bar") },
+    { { FPL("C:/foo/bar"),       FPL("foo/../baz") }, FPL("C:/foo/bar/baz") },
+    { { FPL("e:/foo/bar"),       FPL("../baz") },     FPL("e:/foo/baz") },
+#endif
+#endif  // FILE_PATH_USES_WIN_SEPARAORS
+  };
+
+  for (size_t i = 0; i < arraysize(cases); ++i) {
+    FilePath parent(cases[i].inputs[0]);
+    FilePath child(cases[i].inputs[1]);
+
+    FilePath result;
+    EXPECT_EQ(cases[i].expected[0] != '\0',
+              parent.AppendAndResolveRelative(child, &result)) <<
+        "i: " << i << ", parent: " << parent.value() << ", child: " <<
+        child.value();
+    EXPECT_STREQ(cases[i].expected, result.value().c_str());
+  }
+}
+
 TEST_F(FilePathTest, IsParentTest) {
   const struct BinaryBooleanTestData cases[] = {
     { { FPL("/"),             FPL("/foo/bar/baz") },      true},