15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/file_path.h" 7868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/platform_test.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This macro helps avoid wrapped lines in the test structs. 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define FPL(x) FILE_PATH_LITERAL(x) 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// This macro constructs strings which can contain NULs. 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define FPS(x) FilePath::StringType(FPL(x), arraysize(FPL(x)) - 1) 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace base { 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct UnaryTestData { 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FilePath::CharType* input; 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FilePath::CharType* expected; 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct UnaryBooleanTestData { 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FilePath::CharType* input; 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool expected; 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct BinaryTestData { 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FilePath::CharType* inputs[2]; 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FilePath::CharType* expected; 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct BinaryBooleanTestData { 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FilePath::CharType* inputs[2]; 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool expected; 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct BinaryIntTestData { 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FilePath::CharType* inputs[2]; 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int expected; 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct UTF8TestData { 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FilePath::CharType* native; 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* utf8; 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// file_util winds up using autoreleased objects on the Mac, so this needs 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// to be a PlatformTest 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class FilePathTest : public PlatformTest { 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUp() OVERRIDE { 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PlatformTest::SetUp(); 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void TearDown() OVERRIDE { 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PlatformTest::TearDown(); 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FilePathTest, DirName) { 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const struct UnaryTestData cases[] = { 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL(""), FPL(".") }, 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("aa"), FPL(".") }, 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("/aa/bb"), FPL("/aa") }, 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("/aa/bb/"), FPL("/aa") }, 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("/aa/bb//"), FPL("/aa") }, 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("/aa/bb/ccc"), FPL("/aa/bb") }, 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("/aa"), FPL("/") }, 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("/aa/"), FPL("/") }, 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("/"), FPL("/") }, 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("//"), FPL("//") }, 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("///"), FPL("/") }, 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("aa/"), FPL(".") }, 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("aa/bb"), FPL("aa") }, 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("aa/bb/"), FPL("aa") }, 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("aa/bb//"), FPL("aa") }, 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("aa//bb//"), FPL("aa") }, 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("aa//bb/"), FPL("aa") }, 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("aa//bb"), FPL("aa") }, 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("//aa/bb"), FPL("//aa") }, 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("//aa/"), FPL("//") }, 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("//aa"), FPL("//") }, 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("0:"), FPL(".") }, 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("@:"), FPL(".") }, 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("[:"), FPL(".") }, 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("`:"), FPL(".") }, 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("{:"), FPL(".") }, 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("\xB3:"), FPL(".") }, 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("\xC5:"), FPL(".") }, 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("\x0143:"), FPL(".") }, 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // OS_WIN 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(FILE_PATH_USES_DRIVE_LETTERS) 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("c:"), FPL("c:") }, 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("C:"), FPL("C:") }, 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("A:"), FPL("A:") }, 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("Z:"), FPL("Z:") }, 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("a:"), FPL("a:") }, 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("z:"), FPL("z:") }, 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("c:aa"), FPL("c:") }, 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("c:/"), FPL("c:/") }, 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("c://"), FPL("c://") }, 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("c:///"), FPL("c:/") }, 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("c:/aa"), FPL("c:/") }, 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("c:/aa/"), FPL("c:/") }, 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("c:/aa/bb"), FPL("c:/aa") }, 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("c:aa/bb"), FPL("c:aa") }, 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // FILE_PATH_USES_DRIVE_LETTERS 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(FILE_PATH_USES_WIN_SEPARATORS) 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("\\aa\\bb"), FPL("\\aa") }, 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("\\aa\\bb\\"), FPL("\\aa") }, 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("\\aa\\bb\\\\"), FPL("\\aa") }, 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("\\aa\\bb\\ccc"), FPL("\\aa\\bb") }, 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("\\aa"), FPL("\\") }, 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("\\aa\\"), FPL("\\") }, 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("\\"), FPL("\\") }, 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("\\\\"), FPL("\\\\") }, 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("\\\\\\"), FPL("\\") }, 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("aa\\"), FPL(".") }, 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("aa\\bb"), FPL("aa") }, 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("aa\\bb\\"), FPL("aa") }, 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("aa\\bb\\\\"), FPL("aa") }, 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("aa\\\\bb\\\\"), FPL("aa") }, 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("aa\\\\bb\\"), FPL("aa") }, 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("aa\\\\bb"), FPL("aa") }, 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("\\\\aa\\bb"), FPL("\\\\aa") }, 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("\\\\aa\\"), FPL("\\\\") }, 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("\\\\aa"), FPL("\\\\") }, 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(FILE_PATH_USES_DRIVE_LETTERS) 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("c:\\"), FPL("c:\\") }, 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("c:\\\\"), FPL("c:\\\\") }, 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("c:\\\\\\"), FPL("c:\\") }, 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("c:\\aa"), FPL("c:\\") }, 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("c:\\aa\\"), FPL("c:\\") }, 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("c:\\aa\\bb"), FPL("c:\\aa") }, 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("c:aa\\bb"), FPL("c:aa") }, 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // FILE_PATH_USES_DRIVE_LETTERS 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // FILE_PATH_USES_WIN_SEPARATORS 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < arraysize(cases); ++i) { 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilePath input(cases[i].input); 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilePath observed = input.DirName(); 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(FilePath::StringType(cases[i].expected), observed.value()) << 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "i: " << i << ", input: " << input.value(); 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FilePathTest, BaseName) { 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const struct UnaryTestData cases[] = { 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL(""), FPL("") }, 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("aa"), FPL("aa") }, 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("/aa/bb"), FPL("bb") }, 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("/aa/bb/"), FPL("bb") }, 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("/aa/bb//"), FPL("bb") }, 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("/aa/bb/ccc"), FPL("ccc") }, 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("/aa"), FPL("aa") }, 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("/"), FPL("/") }, 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("//"), FPL("//") }, 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("///"), FPL("/") }, 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("aa/"), FPL("aa") }, 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("aa/bb"), FPL("bb") }, 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("aa/bb/"), FPL("bb") }, 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("aa/bb//"), FPL("bb") }, 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("aa//bb//"), FPL("bb") }, 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("aa//bb/"), FPL("bb") }, 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("aa//bb"), FPL("bb") }, 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("//aa/bb"), FPL("bb") }, 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("//aa/"), FPL("aa") }, 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("//aa"), FPL("aa") }, 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("0:"), FPL("0:") }, 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("@:"), FPL("@:") }, 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("[:"), FPL("[:") }, 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("`:"), FPL("`:") }, 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("{:"), FPL("{:") }, 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("\xB3:"), FPL("\xB3:") }, 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("\xC5:"), FPL("\xC5:") }, 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("\x0143:"), FPL("\x0143:") }, 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // OS_WIN 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(FILE_PATH_USES_DRIVE_LETTERS) 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("c:"), FPL("") }, 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("C:"), FPL("") }, 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("A:"), FPL("") }, 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("Z:"), FPL("") }, 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("a:"), FPL("") }, 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("z:"), FPL("") }, 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("c:aa"), FPL("aa") }, 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("c:/"), FPL("/") }, 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("c://"), FPL("//") }, 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("c:///"), FPL("/") }, 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("c:/aa"), FPL("aa") }, 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("c:/aa/"), FPL("aa") }, 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("c:/aa/bb"), FPL("bb") }, 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("c:aa/bb"), FPL("bb") }, 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // FILE_PATH_USES_DRIVE_LETTERS 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(FILE_PATH_USES_WIN_SEPARATORS) 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("\\aa\\bb"), FPL("bb") }, 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("\\aa\\bb\\"), FPL("bb") }, 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("\\aa\\bb\\\\"), FPL("bb") }, 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("\\aa\\bb\\ccc"), FPL("ccc") }, 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("\\aa"), FPL("aa") }, 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("\\"), FPL("\\") }, 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("\\\\"), FPL("\\\\") }, 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("\\\\\\"), FPL("\\") }, 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("aa\\"), FPL("aa") }, 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("aa\\bb"), FPL("bb") }, 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("aa\\bb\\"), FPL("bb") }, 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("aa\\bb\\\\"), FPL("bb") }, 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("aa\\\\bb\\\\"), FPL("bb") }, 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("aa\\\\bb\\"), FPL("bb") }, 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("aa\\\\bb"), FPL("bb") }, 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("\\\\aa\\bb"), FPL("bb") }, 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("\\\\aa\\"), FPL("aa") }, 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("\\\\aa"), FPL("aa") }, 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(FILE_PATH_USES_DRIVE_LETTERS) 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("c:\\"), FPL("\\") }, 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("c:\\\\"), FPL("\\\\") }, 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("c:\\\\\\"), FPL("\\") }, 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("c:\\aa"), FPL("aa") }, 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("c:\\aa\\"), FPL("aa") }, 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("c:\\aa\\bb"), FPL("bb") }, 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("c:aa\\bb"), FPL("bb") }, 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // FILE_PATH_USES_DRIVE_LETTERS 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // FILE_PATH_USES_WIN_SEPARATORS 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < arraysize(cases); ++i) { 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilePath input(cases[i].input); 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilePath observed = input.BaseName(); 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(FilePath::StringType(cases[i].expected), observed.value()) << 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "i: " << i << ", input: " << input.value(); 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FilePathTest, Append) { 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const struct BinaryTestData cases[] = { 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL(""), FPL("cc") }, FPL("cc") }, 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("."), FPL("ff") }, FPL("ff") }, 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("/"), FPL("cc") }, FPL("/cc") }, 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("/aa"), FPL("") }, FPL("/aa") }, 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("/aa/"), FPL("") }, FPL("/aa") }, 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("//aa"), FPL("") }, FPL("//aa") }, 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("//aa/"), FPL("") }, FPL("//aa") }, 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("//"), FPL("aa") }, FPL("//aa") }, 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(FILE_PATH_USES_DRIVE_LETTERS) 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("c:"), FPL("a") }, FPL("c:a") }, 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("c:"), FPL("") }, FPL("c:") }, 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("c:/"), FPL("a") }, FPL("c:/a") }, 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("c://"), FPL("a") }, FPL("c://a") }, 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("c:///"), FPL("a") }, FPL("c:/a") }, 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // FILE_PATH_USES_DRIVE_LETTERS 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(FILE_PATH_USES_WIN_SEPARATORS) 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Append introduces the default separator character, so these test cases 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // need to be defined with different expected results on platforms that use 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // different default separator characters. 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("\\"), FPL("cc") }, FPL("\\cc") }, 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("\\aa"), FPL("") }, FPL("\\aa") }, 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("\\aa\\"), FPL("") }, FPL("\\aa") }, 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("\\\\aa"), FPL("") }, FPL("\\\\aa") }, 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("\\\\aa\\"), FPL("") }, FPL("\\\\aa") }, 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("\\\\"), FPL("aa") }, FPL("\\\\aa") }, 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("/aa/bb"), FPL("cc") }, FPL("/aa/bb\\cc") }, 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("/aa/bb/"), FPL("cc") }, FPL("/aa/bb\\cc") }, 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("aa/bb/"), FPL("cc") }, FPL("aa/bb\\cc") }, 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("aa/bb"), FPL("cc") }, FPL("aa/bb\\cc") }, 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("a/b"), FPL("c") }, FPL("a/b\\c") }, 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("a/b/"), FPL("c") }, FPL("a/b\\c") }, 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("//aa"), FPL("bb") }, FPL("//aa\\bb") }, 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("//aa/"), FPL("bb") }, FPL("//aa\\bb") }, 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("\\aa\\bb"), FPL("cc") }, FPL("\\aa\\bb\\cc") }, 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("\\aa\\bb\\"), FPL("cc") }, FPL("\\aa\\bb\\cc") }, 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("aa\\bb\\"), FPL("cc") }, FPL("aa\\bb\\cc") }, 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("aa\\bb"), FPL("cc") }, FPL("aa\\bb\\cc") }, 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("a\\b"), FPL("c") }, FPL("a\\b\\c") }, 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("a\\b\\"), FPL("c") }, FPL("a\\b\\c") }, 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("\\\\aa"), FPL("bb") }, FPL("\\\\aa\\bb") }, 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("\\\\aa\\"), FPL("bb") }, FPL("\\\\aa\\bb") }, 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(FILE_PATH_USES_DRIVE_LETTERS) 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("c:\\"), FPL("a") }, FPL("c:\\a") }, 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("c:\\\\"), FPL("a") }, FPL("c:\\\\a") }, 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("c:\\\\\\"), FPL("a") }, FPL("c:\\a") }, 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("c:\\"), FPL("") }, FPL("c:\\") }, 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("c:\\a"), FPL("b") }, FPL("c:\\a\\b") }, 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("c:\\a\\"), FPL("b") }, FPL("c:\\a\\b") }, 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // FILE_PATH_USES_DRIVE_LETTERS 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else // FILE_PATH_USES_WIN_SEPARATORS 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("/aa/bb"), FPL("cc") }, FPL("/aa/bb/cc") }, 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("/aa/bb/"), FPL("cc") }, FPL("/aa/bb/cc") }, 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("aa/bb/"), FPL("cc") }, FPL("aa/bb/cc") }, 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("aa/bb"), FPL("cc") }, FPL("aa/bb/cc") }, 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("a/b"), FPL("c") }, FPL("a/b/c") }, 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("a/b/"), FPL("c") }, FPL("a/b/c") }, 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("//aa"), FPL("bb") }, FPL("//aa/bb") }, 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("//aa/"), FPL("bb") }, FPL("//aa/bb") }, 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(FILE_PATH_USES_DRIVE_LETTERS) 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("c:/"), FPL("a") }, FPL("c:/a") }, 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("c:/"), FPL("") }, FPL("c:/") }, 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("c:/a"), FPL("b") }, FPL("c:/a/b") }, 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("c:/a/"), FPL("b") }, FPL("c:/a/b") }, 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // FILE_PATH_USES_DRIVE_LETTERS 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // FILE_PATH_USES_WIN_SEPARATORS 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < arraysize(cases); ++i) { 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilePath root(cases[i].inputs[0]); 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilePath::StringType leaf(cases[i].inputs[1]); 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilePath observed_str = root.Append(leaf); 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(FilePath::StringType(cases[i].expected), observed_str.value()) << 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "i: " << i << ", root: " << root.value() << ", leaf: " << leaf; 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilePath observed_path = root.Append(FilePath(leaf)); 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(FilePath::StringType(cases[i].expected), observed_path.value()) << 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "i: " << i << ", root: " << root.value() << ", leaf: " << leaf; 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(erikkay): It would be nice to have a unicode test append value to 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // handle the case when AppendASCII is passed UTF8 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string ascii = WideToUTF8(leaf); 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_POSIX) 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string ascii = leaf; 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observed_str = root.AppendASCII(ascii); 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(FilePath::StringType(cases[i].expected), observed_str.value()) << 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "i: " << i << ", root: " << root.value() << ", leaf: " << leaf; 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FilePathTest, StripTrailingSeparators) { 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const struct UnaryTestData cases[] = { 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL(""), FPL("") }, 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("/"), FPL("/") }, 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("//"), FPL("//") }, 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("///"), FPL("/") }, 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("////"), FPL("/") }, 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("a/"), FPL("a") }, 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("a//"), FPL("a") }, 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("a///"), FPL("a") }, 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("a////"), FPL("a") }, 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("/a"), FPL("/a") }, 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("/a/"), FPL("/a") }, 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("/a//"), FPL("/a") }, 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("/a///"), FPL("/a") }, 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("/a////"), FPL("/a") }, 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(FILE_PATH_USES_DRIVE_LETTERS) 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("c:"), FPL("c:") }, 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("c:/"), FPL("c:/") }, 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("c://"), FPL("c://") }, 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("c:///"), FPL("c:/") }, 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("c:////"), FPL("c:/") }, 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("c:/a"), FPL("c:/a") }, 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("c:/a/"), FPL("c:/a") }, 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("c:/a//"), FPL("c:/a") }, 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("c:/a///"), FPL("c:/a") }, 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("c:/a////"), FPL("c:/a") }, 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // FILE_PATH_USES_DRIVE_LETTERS 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(FILE_PATH_USES_WIN_SEPARATORS) 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("\\"), FPL("\\") }, 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("\\\\"), FPL("\\\\") }, 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("\\\\\\"), FPL("\\") }, 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("\\\\\\\\"), FPL("\\") }, 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("a\\"), FPL("a") }, 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("a\\\\"), FPL("a") }, 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("a\\\\\\"), FPL("a") }, 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("a\\\\\\\\"), FPL("a") }, 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("\\a"), FPL("\\a") }, 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("\\a\\"), FPL("\\a") }, 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("\\a\\\\"), FPL("\\a") }, 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("\\a\\\\\\"), FPL("\\a") }, 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("\\a\\\\\\\\"), FPL("\\a") }, 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(FILE_PATH_USES_DRIVE_LETTERS) 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("c:\\"), FPL("c:\\") }, 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("c:\\\\"), FPL("c:\\\\") }, 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("c:\\\\\\"), FPL("c:\\") }, 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("c:\\\\\\\\"), FPL("c:\\") }, 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("c:\\a"), FPL("c:\\a") }, 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("c:\\a\\"), FPL("c:\\a") }, 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("c:\\a\\\\"), FPL("c:\\a") }, 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("c:\\a\\\\\\"), FPL("c:\\a") }, 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("c:\\a\\\\\\\\"), FPL("c:\\a") }, 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // FILE_PATH_USES_DRIVE_LETTERS 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // FILE_PATH_USES_WIN_SEPARATORS 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < arraysize(cases); ++i) { 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilePath input(cases[i].input); 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilePath observed = input.StripTrailingSeparators(); 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(FilePath::StringType(cases[i].expected), observed.value()) << 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "i: " << i << ", input: " << input.value(); 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FilePathTest, IsAbsolute) { 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const struct UnaryBooleanTestData cases[] = { 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL(""), false }, 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("a"), false }, 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("c:"), false }, 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("c:a"), false }, 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("a/b"), false }, 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("//"), true }, 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("//a"), true }, 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("c:a/b"), false }, 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("?:/a"), false }, 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(FILE_PATH_USES_DRIVE_LETTERS) 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("/"), false }, 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("/a"), false }, 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("/."), false }, 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("/.."), false }, 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("c:/"), true }, 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("c:/a"), true }, 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("c:/."), true }, 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("c:/.."), true }, 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("C:/a"), true }, 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("d:/a"), true }, 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else // FILE_PATH_USES_DRIVE_LETTERS 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("/"), true }, 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("/a"), true }, 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("/."), true }, 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("/.."), true }, 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("c:/"), false }, 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // FILE_PATH_USES_DRIVE_LETTERS 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(FILE_PATH_USES_WIN_SEPARATORS) 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("a\\b"), false }, 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("\\\\"), true }, 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("\\\\a"), true }, 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("a\\b"), false }, 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("\\\\"), true }, 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("//a"), true }, 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("c:a\\b"), false }, 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("?:\\a"), false }, 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(FILE_PATH_USES_DRIVE_LETTERS) 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("\\"), false }, 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("\\a"), false }, 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("\\."), false }, 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("\\.."), false }, 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("c:\\"), true }, 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("c:\\"), true }, 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("c:\\a"), true }, 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("c:\\."), true }, 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("c:\\.."), true }, 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("C:\\a"), true }, 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("d:\\a"), true }, 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else // FILE_PATH_USES_DRIVE_LETTERS 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("\\"), true }, 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("\\a"), true }, 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("\\."), true }, 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("\\.."), true }, 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("c:\\"), false }, 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // FILE_PATH_USES_DRIVE_LETTERS 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // FILE_PATH_USES_WIN_SEPARATORS 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < arraysize(cases); ++i) { 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilePath input(cases[i].input); 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool observed = input.IsAbsolute(); 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(cases[i].expected, observed) << 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "i: " << i << ", input: " << input.value(); 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FilePathTest, PathComponentsTest) { 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const struct UnaryTestData cases[] = { 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("//foo/bar/baz/"), FPL("|//|foo|bar|baz")}, 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("///"), FPL("|/")}, 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("/foo//bar//baz/"), FPL("|/|foo|bar|baz")}, 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("/foo/bar/baz/"), FPL("|/|foo|bar|baz")}, 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("/foo/bar/baz//"), FPL("|/|foo|bar|baz")}, 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("/foo/bar/baz///"), FPL("|/|foo|bar|baz")}, 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("/foo/bar/baz"), FPL("|/|foo|bar|baz")}, 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("/foo/bar.bot/baz.txt"), FPL("|/|foo|bar.bot|baz.txt")}, 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("//foo//bar/baz"), FPL("|//|foo|bar|baz")}, 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("/"), FPL("|/")}, 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("foo"), FPL("|foo")}, 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL(""), FPL("")}, 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(FILE_PATH_USES_DRIVE_LETTERS) 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("e:/foo"), FPL("|e:|/|foo")}, 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("e:/"), FPL("|e:|/")}, 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("e:"), FPL("|e:")}, 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // FILE_PATH_USES_DRIVE_LETTERS 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(FILE_PATH_USES_WIN_SEPARATORS) 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("../foo"), FPL("|..|foo")}, 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("./foo"), FPL("|foo")}, 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("../foo/bar/"), FPL("|..|foo|bar") }, 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("\\\\foo\\bar\\baz\\"), FPL("|\\\\|foo|bar|baz")}, 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("\\\\\\"), FPL("|\\")}, 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("\\foo\\\\bar\\\\baz\\"), FPL("|\\|foo|bar|baz")}, 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("\\foo\\bar\\baz\\"), FPL("|\\|foo|bar|baz")}, 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("\\foo\\bar\\baz\\\\"), FPL("|\\|foo|bar|baz")}, 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("\\foo\\bar\\baz\\\\\\"), FPL("|\\|foo|bar|baz")}, 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("\\foo\\bar\\baz"), FPL("|\\|foo|bar|baz")}, 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("\\foo\\bar/baz\\\\\\"), FPL("|\\|foo|bar|baz")}, 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("/foo\\bar\\baz"), FPL("|/|foo|bar|baz")}, 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("\\foo\\bar.bot\\baz.txt"), FPL("|\\|foo|bar.bot|baz.txt")}, 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("\\\\foo\\\\bar\\baz"), FPL("|\\\\|foo|bar|baz")}, 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("\\"), FPL("|\\")}, 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // FILE_PATH_USES_WIN_SEPARATORS 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < arraysize(cases); ++i) { 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilePath input(cases[i].input); 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<FilePath::StringType> comps; 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) input.GetComponents(&comps); 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilePath::StringType observed; 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t j = 0; j < comps.size(); ++j) { 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observed.append(FILE_PATH_LITERAL("|"), 1); 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observed.append(comps[j]); 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(FilePath::StringType(cases[i].expected), observed) << 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "i: " << i << ", input: " << input.value(); 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FilePathTest, IsParentTest) { 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const struct BinaryBooleanTestData cases[] = { 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("/"), FPL("/foo/bar/baz") }, true}, 5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("/foo/bar"), FPL("/foo/bar/baz") }, true}, 5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("/foo/bar/"), FPL("/foo/bar/baz") }, true}, 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("//foo/bar/"), FPL("//foo/bar/baz") }, true}, 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("/foo/bar"), FPL("/foo2/bar/baz") }, false}, 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("/foo/bar.txt"), FPL("/foo/bar/baz") }, false}, 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("/foo/bar"), FPL("/foo/bar2/baz") }, false}, 5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("/foo/bar"), FPL("/foo/bar") }, false}, 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("/foo/bar/baz"), FPL("/foo/bar") }, false}, 5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("foo/bar"), FPL("foo/bar/baz") }, true}, 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("foo/bar"), FPL("foo2/bar/baz") }, false}, 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("foo/bar"), FPL("foo/bar2/baz") }, false}, 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL(""), FPL("foo") }, false}, 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(FILE_PATH_USES_DRIVE_LETTERS) 5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("c:/foo/bar"), FPL("c:/foo/bar/baz") }, true}, 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("E:/foo/bar"), FPL("e:/foo/bar/baz") }, true}, 5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("f:/foo/bar"), FPL("F:/foo/bar/baz") }, true}, 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("E:/Foo/bar"), FPL("e:/foo/bar/baz") }, false}, 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("f:/foo/bar"), FPL("F:/foo/Bar/baz") }, false}, 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("c:/"), FPL("c:/foo/bar/baz") }, true}, 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("c:"), FPL("c:/foo/bar/baz") }, true}, 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("c:/foo/bar"), FPL("d:/foo/bar/baz") }, false}, 5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("c:/foo/bar"), FPL("D:/foo/bar/baz") }, false}, 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("C:/foo/bar"), FPL("d:/foo/bar/baz") }, false}, 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("c:/foo/bar"), FPL("c:/foo2/bar/baz") }, false}, 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("e:/foo/bar"), FPL("E:/foo2/bar/baz") }, false}, 5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("F:/foo/bar"), FPL("f:/foo2/bar/baz") }, false}, 5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("c:/foo/bar"), FPL("c:/foo/bar2/baz") }, false}, 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // FILE_PATH_USES_DRIVE_LETTERS 5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(FILE_PATH_USES_WIN_SEPARATORS) 5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("\\foo\\bar"), FPL("\\foo\\bar\\baz") }, true}, 5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("\\foo/bar"), FPL("\\foo\\bar\\baz") }, true}, 5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("\\foo/bar"), FPL("\\foo/bar/baz") }, true}, 5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("\\"), FPL("\\foo\\bar\\baz") }, true}, 5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL(""), FPL("\\foo\\bar\\baz") }, false}, 5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("\\foo\\bar"), FPL("\\foo2\\bar\\baz") }, false}, 5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("\\foo\\bar"), FPL("\\foo\\bar2\\baz") }, false}, 5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // FILE_PATH_USES_WIN_SEPARATORS 5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < arraysize(cases); ++i) { 5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilePath parent(cases[i].inputs[0]); 5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilePath child(cases[i].inputs[1]); 5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(parent.IsParent(child), cases[i].expected) << 5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "i: " << i << ", parent: " << parent.value() << ", child: " << 5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) child.value(); 5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FilePathTest, AppendRelativePathTest) { 5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const struct BinaryTestData cases[] = { 5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(FILE_PATH_USES_WIN_SEPARATORS) 5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("/"), FPL("/foo/bar/baz") }, FPL("foo\\bar\\baz")}, 5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else // FILE_PATH_USES_WIN_SEPARATORS 5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("/"), FPL("/foo/bar/baz") }, FPL("foo/bar/baz")}, 5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // FILE_PATH_USES_WIN_SEPARATORS 5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("/foo/bar"), FPL("/foo/bar/baz") }, FPL("baz")}, 5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("/foo/bar/"), FPL("/foo/bar/baz") }, FPL("baz")}, 5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("//foo/bar/"), FPL("//foo/bar/baz") }, FPL("baz")}, 5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("/foo/bar"), FPL("/foo2/bar/baz") }, FPL("")}, 5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("/foo/bar.txt"), FPL("/foo/bar/baz") }, FPL("")}, 5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("/foo/bar"), FPL("/foo/bar2/baz") }, FPL("")}, 5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("/foo/bar"), FPL("/foo/bar") }, FPL("")}, 5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("/foo/bar/baz"), FPL("/foo/bar") }, FPL("")}, 5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("foo/bar"), FPL("foo/bar/baz") }, FPL("baz")}, 5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("foo/bar"), FPL("foo2/bar/baz") }, FPL("")}, 5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("foo/bar"), FPL("foo/bar2/baz") }, FPL("")}, 5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL(""), FPL("foo") }, FPL("")}, 5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(FILE_PATH_USES_DRIVE_LETTERS) 5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("c:/foo/bar"), FPL("c:/foo/bar/baz") }, FPL("baz")}, 5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("E:/foo/bar"), FPL("e:/foo/bar/baz") }, FPL("baz")}, 5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("f:/foo/bar"), FPL("F:/foo/bar/baz") }, FPL("baz")}, 5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("E:/Foo/bar"), FPL("e:/foo/bar/baz") }, FPL("")}, 5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("f:/foo/bar"), FPL("F:/foo/Bar/baz") }, FPL("")}, 5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(FILE_PATH_USES_WIN_SEPARATORS) 5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("c:/"), FPL("c:/foo/bar/baz") }, FPL("foo\\bar\\baz")}, 5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(akalin): Figure out how to handle the corner case in the 5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // commented-out test case below. Appending to an empty path gives 5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // /foo\bar\baz but appending to a nonempty path "blah" gives 5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // blah\foo\bar\baz. 5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // { { FPL("c:"), FPL("c:/foo/bar/baz") }, FPL("foo\\bar\\baz")}, 5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // FILE_PATH_USES_WIN_SEPARATORS 5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("c:/foo/bar"), FPL("d:/foo/bar/baz") }, FPL("")}, 6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("c:/foo/bar"), FPL("D:/foo/bar/baz") }, FPL("")}, 6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("C:/foo/bar"), FPL("d:/foo/bar/baz") }, FPL("")}, 6025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("c:/foo/bar"), FPL("c:/foo2/bar/baz") }, FPL("")}, 6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("e:/foo/bar"), FPL("E:/foo2/bar/baz") }, FPL("")}, 6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("F:/foo/bar"), FPL("f:/foo2/bar/baz") }, FPL("")}, 6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("c:/foo/bar"), FPL("c:/foo/bar2/baz") }, FPL("")}, 6065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // FILE_PATH_USES_DRIVE_LETTERS 6075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(FILE_PATH_USES_WIN_SEPARATORS) 6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("\\foo\\bar"), FPL("\\foo\\bar\\baz") }, FPL("baz")}, 6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("\\foo/bar"), FPL("\\foo\\bar\\baz") }, FPL("baz")}, 6105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("\\foo/bar"), FPL("\\foo/bar/baz") }, FPL("baz")}, 6115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("\\"), FPL("\\foo\\bar\\baz") }, FPL("foo\\bar\\baz")}, 6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL(""), FPL("\\foo\\bar\\baz") }, FPL("")}, 6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("\\foo\\bar"), FPL("\\foo2\\bar\\baz") }, FPL("")}, 6145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("\\foo\\bar"), FPL("\\foo\\bar2\\baz") }, FPL("")}, 6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // FILE_PATH_USES_WIN_SEPARATORS 6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 6175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FilePath base(FPL("blah")); 6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < arraysize(cases); ++i) { 6215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilePath parent(cases[i].inputs[0]); 6225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilePath child(cases[i].inputs[1]); 6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilePath result; 6255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool success = parent.AppendRelativePath(child, &result); 6265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(cases[i].expected[0] != '\0', success) << 6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "i: " << i << ", parent: " << parent.value() << ", child: " << 6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) child.value(); 6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ(cases[i].expected, result.value().c_str()) << 6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "i: " << i << ", parent: " << parent.value() << ", child: " << 6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) child.value(); 6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilePath result(base); 6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool success = parent.AppendRelativePath(child, &result); 6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(cases[i].expected[0] != '\0', success) << 6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "i: " << i << ", parent: " << parent.value() << ", child: " << 6385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) child.value(); 6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(base.Append(cases[i].expected).value(), result.value()) << 6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "i: " << i << ", parent: " << parent.value() << ", child: " << 6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) child.value(); 6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FilePathTest, EqualityTest) { 6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const struct BinaryBooleanTestData cases[] = { 6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("/foo/bar/baz"), FPL("/foo/bar/baz") }, true}, 6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("/foo/bar"), FPL("/foo/bar/baz") }, false}, 6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("/foo/bar/baz"), FPL("/foo/bar") }, false}, 6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("//foo/bar/"), FPL("//foo/bar/") }, true}, 6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("/foo/bar"), FPL("/foo2/bar") }, false}, 6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("/foo/bar.txt"), FPL("/foo/bar") }, false}, 6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("foo/bar"), FPL("foo/bar") }, true}, 6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("foo/bar"), FPL("foo/bar/baz") }, false}, 6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL(""), FPL("foo") }, false}, 6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(FILE_PATH_USES_DRIVE_LETTERS) 6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("c:/foo/bar"), FPL("c:/foo/bar") }, true}, 6595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("E:/foo/bar"), FPL("e:/foo/bar") }, true}, 6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("f:/foo/bar"), FPL("F:/foo/bar") }, true}, 6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("E:/Foo/bar"), FPL("e:/foo/bar") }, false}, 6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("f:/foo/bar"), FPL("F:/foo/Bar") }, false}, 6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("c:/"), FPL("c:/") }, true}, 6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("c:"), FPL("c:") }, true}, 6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("c:/foo/bar"), FPL("d:/foo/bar") }, false}, 6665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("c:/foo/bar"), FPL("D:/foo/bar") }, false}, 6675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("C:/foo/bar"), FPL("d:/foo/bar") }, false}, 6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("c:/foo/bar"), FPL("c:/foo2/bar") }, false}, 6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // FILE_PATH_USES_DRIVE_LETTERS 6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(FILE_PATH_USES_WIN_SEPARATORS) 6715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("\\foo\\bar"), FPL("\\foo\\bar") }, true}, 6725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("\\foo/bar"), FPL("\\foo/bar") }, true}, 6735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("\\foo/bar"), FPL("\\foo\\bar") }, false}, 6745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("\\"), FPL("\\") }, true}, 6755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("\\"), FPL("/") }, false}, 6765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL(""), FPL("\\") }, false}, 6775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("\\foo\\bar"), FPL("\\foo2\\bar") }, false}, 6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("\\foo\\bar"), FPL("\\foo\\bar2") }, false}, 6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(FILE_PATH_USES_DRIVE_LETTERS) 6805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("c:\\foo\\bar"), FPL("c:\\foo\\bar") }, true}, 6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("E:\\foo\\bar"), FPL("e:\\foo\\bar") }, true}, 6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("f:\\foo\\bar"), FPL("F:\\foo/bar") }, false}, 6835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // FILE_PATH_USES_DRIVE_LETTERS 6845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // FILE_PATH_USES_WIN_SEPARATORS 6855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < arraysize(cases); ++i) { 6885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilePath a(cases[i].inputs[0]); 6895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilePath b(cases[i].inputs[1]); 6905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(a == b, cases[i].expected) << 6925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "equality i: " << i << ", a: " << a.value() << ", b: " << 6935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) b.value(); 6945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < arraysize(cases); ++i) { 6975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilePath a(cases[i].inputs[0]); 6985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilePath b(cases[i].inputs[1]); 6995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(a != b, !cases[i].expected) << 7015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "inequality i: " << i << ", a: " << a.value() << ", b: " << 7025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) b.value(); 7035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FilePathTest, Extension) { 7075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilePath base_dir(FILE_PATH_LITERAL("base_dir")); 7085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilePath jpg = base_dir.Append(FILE_PATH_LITERAL("foo.jpg")); 7105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(FILE_PATH_LITERAL(".jpg"), jpg.Extension()); 711a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ(FILE_PATH_LITERAL(".jpg"), jpg.FinalExtension()); 7125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilePath base = jpg.BaseName().RemoveExtension(); 7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(FILE_PATH_LITERAL("foo"), base.value()); 7155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilePath path_no_ext = base_dir.Append(base); 7175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(path_no_ext.value(), jpg.RemoveExtension().value()); 7185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(path_no_ext.value(), path_no_ext.RemoveExtension().value()); 7205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(FILE_PATH_LITERAL(""), path_no_ext.Extension()); 721a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ(FILE_PATH_LITERAL(""), path_no_ext.FinalExtension()); 7225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FilePathTest, Extension2) { 7255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const struct UnaryTestData cases[] = { 7265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(FILE_PATH_USES_WIN_SEPARATORS) 7275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("C:\\a\\b\\c.ext"), FPL(".ext") }, 7285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("C:\\a\\b\\c."), FPL(".") }, 7295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("C:\\a\\b\\c"), FPL("") }, 7305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("C:\\a\\b\\"), FPL("") }, 7315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("C:\\a\\b.\\"), FPL(".") }, 7325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("C:\\a\\b\\c.ext1.ext2"), FPL(".ext2") }, 7335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("C:\\foo.bar\\\\\\"), FPL(".bar") }, 7345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("C:\\foo.bar\\.."), FPL("") }, 7355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("C:\\foo.bar\\..\\\\"), FPL("") }, 7365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 7375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("/foo/bar/baz.ext"), FPL(".ext") }, 7385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("/foo/bar/baz."), FPL(".") }, 7395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("/foo/bar/baz.."), FPL(".") }, 7405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("/foo/bar/baz"), FPL("") }, 7415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("/foo/bar/"), FPL("") }, 7425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("/foo/bar./"), FPL(".") }, 7435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("/foo/bar/baz.ext1.ext2"), FPL(".ext2") }, 7445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("/subversion-1.6.12.zip"), FPL(".zip") }, 7455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("/foo.12345.gz"), FPL(".gz") }, 7465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("/foo..gz"), FPL(".gz") }, 7475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("."), FPL("") }, 7485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL(".."), FPL("") }, 7495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("./foo"), FPL("") }, 7505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("./foo.ext"), FPL(".ext") }, 7515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("/foo.ext1/bar.ext2"), FPL(".ext2") }, 7525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("/foo.bar////"), FPL(".bar") }, 7535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("/foo.bar/.."), FPL("") }, 7545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("/foo.bar/..////"), FPL("") }, 7555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("/foo.1234.luser.js"), FPL(".js") }, 7565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("/user.js"), FPL(".js") }, 7575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 758a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const struct UnaryTestData double_extension_cases[] = { 759a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) { FPL("/foo.tar.gz"), FPL(".tar.gz") }, 760a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) { FPL("/foo.tar.Z"), FPL(".tar.Z") }, 761a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) { FPL("/foo.tar.bz2"), FPL(".tar.bz2") }, 762a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) { FPL("/foo.1234.gz"), FPL(".1234.gz") }, 763a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) { FPL("/foo.1234.tar.gz"), FPL(".tar.gz") }, 764a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) { FPL("/foo.tar.tar.gz"), FPL(".tar.gz") }, 765a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) { FPL("/foo.tar.gz.gz"), FPL(".gz.gz") }, 766a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) { FPL("/foo.1234.user.js"), FPL(".user.js") }, 767a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) { FPL("foo.user.js"), FPL(".user.js") }, 768a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) }; 7695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (unsigned int i = 0; i < arraysize(cases); ++i) { 7705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilePath path(cases[i].input); 7715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilePath::StringType extension = path.Extension(); 772a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) FilePath::StringType final_extension = path.FinalExtension(); 773a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_STREQ(cases[i].expected, extension.c_str()) << "i: " << i << 774a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ", path: " << path.value(); 775a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_STREQ(cases[i].expected, final_extension.c_str()) << "i: " << i << 776a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ", path: " << path.value(); 777a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } 778a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) for (unsigned int i = 0; i < arraysize(double_extension_cases); ++i) { 779a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) FilePath path(cases[i].input); 780a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) FilePath::StringType extension = path.Extension(); 7815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ(cases[i].expected, extension.c_str()) << "i: " << i << 7825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ", path: " << path.value(); 7835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FilePathTest, InsertBeforeExtension) { 7875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const struct BinaryTestData cases[] = { 7885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL(""), FPL("") }, FPL("") }, 7895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL(""), FPL("txt") }, FPL("") }, 7905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("."), FPL("txt") }, FPL("") }, 7915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL(".."), FPL("txt") }, FPL("") }, 7925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("foo.dll"), FPL("txt") }, FPL("footxt.dll") }, 7935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("."), FPL("") }, FPL(".") }, 7945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("foo.dll"), FPL(".txt") }, FPL("foo.txt.dll") }, 7955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("foo"), FPL("txt") }, FPL("footxt") }, 7965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("foo"), FPL(".txt") }, FPL("foo.txt") }, 7975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("foo.baz.dll"), FPL("txt") }, FPL("foo.baztxt.dll") }, 7985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("foo.baz.dll"), FPL(".txt") }, FPL("foo.baz.txt.dll") }, 7995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("foo.dll"), FPL("") }, FPL("foo.dll") }, 8005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("foo.dll"), FPL(".") }, FPL("foo..dll") }, 8015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("foo"), FPL("") }, FPL("foo") }, 8025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("foo"), FPL(".") }, FPL("foo.") }, 8035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("foo.baz.dll"), FPL("") }, FPL("foo.baz.dll") }, 8045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("foo.baz.dll"), FPL(".") }, FPL("foo.baz..dll") }, 8055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(FILE_PATH_USES_WIN_SEPARATORS) 8065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("\\"), FPL("") }, FPL("\\") }, 8075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("\\"), FPL("txt") }, FPL("\\txt") }, 8085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("\\."), FPL("txt") }, FPL("") }, 8095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("\\.."), FPL("txt") }, FPL("") }, 8105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("\\."), FPL("") }, FPL("\\.") }, 8115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("C:\\bar\\foo.dll"), FPL("txt") }, 8125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FPL("C:\\bar\\footxt.dll") }, 8135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("C:\\bar.baz\\foodll"), FPL("txt") }, 8145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FPL("C:\\bar.baz\\foodlltxt") }, 8155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("C:\\bar.baz\\foo.dll"), FPL("txt") }, 8165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FPL("C:\\bar.baz\\footxt.dll") }, 8175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("C:\\bar.baz\\foo.dll.exe"), FPL("txt") }, 8185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FPL("C:\\bar.baz\\foo.dlltxt.exe") }, 8195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("C:\\bar.baz\\foo"), FPL("") }, 8205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FPL("C:\\bar.baz\\foo") }, 8215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("C:\\bar.baz\\foo.exe"), FPL("") }, 8225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FPL("C:\\bar.baz\\foo.exe") }, 8235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("C:\\bar.baz\\foo.dll.exe"), FPL("") }, 8245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FPL("C:\\bar.baz\\foo.dll.exe") }, 8255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("C:\\bar\\baz\\foo.exe"), FPL(" (1)") }, 8265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FPL("C:\\bar\\baz\\foo (1).exe") }, 8275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("C:\\foo.baz\\\\"), FPL(" (1)") }, FPL("C:\\foo (1).baz") }, 8285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("C:\\foo.baz\\..\\"), FPL(" (1)") }, FPL("") }, 8295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 8305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("/"), FPL("") }, FPL("/") }, 8315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("/"), FPL("txt") }, FPL("/txt") }, 8325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("/."), FPL("txt") }, FPL("") }, 8335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("/.."), FPL("txt") }, FPL("") }, 8345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("/."), FPL("") }, FPL("/.") }, 8355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("/bar/foo.dll"), FPL("txt") }, FPL("/bar/footxt.dll") }, 8365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("/bar.baz/foodll"), FPL("txt") }, FPL("/bar.baz/foodlltxt") }, 8375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("/bar.baz/foo.dll"), FPL("txt") }, FPL("/bar.baz/footxt.dll") }, 8385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("/bar.baz/foo.dll.exe"), FPL("txt") }, 8395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FPL("/bar.baz/foo.dlltxt.exe") }, 8405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("/bar.baz/foo"), FPL("") }, FPL("/bar.baz/foo") }, 8415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("/bar.baz/foo.exe"), FPL("") }, FPL("/bar.baz/foo.exe") }, 8425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("/bar.baz/foo.dll.exe"), FPL("") }, FPL("/bar.baz/foo.dll.exe") }, 8435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("/bar/baz/foo.exe"), FPL(" (1)") }, FPL("/bar/baz/foo (1).exe") }, 8445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("/bar/baz/..////"), FPL(" (1)") }, FPL("") }, 8455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 8465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (unsigned int i = 0; i < arraysize(cases); ++i) { 8475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilePath path(cases[i].inputs[0]); 8485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilePath result = path.InsertBeforeExtension(cases[i].inputs[1]); 8495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(cases[i].expected, result.value()) << "i: " << i << 8505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ", path: " << path.value() << ", insert: " << cases[i].inputs[1]; 8515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FilePathTest, RemoveExtension) { 8555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const struct UnaryTestData cases[] = { 8565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL(""), FPL("") }, 8575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("."), FPL(".") }, 8585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL(".."), FPL("..") }, 8595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("foo.dll"), FPL("foo") }, 8605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("./foo.dll"), FPL("./foo") }, 8615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("foo..dll"), FPL("foo.") }, 8625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("foo"), FPL("foo") }, 8635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("foo."), FPL("foo") }, 8645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("foo.."), FPL("foo.") }, 8655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("foo.baz.dll"), FPL("foo.baz") }, 8665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(FILE_PATH_USES_WIN_SEPARATORS) 8675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("C:\\foo.bar\\foo"), FPL("C:\\foo.bar\\foo") }, 8685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("C:\\foo.bar\\..\\\\"), FPL("C:\\foo.bar\\..\\\\") }, 8695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 8705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("/foo.bar/foo"), FPL("/foo.bar/foo") }, 8715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("/foo.bar/..////"), FPL("/foo.bar/..////") }, 8725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 8735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (unsigned int i = 0; i < arraysize(cases); ++i) { 8745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilePath path(cases[i].input); 8755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilePath removed = path.RemoveExtension(); 876a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) FilePath removed_final = path.RemoveFinalExtension(); 8775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(cases[i].expected, removed.value()) << "i: " << i << 8785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ", path: " << path.value(); 879a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ(cases[i].expected, removed_final.value()) << "i: " << i << 880a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ", path: " << path.value(); 881a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } 882a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) { 883a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) FilePath path(FPL("foo.tar.gz")); 884a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) FilePath removed = path.RemoveExtension(); 885a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) FilePath removed_final = path.RemoveFinalExtension(); 886a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ(FPL("foo"), removed.value()) << ", path: " << path.value(); 887a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ(FPL("foo.tar"), removed_final.value()) << ", path: " 888a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) << path.value(); 8895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FilePathTest, ReplaceExtension) { 8935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const struct BinaryTestData cases[] = { 8945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL(""), FPL("") }, FPL("") }, 8955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL(""), FPL("txt") }, FPL("") }, 8965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("."), FPL("txt") }, FPL("") }, 8975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL(".."), FPL("txt") }, FPL("") }, 8985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("."), FPL("") }, FPL("") }, 8995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("foo.dll"), FPL("txt") }, FPL("foo.txt") }, 9005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("./foo.dll"), FPL("txt") }, FPL("./foo.txt") }, 9015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("foo..dll"), FPL("txt") }, FPL("foo..txt") }, 9025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("foo.dll"), FPL(".txt") }, FPL("foo.txt") }, 9035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("foo"), FPL("txt") }, FPL("foo.txt") }, 9045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("foo."), FPL("txt") }, FPL("foo.txt") }, 9055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("foo.."), FPL("txt") }, FPL("foo..txt") }, 9065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("foo"), FPL(".txt") }, FPL("foo.txt") }, 9075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("foo.baz.dll"), FPL("txt") }, FPL("foo.baz.txt") }, 9085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("foo.baz.dll"), FPL(".txt") }, FPL("foo.baz.txt") }, 9095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("foo.dll"), FPL("") }, FPL("foo") }, 9105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("foo.dll"), FPL(".") }, FPL("foo") }, 9115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("foo"), FPL("") }, FPL("foo") }, 9125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("foo"), FPL(".") }, FPL("foo") }, 9135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("foo.baz.dll"), FPL("") }, FPL("foo.baz") }, 9145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("foo.baz.dll"), FPL(".") }, FPL("foo.baz") }, 9155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(FILE_PATH_USES_WIN_SEPARATORS) 9165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("C:\\foo.bar\\foo"), FPL("baz") }, FPL("C:\\foo.bar\\foo.baz") }, 9175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("C:\\foo.bar\\..\\\\"), FPL("baz") }, FPL("") }, 9185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 9195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("/foo.bar/foo"), FPL("baz") }, FPL("/foo.bar/foo.baz") }, 9205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("/foo.bar/..////"), FPL("baz") }, FPL("") }, 9215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 9225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (unsigned int i = 0; i < arraysize(cases); ++i) { 9235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilePath path(cases[i].inputs[0]); 9245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilePath replaced = path.ReplaceExtension(cases[i].inputs[1]); 9255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(cases[i].expected, replaced.value()) << "i: " << i << 9265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ", path: " << path.value() << ", replace: " << cases[i].inputs[1]; 9275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FilePathTest, AddExtension) { 9315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const struct BinaryTestData cases[] = { 9325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL(""), FPL("") }, FPL("") }, 9335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL(""), FPL("txt") }, FPL("") }, 9345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("."), FPL("txt") }, FPL("") }, 9355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL(".."), FPL("txt") }, FPL("") }, 9365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("."), FPL("") }, FPL("") }, 9375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("foo.dll"), FPL("txt") }, FPL("foo.dll.txt") }, 9385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("./foo.dll"), FPL("txt") }, FPL("./foo.dll.txt") }, 9395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("foo..dll"), FPL("txt") }, FPL("foo..dll.txt") }, 9405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("foo.dll"), FPL(".txt") }, FPL("foo.dll.txt") }, 9415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("foo"), FPL("txt") }, FPL("foo.txt") }, 9425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("foo."), FPL("txt") }, FPL("foo.txt") }, 9435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("foo.."), FPL("txt") }, FPL("foo..txt") }, 9445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("foo"), FPL(".txt") }, FPL("foo.txt") }, 9455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("foo.baz.dll"), FPL("txt") }, FPL("foo.baz.dll.txt") }, 9465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("foo.baz.dll"), FPL(".txt") }, FPL("foo.baz.dll.txt") }, 9475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("foo.dll"), FPL("") }, FPL("foo.dll") }, 9485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("foo.dll"), FPL(".") }, FPL("foo.dll") }, 9495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("foo"), FPL("") }, FPL("foo") }, 9505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("foo"), FPL(".") }, FPL("foo") }, 9515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("foo.baz.dll"), FPL("") }, FPL("foo.baz.dll") }, 9525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("foo.baz.dll"), FPL(".") }, FPL("foo.baz.dll") }, 9535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(FILE_PATH_USES_WIN_SEPARATORS) 9545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("C:\\foo.bar\\foo"), FPL("baz") }, FPL("C:\\foo.bar\\foo.baz") }, 9555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("C:\\foo.bar\\..\\\\"), FPL("baz") }, FPL("") }, 9565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 9575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("/foo.bar/foo"), FPL("baz") }, FPL("/foo.bar/foo.baz") }, 9585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("/foo.bar/..////"), FPL("baz") }, FPL("") }, 9595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 9605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (unsigned int i = 0; i < arraysize(cases); ++i) { 9615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilePath path(cases[i].inputs[0]); 9625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilePath added = path.AddExtension(cases[i].inputs[1]); 9635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(cases[i].expected, added.value()) << "i: " << i << 9645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ", path: " << path.value() << ", add: " << cases[i].inputs[1]; 9655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FilePathTest, MatchesExtension) { 9695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const struct BinaryBooleanTestData cases[] = { 9705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("foo"), FPL("") }, true}, 9715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("foo"), FPL(".") }, false}, 9725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("foo."), FPL("") }, false}, 9735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("foo."), FPL(".") }, true}, 9745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("foo.txt"), FPL(".dll") }, false}, 9755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("foo.txt"), FPL(".txt") }, true}, 9765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("foo.txt.dll"), FPL(".txt") }, false}, 9775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("foo.txt.dll"), FPL(".dll") }, true}, 9785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("foo.TXT"), FPL(".txt") }, true}, 9795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("foo.txt"), FPL(".TXT") }, true}, 9805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("foo.tXt"), FPL(".txt") }, true}, 9815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("foo.txt"), FPL(".tXt") }, true}, 9825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("foo.tXt"), FPL(".TXT") }, true}, 9835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("foo.tXt"), FPL(".tXt") }, true}, 9845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(FILE_PATH_USES_DRIVE_LETTERS) 9855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("c:/foo.txt.dll"), FPL(".txt") }, false}, 9865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("c:/foo.txt"), FPL(".txt") }, true}, 9875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // FILE_PATH_USES_DRIVE_LETTERS 9885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(FILE_PATH_USES_WIN_SEPARATORS) 9895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("c:\\bar\\foo.txt.dll"), FPL(".txt") }, false}, 9905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("c:\\bar\\foo.txt"), FPL(".txt") }, true}, 9915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // FILE_PATH_USES_DRIVE_LETTERS 9925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("/bar/foo.txt.dll"), FPL(".txt") }, false}, 9935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("/bar/foo.txt"), FPL(".txt") }, true}, 9945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) || defined(OS_MACOSX) 9955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Umlauts A, O, U: direct comparison, and upper case vs. lower case 9965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("foo.\u00E4\u00F6\u00FC"), FPL(".\u00E4\u00F6\u00FC") }, true}, 9975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("foo.\u00C4\u00D6\u00DC"), FPL(".\u00E4\u00F6\u00FC") }, true}, 9985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // C with circumflex: direct comparison, and upper case vs. lower case 9995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("foo.\u0109"), FPL(".\u0109") }, true}, 10005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("foo.\u0108"), FPL(".\u0109") }, true}, 10015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 10025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 10035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < arraysize(cases); ++i) { 10055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilePath path(cases[i].inputs[0]); 10065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilePath::StringType ext(cases[i].inputs[1]); 10075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(cases[i].expected, path.MatchesExtension(ext)) << 10095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "i: " << i << ", path: " << path.value() << ", ext: " << ext; 10105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FilePathTest, CompareIgnoreCase) { 10145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const struct BinaryIntTestData cases[] = { 10155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("foo"), FPL("foo") }, 0}, 10165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("FOO"), FPL("foo") }, 0}, 10175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("foo.ext"), FPL("foo.ext") }, 0}, 10185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("FOO.EXT"), FPL("foo.ext") }, 0}, 10195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("Foo.Ext"), FPL("foo.ext") }, 0}, 10205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("foO"), FPL("foo") }, 0}, 10215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("foo"), FPL("foO") }, 0}, 10225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("fOo"), FPL("foo") }, 0}, 10235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("foo"), FPL("fOo") }, 0}, 10245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("bar"), FPL("foo") }, -1}, 10255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("foo"), FPL("bar") }, 1}, 10265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("BAR"), FPL("foo") }, -1}, 10275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("FOO"), FPL("bar") }, 1}, 10285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("bar"), FPL("FOO") }, -1}, 10295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("foo"), FPL("BAR") }, 1}, 10305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("BAR"), FPL("FOO") }, -1}, 10315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("FOO"), FPL("BAR") }, 1}, 10325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // German "Eszett" (lower case and the new-fangled upper case) 10335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Note that uc(<lowercase eszett>) => "SS", NOT <uppercase eszett>! 10345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // However, neither Windows nor Mac OSX converts these. 10355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // (or even have glyphs for <uppercase eszett>) 10365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("\u00DF"), FPL("\u00DF") }, 0}, 10375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("\u1E9E"), FPL("\u1E9E") }, 0}, 10385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("\u00DF"), FPL("\u1E9E") }, -1}, 10395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("SS"), FPL("\u00DF") }, -1}, 10405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("SS"), FPL("\u1E9E") }, -1}, 10415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) || defined(OS_MACOSX) 10425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Umlauts A, O, U: direct comparison, and upper case vs. lower case 10435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("\u00E4\u00F6\u00FC"), FPL("\u00E4\u00F6\u00FC") }, 0}, 10445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("\u00C4\u00D6\u00DC"), FPL("\u00E4\u00F6\u00FC") }, 0}, 10455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // C with circumflex: direct comparison, and upper case vs. lower case 10465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("\u0109"), FPL("\u0109") }, 0}, 10475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("\u0108"), FPL("\u0109") }, 0}, 10485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Cyrillic letter SHA: direct comparison, and upper case vs. lower case 10495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("\u0428"), FPL("\u0428") }, 0}, 10505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("\u0428"), FPL("\u0448") }, 0}, 10515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Greek letter DELTA: direct comparison, and upper case vs. lower case 10525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("\u0394"), FPL("\u0394") }, 0}, 10535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("\u0394"), FPL("\u03B4") }, 0}, 10545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Japanese full-width A: direct comparison, and upper case vs. lower case 10555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Note that full-width and standard characters are considered different. 10565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("\uFF21"), FPL("\uFF21") }, 0}, 10575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("\uFF21"), FPL("\uFF41") }, 0}, 10585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("A"), FPL("\uFF21") }, -1}, 10595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("A"), FPL("\uFF41") }, -1}, 10605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("a"), FPL("\uFF21") }, -1}, 10615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("a"), FPL("\uFF41") }, -1}, 10625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 10635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX) 10645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Codepoints > 0x1000 10655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Georgian letter DON: direct comparison, and upper case vs. lower case 10665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("\u10A3"), FPL("\u10A3") }, 0}, 10675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("\u10A3"), FPL("\u10D3") }, 0}, 10685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Combining characters vs. pre-composed characters, upper and lower case 10695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("k\u0301u\u032Do\u0304\u0301n"), FPL("\u1E31\u1E77\u1E53n") }, 0}, 10705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("k\u0301u\u032Do\u0304\u0301n"), FPL("kuon") }, 1}, 10715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("kuon"), FPL("k\u0301u\u032Do\u0304\u0301n") }, -1}, 10725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("K\u0301U\u032DO\u0304\u0301N"), FPL("KUON") }, 1}, 10735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("KUON"), FPL("K\u0301U\u032DO\u0304\u0301N") }, -1}, 10745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("k\u0301u\u032Do\u0304\u0301n"), FPL("KUON") }, 1}, 10755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("K\u0301U\u032DO\u0304\u0301N"), FPL("\u1E31\u1E77\u1E53n") }, 0}, 10765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("k\u0301u\u032Do\u0304\u0301n"), FPL("\u1E30\u1E76\u1E52n") }, 0}, 10775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { { FPL("k\u0301u\u032Do\u0304\u0302n"), FPL("\u1E30\u1E76\u1E52n") }, 1}, 10785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 10795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 10805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < arraysize(cases); ++i) { 10825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilePath::StringType s1(cases[i].inputs[0]); 10835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilePath::StringType s2(cases[i].inputs[1]); 10845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int result = FilePath::CompareIgnoreCase(s1, s2); 10855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(cases[i].expected, result) << 10865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "i: " << i << ", s1: " << s1 << ", s2: " << s2; 10875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FilePathTest, ReferencesParent) { 10915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const struct UnaryBooleanTestData cases[] = { 10925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("."), false }, 10935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL(".."), true }, 109490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) { FPL(".. "), true }, 109590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) { FPL(" .."), true }, 109690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) { FPL("..."), true }, 10975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("a.."), false }, 10985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("..a"), false }, 10995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("../"), true }, 11005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("/.."), true }, 11015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("/../"), true }, 11025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("/a../"), false }, 11035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("/..a/"), false }, 11045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("//.."), true }, 11055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("..//"), true }, 11065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("//..//"), true }, 11075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("a//..//c"), true }, 11085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("../b/c"), true }, 11095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("/../b/c"), true }, 11105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("a/b/.."), true }, 11115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("a/b/../"), true }, 11125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("a/../c"), true }, 11135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("a/b/c"), false }, 11145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 11155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < arraysize(cases); ++i) { 11175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilePath input(cases[i].input); 11185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool observed = input.ReferencesParent(); 11195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(cases[i].expected, observed) << 11205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "i: " << i << ", input: " << input.value(); 11215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FilePathTest, FromUTF8Unsafe_And_AsUTF8Unsafe) { 11255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const struct UTF8TestData cases[] = { 11265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("foo.txt"), "foo.txt" }, 11275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // "aeo" with accents. Use http://0xcc.net/jsescape/ to decode them. 11285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("\u00E0\u00E8\u00F2.txt"), "\xC3\xA0\xC3\xA8\xC3\xB2.txt" }, 11295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Full-width "ABC". 11305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("\uFF21\uFF22\uFF23.txt"), 11315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\xEF\xBC\xA1\xEF\xBC\xA2\xEF\xBC\xA3.txt" }, 11325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 11335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < arraysize(cases); ++i) { 11355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test FromUTF8Unsafe() works. 11365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilePath from_utf8 = FilePath::FromUTF8Unsafe(cases[i].utf8); 11375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(cases[i].native, from_utf8.value()) 11385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << "i: " << i << ", input: " << cases[i].native; 11395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test AsUTF8Unsafe() works. 11405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilePath from_native = FilePath(cases[i].native); 11415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(cases[i].utf8, from_native.AsUTF8Unsafe()) 11425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << "i: " << i << ", input: " << cases[i].native; 11435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test the two file paths are identical. 11445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(from_utf8.value(), from_native.value()); 11455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(FilePathTest, ConstructWithNUL) { 11492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Assert FPS() works. 1150a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) ASSERT_EQ(3U, FPS("a\0b").length()); 11512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Test constructor strips '\0' 11532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FilePath path(FPS("a\0b")); 1154a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) EXPECT_EQ(1U, path.value().length()); 1155a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) EXPECT_EQ(FPL("a"), path.value()); 11562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 11572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(FilePathTest, AppendWithNUL) { 11592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Assert FPS() works. 1160a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) ASSERT_EQ(3U, FPS("b\0b").length()); 11612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Test Append() strips '\0' 11632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FilePath path(FPL("a")); 11642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) path = path.Append(FPS("b\0b")); 1165a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) EXPECT_EQ(3U, path.value().length()); 11662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(FILE_PATH_USES_WIN_SEPARATORS) 1167a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) EXPECT_EQ(FPL("a\\b"), path.value()); 11682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#else 1169a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) EXPECT_EQ(FPL("a/b"), path.value()); 11702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 11712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 11722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(FilePathTest, ReferencesParentWithNUL) { 11742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Assert FPS() works. 1175a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) ASSERT_EQ(3U, FPS("..\0").length()); 11762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Test ReferencesParent() doesn't break with "..\0" 11782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FilePath path(FPS("..\0")); 11792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(path.ReferencesParent()); 11802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 11812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(FILE_PATH_USES_WIN_SEPARATORS) 11835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FilePathTest, NormalizePathSeparators) { 11845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const struct UnaryTestData cases[] = { 11855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("foo/bar"), FPL("foo\\bar") }, 11865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("foo/bar\\betz"), FPL("foo\\bar\\betz") }, 11875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("foo\\bar"), FPL("foo\\bar") }, 11885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("foo\\bar/betz"), FPL("foo\\bar\\betz") }, 11895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("foo"), FPL("foo") }, 11905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Trailing slashes don't automatically get stripped. That's what 11915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // StripTrailingSeparators() is for. 11925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("foo\\"), FPL("foo\\") }, 11935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("foo/"), FPL("foo\\") }, 11945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("foo/bar\\"), FPL("foo\\bar\\") }, 11955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("foo\\bar/"), FPL("foo\\bar\\") }, 11965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("foo/bar/"), FPL("foo\\bar\\") }, 11975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("foo\\bar\\"), FPL("foo\\bar\\") }, 11985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("\\foo/bar"), FPL("\\foo\\bar") }, 11995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("/foo\\bar"), FPL("\\foo\\bar") }, 12005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("c:/foo/bar/"), FPL("c:\\foo\\bar\\") }, 12015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("/foo/bar/"), FPL("\\foo\\bar\\") }, 12025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("\\foo\\bar\\"), FPL("\\foo\\bar\\") }, 12035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("c:\\foo/bar"), FPL("c:\\foo\\bar") }, 12045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("//foo\\bar\\"), FPL("\\\\foo\\bar\\") }, 12055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("\\\\foo\\bar\\"), FPL("\\\\foo\\bar\\") }, 12065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("//foo\\bar\\"), FPL("\\\\foo\\bar\\") }, 12075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This method does not normalize the number of path separators. 12085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("foo\\\\bar"), FPL("foo\\\\bar") }, 12095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("foo//bar"), FPL("foo\\\\bar") }, 12105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("foo/\\bar"), FPL("foo\\\\bar") }, 12115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("foo\\/bar"), FPL("foo\\\\bar") }, 12125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("///foo\\\\bar"), FPL("\\\\\\foo\\\\bar") }, 12135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("foo//bar///"), FPL("foo\\\\bar\\\\\\") }, 12145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("foo/\\bar/\\"), FPL("foo\\\\bar\\\\") }, 12155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { FPL("/\\foo\\/bar"), FPL("\\\\foo\\\\bar") }, 12165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 12175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < arraysize(cases); ++i) { 12185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilePath input(cases[i].input); 12195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilePath observed = input.NormalizePathSeparators(); 12205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(FilePath::StringType(cases[i].expected), observed.value()) << 12215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "i: " << i << ", input: " << input.value(); 12225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 12252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1226c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(FilePathTest, EndsWithSeparator) { 1227c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const UnaryBooleanTestData cases[] = { 1228c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { FPL(""), false }, 1229c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { FPL("/"), true }, 1230c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { FPL("foo/"), true }, 1231c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { FPL("bar"), false }, 1232c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { FPL("/foo/bar"), false }, 1233c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) }; 1234c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) for (size_t i = 0; i < arraysize(cases); ++i) { 1235c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) FilePath input = FilePath(cases[i].input).NormalizePathSeparators(); 1236c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(cases[i].expected, input.EndsWithSeparator()); 1237c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 1238c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 1239c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1240c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(FilePathTest, AsEndingWithSeparator) { 1241c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const UnaryTestData cases[] = { 1242c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { FPL(""), FPL("") }, 1243c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { FPL("/"), FPL("/") }, 1244c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { FPL("foo"), FPL("foo/") }, 1245c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { FPL("foo/"), FPL("foo/") } 1246c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) }; 1247c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) for (size_t i = 0; i < arraysize(cases); ++i) { 1248c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) FilePath input = FilePath(cases[i].input).NormalizePathSeparators(); 1249c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) FilePath expected = FilePath(cases[i].expected).NormalizePathSeparators(); 1250c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(expected.value(), input.AsEndingWithSeparator().value()); 1251c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 1252c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 1253c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1254f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#if defined(OS_ANDROID) 1255f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(FilePathTest, ContentUriTest) { 1256f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const struct UnaryBooleanTestData cases[] = { 1257f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { FPL("content://foo.bar"), true }, 1258f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { FPL("content://foo.bar/"), true }, 1259f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { FPL("content://foo/bar"), true }, 1260f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { FPL("CoNTenT://foo.bar"), true }, 1261f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { FPL("content://"), true }, 1262f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { FPL("content:///foo.bar"), true }, 1263f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { FPL("content://3foo/bar"), true }, 1264f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { FPL("content://_foo/bar"), true }, 1265f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { FPL(".. "), false }, 1266f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { FPL("foo.bar"), false }, 1267f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { FPL("content:foo.bar"), false }, 1268f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { FPL("content:/foo.ba"), false }, 1269f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { FPL("content:/dir/foo.bar"), false }, 1270f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { FPL("content: //foo.bar"), false }, 1271f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { FPL("content%2a%2f%2f"), false }, 1272f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) }; 1273f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1274f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) for (size_t i = 0; i < arraysize(cases); ++i) { 1275f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) FilePath input(cases[i].input); 1276f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) bool observed = input.IsContentUri(); 1277f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(cases[i].expected, observed) << 1278f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "i: " << i << ", input: " << input.value(); 1279f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 1280f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 1281f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif 1282f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 12832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace base 1284