1b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat// Use of this source code is governed by a BSD-style license that can be 3b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat// found in the LICENSE file. 4b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 5cce46a0c214b37e8da48c522c83037e8ffa4f9fdAlex Vakulenko#include <stddef.h> 6cce46a0c214b37e8da48c522c83037e8ffa4f9fdAlex Vakulenko 7b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#include <sstream> 8b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 9b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#include "base/files/file_path.h" 10cce46a0c214b37e8da48c522c83037e8ffa4f9fdAlex Vakulenko#include "base/macros.h" 11b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#include "base/strings/utf_string_conversions.h" 121ad3000647abb4e86484f68aa387def88294d82bAri Hausman-Cohen#include "base/test/scoped_locale.h" 13cce46a0c214b37e8da48c522c83037e8ffa4f9fdAlex Vakulenko#include "build/build_config.h" 14b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#include "testing/gtest/include/gtest/gtest.h" 15b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#include "testing/platform_test.h" 16b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 17999773c87b1935713c309e6209255570ec4c7c88Ari Hausman-Cohen#if defined(OS_POSIX) 18999773c87b1935713c309e6209255570ec4c7c88Ari Hausman-Cohen#include "base/test/scoped_locale.h" 19999773c87b1935713c309e6209255570ec4c7c88Ari Hausman-Cohen#endif 20999773c87b1935713c309e6209255570ec4c7c88Ari Hausman-Cohen 21b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat// This macro helps avoid wrapped lines in the test structs. 22b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#define FPL(x) FILE_PATH_LITERAL(x) 23b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 24b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat// This macro constructs strings which can contain NULs. 25b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#define FPS(x) FilePath::StringType(FPL(x), arraysize(FPL(x)) - 1) 26b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 27b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Eratnamespace base { 28b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 29b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Eratstruct UnaryTestData { 30b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat const FilePath::CharType* input; 31b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat const FilePath::CharType* expected; 32b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat}; 33b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 34b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Eratstruct UnaryBooleanTestData { 35b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat const FilePath::CharType* input; 36b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat bool expected; 37b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat}; 38b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 39b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Eratstruct BinaryTestData { 40b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat const FilePath::CharType* inputs[2]; 41b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat const FilePath::CharType* expected; 42b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat}; 43b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 44b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Eratstruct BinaryBooleanTestData { 45b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat const FilePath::CharType* inputs[2]; 46b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat bool expected; 47b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat}; 48b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 49b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Eratstruct BinaryIntTestData { 50b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat const FilePath::CharType* inputs[2]; 51b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat int expected; 52b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat}; 53b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 54b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Eratstruct UTF8TestData { 55b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat const FilePath::CharType* native; 56b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat const char* utf8; 57b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat}; 58b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 59b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat// file_util winds up using autoreleased objects on the Mac, so this needs 60b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat// to be a PlatformTest 61b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erattypedef PlatformTest FilePathTest; 62b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 63b8cf94937c52feb53b55c39e3f82094d27de464cDaniel EratTEST_F(FilePathTest, DirName) { 64b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat const struct UnaryTestData cases[] = { 65b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL(""), FPL(".") }, 66b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("aa"), FPL(".") }, 67b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("/aa/bb"), FPL("/aa") }, 68b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("/aa/bb/"), FPL("/aa") }, 69b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("/aa/bb//"), FPL("/aa") }, 70b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("/aa/bb/ccc"), FPL("/aa/bb") }, 71b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("/aa"), FPL("/") }, 72b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("/aa/"), FPL("/") }, 73b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("/"), FPL("/") }, 74b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("//"), FPL("//") }, 75b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("///"), FPL("/") }, 76b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("aa/"), FPL(".") }, 77b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("aa/bb"), FPL("aa") }, 78b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("aa/bb/"), FPL("aa") }, 79b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("aa/bb//"), FPL("aa") }, 80b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("aa//bb//"), FPL("aa") }, 81b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("aa//bb/"), FPL("aa") }, 82b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("aa//bb"), FPL("aa") }, 83b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("//aa/bb"), FPL("//aa") }, 84b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("//aa/"), FPL("//") }, 85b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("//aa"), FPL("//") }, 86b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("0:"), FPL(".") }, 87b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("@:"), FPL(".") }, 88b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("[:"), FPL(".") }, 89b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("`:"), FPL(".") }, 90b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("{:"), FPL(".") }, 91b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("\xB3:"), FPL(".") }, 92b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("\xC5:"), FPL(".") }, 93b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#if defined(OS_WIN) 94b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("\x0143:"), FPL(".") }, 95b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#endif // OS_WIN 96b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#if defined(FILE_PATH_USES_DRIVE_LETTERS) 97b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("c:"), FPL("c:") }, 98b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("C:"), FPL("C:") }, 99b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("A:"), FPL("A:") }, 100b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("Z:"), FPL("Z:") }, 101b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("a:"), FPL("a:") }, 102b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("z:"), FPL("z:") }, 103b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("c:aa"), FPL("c:") }, 104b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("c:/"), FPL("c:/") }, 105b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("c://"), FPL("c://") }, 106b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("c:///"), FPL("c:/") }, 107b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("c:/aa"), FPL("c:/") }, 108b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("c:/aa/"), FPL("c:/") }, 109b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("c:/aa/bb"), FPL("c:/aa") }, 110b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("c:aa/bb"), FPL("c:aa") }, 111b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#endif // FILE_PATH_USES_DRIVE_LETTERS 112b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#if defined(FILE_PATH_USES_WIN_SEPARATORS) 113b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("\\aa\\bb"), FPL("\\aa") }, 114b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("\\aa\\bb\\"), FPL("\\aa") }, 115b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("\\aa\\bb\\\\"), FPL("\\aa") }, 116b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("\\aa\\bb\\ccc"), FPL("\\aa\\bb") }, 117b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("\\aa"), FPL("\\") }, 118b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("\\aa\\"), FPL("\\") }, 119b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("\\"), FPL("\\") }, 120b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("\\\\"), FPL("\\\\") }, 121b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("\\\\\\"), FPL("\\") }, 122b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("aa\\"), FPL(".") }, 123b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("aa\\bb"), FPL("aa") }, 124b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("aa\\bb\\"), FPL("aa") }, 125b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("aa\\bb\\\\"), FPL("aa") }, 126b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("aa\\\\bb\\\\"), FPL("aa") }, 127b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("aa\\\\bb\\"), FPL("aa") }, 128b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("aa\\\\bb"), FPL("aa") }, 129b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("\\\\aa\\bb"), FPL("\\\\aa") }, 130b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("\\\\aa\\"), FPL("\\\\") }, 131b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("\\\\aa"), FPL("\\\\") }, 132b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#if defined(FILE_PATH_USES_DRIVE_LETTERS) 133b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("c:\\"), FPL("c:\\") }, 134b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("c:\\\\"), FPL("c:\\\\") }, 135b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("c:\\\\\\"), FPL("c:\\") }, 136b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("c:\\aa"), FPL("c:\\") }, 137b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("c:\\aa\\"), FPL("c:\\") }, 138b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("c:\\aa\\bb"), FPL("c:\\aa") }, 139b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("c:aa\\bb"), FPL("c:aa") }, 140b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#endif // FILE_PATH_USES_DRIVE_LETTERS 141b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#endif // FILE_PATH_USES_WIN_SEPARATORS 142b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat }; 143b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 144b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat for (size_t i = 0; i < arraysize(cases); ++i) { 145b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat FilePath input(cases[i].input); 146b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat FilePath observed = input.DirName(); 147b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat EXPECT_EQ(FilePath::StringType(cases[i].expected), observed.value()) << 148b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat "i: " << i << ", input: " << input.value(); 149b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat } 150b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat} 151b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 152b8cf94937c52feb53b55c39e3f82094d27de464cDaniel EratTEST_F(FilePathTest, BaseName) { 153b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat const struct UnaryTestData cases[] = { 154b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL(""), FPL("") }, 155b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("aa"), FPL("aa") }, 156b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("/aa/bb"), FPL("bb") }, 157b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("/aa/bb/"), FPL("bb") }, 158b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("/aa/bb//"), FPL("bb") }, 159b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("/aa/bb/ccc"), FPL("ccc") }, 160b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("/aa"), FPL("aa") }, 161b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("/"), FPL("/") }, 162b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("//"), FPL("//") }, 163b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("///"), FPL("/") }, 164b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("aa/"), FPL("aa") }, 165b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("aa/bb"), FPL("bb") }, 166b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("aa/bb/"), FPL("bb") }, 167b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("aa/bb//"), FPL("bb") }, 168b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("aa//bb//"), FPL("bb") }, 169b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("aa//bb/"), FPL("bb") }, 170b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("aa//bb"), FPL("bb") }, 171b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("//aa/bb"), FPL("bb") }, 172b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("//aa/"), FPL("aa") }, 173b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("//aa"), FPL("aa") }, 174b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("0:"), FPL("0:") }, 175b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("@:"), FPL("@:") }, 176b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("[:"), FPL("[:") }, 177b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("`:"), FPL("`:") }, 178b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("{:"), FPL("{:") }, 179b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("\xB3:"), FPL("\xB3:") }, 180b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("\xC5:"), FPL("\xC5:") }, 181b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#if defined(OS_WIN) 182b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("\x0143:"), FPL("\x0143:") }, 183b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#endif // OS_WIN 184b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#if defined(FILE_PATH_USES_DRIVE_LETTERS) 185b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("c:"), FPL("") }, 186b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("C:"), FPL("") }, 187b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("A:"), FPL("") }, 188b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("Z:"), FPL("") }, 189b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("a:"), FPL("") }, 190b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("z:"), FPL("") }, 191b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("c:aa"), FPL("aa") }, 192b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("c:/"), FPL("/") }, 193b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("c://"), FPL("//") }, 194b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("c:///"), FPL("/") }, 195b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("c:/aa"), FPL("aa") }, 196b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("c:/aa/"), FPL("aa") }, 197b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("c:/aa/bb"), FPL("bb") }, 198b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("c:aa/bb"), FPL("bb") }, 199b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#endif // FILE_PATH_USES_DRIVE_LETTERS 200b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#if defined(FILE_PATH_USES_WIN_SEPARATORS) 201b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("\\aa\\bb"), FPL("bb") }, 202b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("\\aa\\bb\\"), FPL("bb") }, 203b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("\\aa\\bb\\\\"), FPL("bb") }, 204b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("\\aa\\bb\\ccc"), FPL("ccc") }, 205b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("\\aa"), FPL("aa") }, 206b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("\\"), FPL("\\") }, 207b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("\\\\"), FPL("\\\\") }, 208b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("\\\\\\"), FPL("\\") }, 209b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("aa\\"), FPL("aa") }, 210b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("aa\\bb"), FPL("bb") }, 211b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("aa\\bb\\"), FPL("bb") }, 212b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("aa\\bb\\\\"), FPL("bb") }, 213b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("aa\\\\bb\\\\"), FPL("bb") }, 214b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("aa\\\\bb\\"), FPL("bb") }, 215b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("aa\\\\bb"), FPL("bb") }, 216b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("\\\\aa\\bb"), FPL("bb") }, 217b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("\\\\aa\\"), FPL("aa") }, 218b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("\\\\aa"), FPL("aa") }, 219b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#if defined(FILE_PATH_USES_DRIVE_LETTERS) 220b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("c:\\"), FPL("\\") }, 221b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("c:\\\\"), FPL("\\\\") }, 222b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("c:\\\\\\"), FPL("\\") }, 223b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("c:\\aa"), FPL("aa") }, 224b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("c:\\aa\\"), FPL("aa") }, 225b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("c:\\aa\\bb"), FPL("bb") }, 226b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("c:aa\\bb"), FPL("bb") }, 227b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#endif // FILE_PATH_USES_DRIVE_LETTERS 228b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#endif // FILE_PATH_USES_WIN_SEPARATORS 229b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat }; 230b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 231b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat for (size_t i = 0; i < arraysize(cases); ++i) { 232b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat FilePath input(cases[i].input); 233b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat FilePath observed = input.BaseName(); 234b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat EXPECT_EQ(FilePath::StringType(cases[i].expected), observed.value()) << 235b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat "i: " << i << ", input: " << input.value(); 236b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat } 237b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat} 238b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 239b8cf94937c52feb53b55c39e3f82094d27de464cDaniel EratTEST_F(FilePathTest, Append) { 240b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat const struct BinaryTestData cases[] = { 241b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL(""), FPL("cc") }, FPL("cc") }, 242b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("."), FPL("ff") }, FPL("ff") }, 243b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("/"), FPL("cc") }, FPL("/cc") }, 244b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("/aa"), FPL("") }, FPL("/aa") }, 245b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("/aa/"), FPL("") }, FPL("/aa") }, 246b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("//aa"), FPL("") }, FPL("//aa") }, 247b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("//aa/"), FPL("") }, FPL("//aa") }, 248b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("//"), FPL("aa") }, FPL("//aa") }, 249b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#if defined(FILE_PATH_USES_DRIVE_LETTERS) 250b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("c:"), FPL("a") }, FPL("c:a") }, 251b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("c:"), FPL("") }, FPL("c:") }, 252b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("c:/"), FPL("a") }, FPL("c:/a") }, 253b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("c://"), FPL("a") }, FPL("c://a") }, 254b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("c:///"), FPL("a") }, FPL("c:/a") }, 255b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#endif // FILE_PATH_USES_DRIVE_LETTERS 256b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#if defined(FILE_PATH_USES_WIN_SEPARATORS) 257b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat // Append introduces the default separator character, so these test cases 258b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat // need to be defined with different expected results on platforms that use 259b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat // different default separator characters. 260b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("\\"), FPL("cc") }, FPL("\\cc") }, 261b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("\\aa"), FPL("") }, FPL("\\aa") }, 262b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("\\aa\\"), FPL("") }, FPL("\\aa") }, 263b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("\\\\aa"), FPL("") }, FPL("\\\\aa") }, 264b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("\\\\aa\\"), FPL("") }, FPL("\\\\aa") }, 265b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("\\\\"), FPL("aa") }, FPL("\\\\aa") }, 266b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("/aa/bb"), FPL("cc") }, FPL("/aa/bb\\cc") }, 267b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("/aa/bb/"), FPL("cc") }, FPL("/aa/bb\\cc") }, 268b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("aa/bb/"), FPL("cc") }, FPL("aa/bb\\cc") }, 269b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("aa/bb"), FPL("cc") }, FPL("aa/bb\\cc") }, 270b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("a/b"), FPL("c") }, FPL("a/b\\c") }, 271b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("a/b/"), FPL("c") }, FPL("a/b\\c") }, 272b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("//aa"), FPL("bb") }, FPL("//aa\\bb") }, 273b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("//aa/"), FPL("bb") }, FPL("//aa\\bb") }, 274b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("\\aa\\bb"), FPL("cc") }, FPL("\\aa\\bb\\cc") }, 275b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("\\aa\\bb\\"), FPL("cc") }, FPL("\\aa\\bb\\cc") }, 276b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("aa\\bb\\"), FPL("cc") }, FPL("aa\\bb\\cc") }, 277b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("aa\\bb"), FPL("cc") }, FPL("aa\\bb\\cc") }, 278b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("a\\b"), FPL("c") }, FPL("a\\b\\c") }, 279b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("a\\b\\"), FPL("c") }, FPL("a\\b\\c") }, 280b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("\\\\aa"), FPL("bb") }, FPL("\\\\aa\\bb") }, 281b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("\\\\aa\\"), FPL("bb") }, FPL("\\\\aa\\bb") }, 282b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#if defined(FILE_PATH_USES_DRIVE_LETTERS) 283b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("c:\\"), FPL("a") }, FPL("c:\\a") }, 284b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("c:\\\\"), FPL("a") }, FPL("c:\\\\a") }, 285b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("c:\\\\\\"), FPL("a") }, FPL("c:\\a") }, 286b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("c:\\"), FPL("") }, FPL("c:\\") }, 287b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("c:\\a"), FPL("b") }, FPL("c:\\a\\b") }, 288b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("c:\\a\\"), FPL("b") }, FPL("c:\\a\\b") }, 289b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#endif // FILE_PATH_USES_DRIVE_LETTERS 290b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#else // FILE_PATH_USES_WIN_SEPARATORS 291b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("/aa/bb"), FPL("cc") }, FPL("/aa/bb/cc") }, 292b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("/aa/bb/"), FPL("cc") }, FPL("/aa/bb/cc") }, 293b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("aa/bb/"), FPL("cc") }, FPL("aa/bb/cc") }, 294b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("aa/bb"), FPL("cc") }, FPL("aa/bb/cc") }, 295b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("a/b"), FPL("c") }, FPL("a/b/c") }, 296b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("a/b/"), FPL("c") }, FPL("a/b/c") }, 297b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("//aa"), FPL("bb") }, FPL("//aa/bb") }, 298b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("//aa/"), FPL("bb") }, FPL("//aa/bb") }, 299b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#if defined(FILE_PATH_USES_DRIVE_LETTERS) 300b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("c:/"), FPL("a") }, FPL("c:/a") }, 301b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("c:/"), FPL("") }, FPL("c:/") }, 302b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("c:/a"), FPL("b") }, FPL("c:/a/b") }, 303b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("c:/a/"), FPL("b") }, FPL("c:/a/b") }, 304b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#endif // FILE_PATH_USES_DRIVE_LETTERS 305b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#endif // FILE_PATH_USES_WIN_SEPARATORS 306b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat }; 307b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 308b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat for (size_t i = 0; i < arraysize(cases); ++i) { 309b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat FilePath root(cases[i].inputs[0]); 310b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat FilePath::StringType leaf(cases[i].inputs[1]); 311b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat FilePath observed_str = root.Append(leaf); 312b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat EXPECT_EQ(FilePath::StringType(cases[i].expected), observed_str.value()) << 313b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat "i: " << i << ", root: " << root.value() << ", leaf: " << leaf; 314b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat FilePath observed_path = root.Append(FilePath(leaf)); 315b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat EXPECT_EQ(FilePath::StringType(cases[i].expected), observed_path.value()) << 316b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat "i: " << i << ", root: " << root.value() << ", leaf: " << leaf; 317b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 318b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat // TODO(erikkay): It would be nice to have a unicode test append value to 319b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat // handle the case when AppendASCII is passed UTF8 320b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#if defined(OS_WIN) 321b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat std::string ascii = WideToUTF8(leaf); 322b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#elif defined(OS_POSIX) 323b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat std::string ascii = leaf; 324b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#endif 325b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat observed_str = root.AppendASCII(ascii); 326b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat EXPECT_EQ(FilePath::StringType(cases[i].expected), observed_str.value()) << 327b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat "i: " << i << ", root: " << root.value() << ", leaf: " << leaf; 328b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat } 329b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat} 330b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 331b8cf94937c52feb53b55c39e3f82094d27de464cDaniel EratTEST_F(FilePathTest, StripTrailingSeparators) { 332b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat const struct UnaryTestData cases[] = { 333b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL(""), FPL("") }, 334b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("/"), FPL("/") }, 335b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("//"), FPL("//") }, 336b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("///"), FPL("/") }, 337b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("////"), FPL("/") }, 338b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("a/"), FPL("a") }, 339b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("a//"), FPL("a") }, 340b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("a///"), FPL("a") }, 341b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("a////"), FPL("a") }, 342b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("/a"), FPL("/a") }, 343b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("/a/"), FPL("/a") }, 344b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("/a//"), FPL("/a") }, 345b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("/a///"), FPL("/a") }, 346b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("/a////"), FPL("/a") }, 347b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#if defined(FILE_PATH_USES_DRIVE_LETTERS) 348b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("c:"), FPL("c:") }, 349b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("c:/"), FPL("c:/") }, 350b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("c://"), FPL("c://") }, 351b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("c:///"), FPL("c:/") }, 352b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("c:////"), FPL("c:/") }, 353b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("c:/a"), FPL("c:/a") }, 354b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("c:/a/"), FPL("c:/a") }, 355b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("c:/a//"), FPL("c:/a") }, 356b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("c:/a///"), FPL("c:/a") }, 357b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("c:/a////"), FPL("c:/a") }, 358b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#endif // FILE_PATH_USES_DRIVE_LETTERS 359b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#if defined(FILE_PATH_USES_WIN_SEPARATORS) 360b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("\\"), FPL("\\") }, 361b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("\\\\"), FPL("\\\\") }, 362b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("\\\\\\"), FPL("\\") }, 363b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("\\\\\\\\"), FPL("\\") }, 364b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("a\\"), FPL("a") }, 365b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("a\\\\"), FPL("a") }, 366b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("a\\\\\\"), FPL("a") }, 367b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("a\\\\\\\\"), FPL("a") }, 368b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("\\a"), FPL("\\a") }, 369b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("\\a\\"), FPL("\\a") }, 370b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("\\a\\\\"), FPL("\\a") }, 371b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("\\a\\\\\\"), FPL("\\a") }, 372b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("\\a\\\\\\\\"), FPL("\\a") }, 373b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#if defined(FILE_PATH_USES_DRIVE_LETTERS) 374b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("c:\\"), FPL("c:\\") }, 375b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("c:\\\\"), FPL("c:\\\\") }, 376b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("c:\\\\\\"), FPL("c:\\") }, 377b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("c:\\\\\\\\"), FPL("c:\\") }, 378b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("c:\\a"), FPL("c:\\a") }, 379b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("c:\\a\\"), FPL("c:\\a") }, 380b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("c:\\a\\\\"), FPL("c:\\a") }, 381b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("c:\\a\\\\\\"), FPL("c:\\a") }, 382b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("c:\\a\\\\\\\\"), FPL("c:\\a") }, 383b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#endif // FILE_PATH_USES_DRIVE_LETTERS 384b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#endif // FILE_PATH_USES_WIN_SEPARATORS 385b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat }; 386b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 387b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat for (size_t i = 0; i < arraysize(cases); ++i) { 388b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat FilePath input(cases[i].input); 389b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat FilePath observed = input.StripTrailingSeparators(); 390b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat EXPECT_EQ(FilePath::StringType(cases[i].expected), observed.value()) << 391b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat "i: " << i << ", input: " << input.value(); 392b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat } 393b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat} 394b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 395b8cf94937c52feb53b55c39e3f82094d27de464cDaniel EratTEST_F(FilePathTest, IsAbsolute) { 396b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat const struct UnaryBooleanTestData cases[] = { 397b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL(""), false }, 398b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("a"), false }, 399b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("c:"), false }, 400b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("c:a"), false }, 401b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("a/b"), false }, 402b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("//"), true }, 403b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("//a"), true }, 404b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("c:a/b"), false }, 405b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("?:/a"), false }, 406b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#if defined(FILE_PATH_USES_DRIVE_LETTERS) 407b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("/"), false }, 408b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("/a"), false }, 409b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("/."), false }, 410b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("/.."), false }, 411b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("c:/"), true }, 412b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("c:/a"), true }, 413b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("c:/."), true }, 414b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("c:/.."), true }, 415b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("C:/a"), true }, 416b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("d:/a"), true }, 417b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#else // FILE_PATH_USES_DRIVE_LETTERS 418b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("/"), true }, 419b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("/a"), true }, 420b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("/."), true }, 421b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("/.."), true }, 422b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("c:/"), false }, 423b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#endif // FILE_PATH_USES_DRIVE_LETTERS 424b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#if defined(FILE_PATH_USES_WIN_SEPARATORS) 425b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("a\\b"), false }, 426b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("\\\\"), true }, 427b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("\\\\a"), true }, 428b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("a\\b"), false }, 429b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("\\\\"), true }, 430b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("//a"), true }, 431b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("c:a\\b"), false }, 432b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("?:\\a"), false }, 433b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#if defined(FILE_PATH_USES_DRIVE_LETTERS) 434b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("\\"), false }, 435b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("\\a"), false }, 436b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("\\."), false }, 437b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("\\.."), false }, 438b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("c:\\"), true }, 439b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("c:\\"), true }, 440b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("c:\\a"), true }, 441b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("c:\\."), true }, 442b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("c:\\.."), true }, 443b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("C:\\a"), true }, 444b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("d:\\a"), true }, 445b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#else // FILE_PATH_USES_DRIVE_LETTERS 446b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("\\"), true }, 447b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("\\a"), true }, 448b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("\\."), true }, 449b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("\\.."), true }, 450b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("c:\\"), false }, 451b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#endif // FILE_PATH_USES_DRIVE_LETTERS 452b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#endif // FILE_PATH_USES_WIN_SEPARATORS 453b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat }; 454b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 455b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat for (size_t i = 0; i < arraysize(cases); ++i) { 456b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat FilePath input(cases[i].input); 457b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat bool observed = input.IsAbsolute(); 458b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat EXPECT_EQ(cases[i].expected, observed) << 459b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat "i: " << i << ", input: " << input.value(); 460b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat } 461b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat} 462b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 463b8cf94937c52feb53b55c39e3f82094d27de464cDaniel EratTEST_F(FilePathTest, PathComponentsTest) { 464b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat const struct UnaryTestData cases[] = { 465b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("//foo/bar/baz/"), FPL("|//|foo|bar|baz")}, 466b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("///"), FPL("|/")}, 467b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("/foo//bar//baz/"), FPL("|/|foo|bar|baz")}, 468b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("/foo/bar/baz/"), FPL("|/|foo|bar|baz")}, 469b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("/foo/bar/baz//"), FPL("|/|foo|bar|baz")}, 470b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("/foo/bar/baz///"), FPL("|/|foo|bar|baz")}, 471b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("/foo/bar/baz"), FPL("|/|foo|bar|baz")}, 472b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("/foo/bar.bot/baz.txt"), FPL("|/|foo|bar.bot|baz.txt")}, 473b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("//foo//bar/baz"), FPL("|//|foo|bar|baz")}, 474b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("/"), FPL("|/")}, 475b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("foo"), FPL("|foo")}, 476b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL(""), FPL("")}, 477b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#if defined(FILE_PATH_USES_DRIVE_LETTERS) 478b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("e:/foo"), FPL("|e:|/|foo")}, 479b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("e:/"), FPL("|e:|/")}, 480b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("e:"), FPL("|e:")}, 481b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#endif // FILE_PATH_USES_DRIVE_LETTERS 482b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#if defined(FILE_PATH_USES_WIN_SEPARATORS) 483b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("../foo"), FPL("|..|foo")}, 484b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("./foo"), FPL("|foo")}, 485b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("../foo/bar/"), FPL("|..|foo|bar") }, 486b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("\\\\foo\\bar\\baz\\"), FPL("|\\\\|foo|bar|baz")}, 487b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("\\\\\\"), FPL("|\\")}, 488b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("\\foo\\\\bar\\\\baz\\"), FPL("|\\|foo|bar|baz")}, 489b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("\\foo\\bar\\baz\\"), FPL("|\\|foo|bar|baz")}, 490b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("\\foo\\bar\\baz\\\\"), FPL("|\\|foo|bar|baz")}, 491b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("\\foo\\bar\\baz\\\\\\"), FPL("|\\|foo|bar|baz")}, 492b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("\\foo\\bar\\baz"), FPL("|\\|foo|bar|baz")}, 493b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("\\foo\\bar/baz\\\\\\"), FPL("|\\|foo|bar|baz")}, 494b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("/foo\\bar\\baz"), FPL("|/|foo|bar|baz")}, 495b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("\\foo\\bar.bot\\baz.txt"), FPL("|\\|foo|bar.bot|baz.txt")}, 496b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("\\\\foo\\\\bar\\baz"), FPL("|\\\\|foo|bar|baz")}, 497b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("\\"), FPL("|\\")}, 498b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#endif // FILE_PATH_USES_WIN_SEPARATORS 499b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat }; 500b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 501b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat for (size_t i = 0; i < arraysize(cases); ++i) { 502b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat FilePath input(cases[i].input); 503b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat std::vector<FilePath::StringType> comps; 504b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat input.GetComponents(&comps); 505b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 506b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat FilePath::StringType observed; 507b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat for (size_t j = 0; j < comps.size(); ++j) { 508b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat observed.append(FILE_PATH_LITERAL("|"), 1); 509b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat observed.append(comps[j]); 510b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat } 511b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat EXPECT_EQ(FilePath::StringType(cases[i].expected), observed) << 512b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat "i: " << i << ", input: " << input.value(); 513b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat } 514b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat} 515b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 516b8cf94937c52feb53b55c39e3f82094d27de464cDaniel EratTEST_F(FilePathTest, IsParentTest) { 517b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat const struct BinaryBooleanTestData cases[] = { 518b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("/"), FPL("/foo/bar/baz") }, true}, 519b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("/foo/bar"), FPL("/foo/bar/baz") }, true}, 520b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("/foo/bar/"), FPL("/foo/bar/baz") }, true}, 521b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("//foo/bar/"), FPL("//foo/bar/baz") }, true}, 522b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("/foo/bar"), FPL("/foo2/bar/baz") }, false}, 523b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("/foo/bar.txt"), FPL("/foo/bar/baz") }, false}, 524b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("/foo/bar"), FPL("/foo/bar2/baz") }, false}, 525b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("/foo/bar"), FPL("/foo/bar") }, false}, 526b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("/foo/bar/baz"), FPL("/foo/bar") }, false}, 527b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("foo/bar"), FPL("foo/bar/baz") }, true}, 528b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("foo/bar"), FPL("foo2/bar/baz") }, false}, 529b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("foo/bar"), FPL("foo/bar2/baz") }, false}, 530b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL(""), FPL("foo") }, false}, 531b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#if defined(FILE_PATH_USES_DRIVE_LETTERS) 532b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("c:/foo/bar"), FPL("c:/foo/bar/baz") }, true}, 533b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("E:/foo/bar"), FPL("e:/foo/bar/baz") }, true}, 534b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("f:/foo/bar"), FPL("F:/foo/bar/baz") }, true}, 535b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("E:/Foo/bar"), FPL("e:/foo/bar/baz") }, false}, 536b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("f:/foo/bar"), FPL("F:/foo/Bar/baz") }, false}, 537b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("c:/"), FPL("c:/foo/bar/baz") }, true}, 538b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("c:"), FPL("c:/foo/bar/baz") }, true}, 539b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("c:/foo/bar"), FPL("d:/foo/bar/baz") }, false}, 540b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("c:/foo/bar"), FPL("D:/foo/bar/baz") }, false}, 541b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("C:/foo/bar"), FPL("d:/foo/bar/baz") }, false}, 542b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("c:/foo/bar"), FPL("c:/foo2/bar/baz") }, false}, 543b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("e:/foo/bar"), FPL("E:/foo2/bar/baz") }, false}, 544b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("F:/foo/bar"), FPL("f:/foo2/bar/baz") }, false}, 545b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("c:/foo/bar"), FPL("c:/foo/bar2/baz") }, false}, 546b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#endif // FILE_PATH_USES_DRIVE_LETTERS 547b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#if defined(FILE_PATH_USES_WIN_SEPARATORS) 548b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("\\foo\\bar"), FPL("\\foo\\bar\\baz") }, true}, 549b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("\\foo/bar"), FPL("\\foo\\bar\\baz") }, true}, 550b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("\\foo/bar"), FPL("\\foo/bar/baz") }, true}, 551b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("\\"), FPL("\\foo\\bar\\baz") }, true}, 552b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL(""), FPL("\\foo\\bar\\baz") }, false}, 553b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("\\foo\\bar"), FPL("\\foo2\\bar\\baz") }, false}, 554b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("\\foo\\bar"), FPL("\\foo\\bar2\\baz") }, false}, 555b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#endif // FILE_PATH_USES_WIN_SEPARATORS 556b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat }; 557b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 558b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat for (size_t i = 0; i < arraysize(cases); ++i) { 559b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat FilePath parent(cases[i].inputs[0]); 560b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat FilePath child(cases[i].inputs[1]); 561b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 562b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat EXPECT_EQ(parent.IsParent(child), cases[i].expected) << 563b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat "i: " << i << ", parent: " << parent.value() << ", child: " << 564b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat child.value(); 565b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat } 566b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat} 567b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 568b8cf94937c52feb53b55c39e3f82094d27de464cDaniel EratTEST_F(FilePathTest, AppendRelativePathTest) { 569b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat const struct BinaryTestData cases[] = { 570b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#if defined(FILE_PATH_USES_WIN_SEPARATORS) 571b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("/"), FPL("/foo/bar/baz") }, FPL("foo\\bar\\baz")}, 572b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#else // FILE_PATH_USES_WIN_SEPARATORS 573b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("/"), FPL("/foo/bar/baz") }, FPL("foo/bar/baz")}, 574b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#endif // FILE_PATH_USES_WIN_SEPARATORS 575b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("/foo/bar"), FPL("/foo/bar/baz") }, FPL("baz")}, 576b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("/foo/bar/"), FPL("/foo/bar/baz") }, FPL("baz")}, 577b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("//foo/bar/"), FPL("//foo/bar/baz") }, FPL("baz")}, 578b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("/foo/bar"), FPL("/foo2/bar/baz") }, FPL("")}, 579b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("/foo/bar.txt"), FPL("/foo/bar/baz") }, FPL("")}, 580b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("/foo/bar"), FPL("/foo/bar2/baz") }, FPL("")}, 581b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("/foo/bar"), FPL("/foo/bar") }, FPL("")}, 582b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("/foo/bar/baz"), FPL("/foo/bar") }, FPL("")}, 583b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("foo/bar"), FPL("foo/bar/baz") }, FPL("baz")}, 584b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("foo/bar"), FPL("foo2/bar/baz") }, FPL("")}, 585b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("foo/bar"), FPL("foo/bar2/baz") }, FPL("")}, 586b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL(""), FPL("foo") }, FPL("")}, 587b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#if defined(FILE_PATH_USES_DRIVE_LETTERS) 588b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("c:/foo/bar"), FPL("c:/foo/bar/baz") }, FPL("baz")}, 589b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("E:/foo/bar"), FPL("e:/foo/bar/baz") }, FPL("baz")}, 590b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("f:/foo/bar"), FPL("F:/foo/bar/baz") }, FPL("baz")}, 591b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("E:/Foo/bar"), FPL("e:/foo/bar/baz") }, FPL("")}, 592b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("f:/foo/bar"), FPL("F:/foo/Bar/baz") }, FPL("")}, 593b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#if defined(FILE_PATH_USES_WIN_SEPARATORS) 594b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("c:/"), FPL("c:/foo/bar/baz") }, FPL("foo\\bar\\baz")}, 595b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat // TODO(akalin): Figure out how to handle the corner case in the 596b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat // commented-out test case below. Appending to an empty path gives 597b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat // /foo\bar\baz but appending to a nonempty path "blah" gives 598b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat // blah\foo\bar\baz. 599b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat // { { FPL("c:"), FPL("c:/foo/bar/baz") }, FPL("foo\\bar\\baz")}, 600b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#endif // FILE_PATH_USES_WIN_SEPARATORS 601b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("c:/foo/bar"), FPL("d:/foo/bar/baz") }, FPL("")}, 602b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("c:/foo/bar"), FPL("D:/foo/bar/baz") }, FPL("")}, 603b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("C:/foo/bar"), FPL("d:/foo/bar/baz") }, FPL("")}, 604b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("c:/foo/bar"), FPL("c:/foo2/bar/baz") }, FPL("")}, 605b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("e:/foo/bar"), FPL("E:/foo2/bar/baz") }, FPL("")}, 606b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("F:/foo/bar"), FPL("f:/foo2/bar/baz") }, FPL("")}, 607b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("c:/foo/bar"), FPL("c:/foo/bar2/baz") }, FPL("")}, 608b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#endif // FILE_PATH_USES_DRIVE_LETTERS 609b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#if defined(FILE_PATH_USES_WIN_SEPARATORS) 610b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("\\foo\\bar"), FPL("\\foo\\bar\\baz") }, FPL("baz")}, 611b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("\\foo/bar"), FPL("\\foo\\bar\\baz") }, FPL("baz")}, 612b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("\\foo/bar"), FPL("\\foo/bar/baz") }, FPL("baz")}, 613b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("\\"), FPL("\\foo\\bar\\baz") }, FPL("foo\\bar\\baz")}, 614b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL(""), FPL("\\foo\\bar\\baz") }, FPL("")}, 615b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("\\foo\\bar"), FPL("\\foo2\\bar\\baz") }, FPL("")}, 616b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("\\foo\\bar"), FPL("\\foo\\bar2\\baz") }, FPL("")}, 617b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#endif // FILE_PATH_USES_WIN_SEPARATORS 618b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat }; 619b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 620b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat const FilePath base(FPL("blah")); 621b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 622b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat for (size_t i = 0; i < arraysize(cases); ++i) { 623b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat FilePath parent(cases[i].inputs[0]); 624b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat FilePath child(cases[i].inputs[1]); 625b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { 626b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat FilePath result; 627b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat bool success = parent.AppendRelativePath(child, &result); 628b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat EXPECT_EQ(cases[i].expected[0] != '\0', success) << 629b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat "i: " << i << ", parent: " << parent.value() << ", child: " << 630b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat child.value(); 631b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat EXPECT_STREQ(cases[i].expected, result.value().c_str()) << 632b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat "i: " << i << ", parent: " << parent.value() << ", child: " << 633b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat child.value(); 634b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat } 635b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { 636b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat FilePath result(base); 637b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat bool success = parent.AppendRelativePath(child, &result); 638b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat EXPECT_EQ(cases[i].expected[0] != '\0', success) << 639b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat "i: " << i << ", parent: " << parent.value() << ", child: " << 640b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat child.value(); 641b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat EXPECT_EQ(base.Append(cases[i].expected).value(), result.value()) << 642b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat "i: " << i << ", parent: " << parent.value() << ", child: " << 643b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat child.value(); 644b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat } 645b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat } 646b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat} 647b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 648b8cf94937c52feb53b55c39e3f82094d27de464cDaniel EratTEST_F(FilePathTest, EqualityTest) { 649b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat const struct BinaryBooleanTestData cases[] = { 650b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("/foo/bar/baz"), FPL("/foo/bar/baz") }, true}, 651b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("/foo/bar"), FPL("/foo/bar/baz") }, false}, 652b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("/foo/bar/baz"), FPL("/foo/bar") }, false}, 653b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("//foo/bar/"), FPL("//foo/bar/") }, true}, 654b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("/foo/bar"), FPL("/foo2/bar") }, false}, 655b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("/foo/bar.txt"), FPL("/foo/bar") }, false}, 656b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("foo/bar"), FPL("foo/bar") }, true}, 657b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("foo/bar"), FPL("foo/bar/baz") }, false}, 658b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL(""), FPL("foo") }, false}, 659b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#if defined(FILE_PATH_USES_DRIVE_LETTERS) 660b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("c:/foo/bar"), FPL("c:/foo/bar") }, true}, 661b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("E:/foo/bar"), FPL("e:/foo/bar") }, true}, 662b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("f:/foo/bar"), FPL("F:/foo/bar") }, true}, 663b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("E:/Foo/bar"), FPL("e:/foo/bar") }, false}, 664b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("f:/foo/bar"), FPL("F:/foo/Bar") }, false}, 665b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("c:/"), FPL("c:/") }, true}, 666b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("c:"), FPL("c:") }, true}, 667b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("c:/foo/bar"), FPL("d:/foo/bar") }, false}, 668b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("c:/foo/bar"), FPL("D:/foo/bar") }, false}, 669b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("C:/foo/bar"), FPL("d:/foo/bar") }, false}, 670b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("c:/foo/bar"), FPL("c:/foo2/bar") }, false}, 671b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#endif // FILE_PATH_USES_DRIVE_LETTERS 672b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#if defined(FILE_PATH_USES_WIN_SEPARATORS) 673b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("\\foo\\bar"), FPL("\\foo\\bar") }, true}, 674b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("\\foo/bar"), FPL("\\foo/bar") }, true}, 675b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("\\foo/bar"), FPL("\\foo\\bar") }, false}, 676b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("\\"), FPL("\\") }, true}, 677b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("\\"), FPL("/") }, false}, 678b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL(""), FPL("\\") }, false}, 679b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("\\foo\\bar"), FPL("\\foo2\\bar") }, false}, 680b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("\\foo\\bar"), FPL("\\foo\\bar2") }, false}, 681b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#if defined(FILE_PATH_USES_DRIVE_LETTERS) 682b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("c:\\foo\\bar"), FPL("c:\\foo\\bar") }, true}, 683b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("E:\\foo\\bar"), FPL("e:\\foo\\bar") }, true}, 684b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("f:\\foo\\bar"), FPL("F:\\foo/bar") }, false}, 685b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#endif // FILE_PATH_USES_DRIVE_LETTERS 686b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#endif // FILE_PATH_USES_WIN_SEPARATORS 687b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat }; 688b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 689b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat for (size_t i = 0; i < arraysize(cases); ++i) { 690b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat FilePath a(cases[i].inputs[0]); 691b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat FilePath b(cases[i].inputs[1]); 692b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 693b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat EXPECT_EQ(a == b, cases[i].expected) << 694b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat "equality i: " << i << ", a: " << a.value() << ", b: " << 695b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat b.value(); 696b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat } 697b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 698b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat for (size_t i = 0; i < arraysize(cases); ++i) { 699b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat FilePath a(cases[i].inputs[0]); 700b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat FilePath b(cases[i].inputs[1]); 701b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 702b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat EXPECT_EQ(a != b, !cases[i].expected) << 703b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat "inequality i: " << i << ", a: " << a.value() << ", b: " << 704b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat b.value(); 705b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat } 706b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat} 707b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 708b8cf94937c52feb53b55c39e3f82094d27de464cDaniel EratTEST_F(FilePathTest, Extension) { 709b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat FilePath base_dir(FILE_PATH_LITERAL("base_dir")); 710b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 711b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat FilePath jpg = base_dir.Append(FILE_PATH_LITERAL("foo.jpg")); 712b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat EXPECT_EQ(FILE_PATH_LITERAL(".jpg"), jpg.Extension()); 713b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat EXPECT_EQ(FILE_PATH_LITERAL(".jpg"), jpg.FinalExtension()); 714b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 715b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat FilePath base = jpg.BaseName().RemoveExtension(); 716b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat EXPECT_EQ(FILE_PATH_LITERAL("foo"), base.value()); 717b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 718b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat FilePath path_no_ext = base_dir.Append(base); 719b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat EXPECT_EQ(path_no_ext.value(), jpg.RemoveExtension().value()); 720b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 721b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat EXPECT_EQ(path_no_ext.value(), path_no_ext.RemoveExtension().value()); 722b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat EXPECT_EQ(FILE_PATH_LITERAL(""), path_no_ext.Extension()); 723b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat EXPECT_EQ(FILE_PATH_LITERAL(""), path_no_ext.FinalExtension()); 724b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat} 725b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 726b8cf94937c52feb53b55c39e3f82094d27de464cDaniel EratTEST_F(FilePathTest, Extension2) { 727b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat const struct UnaryTestData cases[] = { 728b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#if defined(FILE_PATH_USES_WIN_SEPARATORS) 729b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("C:\\a\\b\\c.ext"), FPL(".ext") }, 730b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("C:\\a\\b\\c."), FPL(".") }, 731b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("C:\\a\\b\\c"), FPL("") }, 732b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("C:\\a\\b\\"), FPL("") }, 733b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("C:\\a\\b.\\"), FPL(".") }, 734b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("C:\\a\\b\\c.ext1.ext2"), FPL(".ext2") }, 735b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("C:\\foo.bar\\\\\\"), FPL(".bar") }, 736b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("C:\\foo.bar\\.."), FPL("") }, 737b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("C:\\foo.bar\\..\\\\"), FPL("") }, 738b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#endif 739b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("/foo/bar/baz.ext"), FPL(".ext") }, 740b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("/foo/bar/baz."), FPL(".") }, 741b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("/foo/bar/baz.."), FPL(".") }, 742b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("/foo/bar/baz"), FPL("") }, 743b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("/foo/bar/"), FPL("") }, 744b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("/foo/bar./"), FPL(".") }, 745b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("/foo/bar/baz.ext1.ext2"), FPL(".ext2") }, 746b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("/subversion-1.6.12.zip"), FPL(".zip") }, 747b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("/foo.12345.gz"), FPL(".gz") }, 748b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("/foo..gz"), FPL(".gz") }, 749b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("."), FPL("") }, 750b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL(".."), FPL("") }, 751b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("./foo"), FPL("") }, 752b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("./foo.ext"), FPL(".ext") }, 753b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("/foo.ext1/bar.ext2"), FPL(".ext2") }, 754b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("/foo.bar////"), FPL(".bar") }, 755b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("/foo.bar/.."), FPL("") }, 756b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("/foo.bar/..////"), FPL("") }, 757b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("/foo.1234.luser.js"), FPL(".js") }, 758b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("/user.js"), FPL(".js") }, 759b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat }; 760b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat const struct UnaryTestData double_extension_cases[] = { 761b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("/foo.tar.gz"), FPL(".tar.gz") }, 762b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("/foo.tar.Z"), FPL(".tar.Z") }, 763b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("/foo.tar.bz2"), FPL(".tar.bz2") }, 764b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("/foo.1234.gz"), FPL(".1234.gz") }, 765b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("/foo.1234.tar.gz"), FPL(".tar.gz") }, 766b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("/foo.tar.tar.gz"), FPL(".tar.gz") }, 767b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("/foo.tar.gz.gz"), FPL(".gz.gz") }, 768b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("/foo.1234.user.js"), FPL(".user.js") }, 769b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("foo.user.js"), FPL(".user.js") }, 770b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("/foo.tar.bz"), FPL(".tar.bz") }, 771b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat }; 772b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat for (unsigned int i = 0; i < arraysize(cases); ++i) { 773b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat FilePath path(cases[i].input); 774b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat FilePath::StringType extension = path.Extension(); 775b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat FilePath::StringType final_extension = path.FinalExtension(); 776b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat EXPECT_STREQ(cases[i].expected, extension.c_str()) 777b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat << "i: " << i << ", path: " << path.value(); 778b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat EXPECT_STREQ(cases[i].expected, final_extension.c_str()) 779b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat << "i: " << i << ", path: " << path.value(); 780b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat } 781b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat for (unsigned int i = 0; i < arraysize(double_extension_cases); ++i) { 782b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat FilePath path(double_extension_cases[i].input); 783b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat FilePath::StringType extension = path.Extension(); 784b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat EXPECT_STREQ(double_extension_cases[i].expected, extension.c_str()) 785b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat << "i: " << i << ", path: " << path.value(); 786b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat } 787b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat} 788b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 789b8cf94937c52feb53b55c39e3f82094d27de464cDaniel EratTEST_F(FilePathTest, InsertBeforeExtension) { 790b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat const struct BinaryTestData cases[] = { 791b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL(""), FPL("") }, FPL("") }, 792b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL(""), FPL("txt") }, FPL("") }, 793b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("."), FPL("txt") }, FPL("") }, 794b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL(".."), FPL("txt") }, FPL("") }, 795b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("foo.dll"), FPL("txt") }, FPL("footxt.dll") }, 796b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("."), FPL("") }, FPL(".") }, 797b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("foo.dll"), FPL(".txt") }, FPL("foo.txt.dll") }, 798b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("foo"), FPL("txt") }, FPL("footxt") }, 799b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("foo"), FPL(".txt") }, FPL("foo.txt") }, 800b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("foo.baz.dll"), FPL("txt") }, FPL("foo.baztxt.dll") }, 801b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("foo.baz.dll"), FPL(".txt") }, FPL("foo.baz.txt.dll") }, 802b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("foo.dll"), FPL("") }, FPL("foo.dll") }, 803b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("foo.dll"), FPL(".") }, FPL("foo..dll") }, 804b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("foo"), FPL("") }, FPL("foo") }, 805b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("foo"), FPL(".") }, FPL("foo.") }, 806b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("foo.baz.dll"), FPL("") }, FPL("foo.baz.dll") }, 807b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("foo.baz.dll"), FPL(".") }, FPL("foo.baz..dll") }, 808b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#if defined(FILE_PATH_USES_WIN_SEPARATORS) 809b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("\\"), FPL("") }, FPL("\\") }, 810b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("\\"), FPL("txt") }, FPL("\\txt") }, 811b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("\\."), FPL("txt") }, FPL("") }, 812b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("\\.."), FPL("txt") }, FPL("") }, 813b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("\\."), FPL("") }, FPL("\\.") }, 814b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("C:\\bar\\foo.dll"), FPL("txt") }, 815b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat FPL("C:\\bar\\footxt.dll") }, 816b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("C:\\bar.baz\\foodll"), FPL("txt") }, 817b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat FPL("C:\\bar.baz\\foodlltxt") }, 818b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("C:\\bar.baz\\foo.dll"), FPL("txt") }, 819b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat FPL("C:\\bar.baz\\footxt.dll") }, 820b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("C:\\bar.baz\\foo.dll.exe"), FPL("txt") }, 821b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat FPL("C:\\bar.baz\\foo.dlltxt.exe") }, 822b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("C:\\bar.baz\\foo"), FPL("") }, 823b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat FPL("C:\\bar.baz\\foo") }, 824b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("C:\\bar.baz\\foo.exe"), FPL("") }, 825b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat FPL("C:\\bar.baz\\foo.exe") }, 826b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("C:\\bar.baz\\foo.dll.exe"), FPL("") }, 827b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat FPL("C:\\bar.baz\\foo.dll.exe") }, 828b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("C:\\bar\\baz\\foo.exe"), FPL(" (1)") }, 829b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat FPL("C:\\bar\\baz\\foo (1).exe") }, 830b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("C:\\foo.baz\\\\"), FPL(" (1)") }, FPL("C:\\foo (1).baz") }, 831b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("C:\\foo.baz\\..\\"), FPL(" (1)") }, FPL("") }, 832b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#endif 833b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("/"), FPL("") }, FPL("/") }, 834b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("/"), FPL("txt") }, FPL("/txt") }, 835b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("/."), FPL("txt") }, FPL("") }, 836b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("/.."), FPL("txt") }, FPL("") }, 837b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("/."), FPL("") }, FPL("/.") }, 838b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("/bar/foo.dll"), FPL("txt") }, FPL("/bar/footxt.dll") }, 839b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("/bar.baz/foodll"), FPL("txt") }, FPL("/bar.baz/foodlltxt") }, 840b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("/bar.baz/foo.dll"), FPL("txt") }, FPL("/bar.baz/footxt.dll") }, 841b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("/bar.baz/foo.dll.exe"), FPL("txt") }, 842b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat FPL("/bar.baz/foo.dlltxt.exe") }, 843b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("/bar.baz/foo"), FPL("") }, FPL("/bar.baz/foo") }, 844b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("/bar.baz/foo.exe"), FPL("") }, FPL("/bar.baz/foo.exe") }, 845b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("/bar.baz/foo.dll.exe"), FPL("") }, FPL("/bar.baz/foo.dll.exe") }, 846b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("/bar/baz/foo.exe"), FPL(" (1)") }, FPL("/bar/baz/foo (1).exe") }, 847b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("/bar/baz/..////"), FPL(" (1)") }, FPL("") }, 848b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat }; 849b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat for (unsigned int i = 0; i < arraysize(cases); ++i) { 850b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat FilePath path(cases[i].inputs[0]); 851b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat FilePath result = path.InsertBeforeExtension(cases[i].inputs[1]); 852b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat EXPECT_EQ(cases[i].expected, result.value()) << "i: " << i << 853b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat ", path: " << path.value() << ", insert: " << cases[i].inputs[1]; 854b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat } 855b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat} 856b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 857b8cf94937c52feb53b55c39e3f82094d27de464cDaniel EratTEST_F(FilePathTest, RemoveExtension) { 858b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat const struct UnaryTestData cases[] = { 859b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL(""), FPL("") }, 860b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("."), FPL(".") }, 861b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL(".."), FPL("..") }, 862b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("foo.dll"), FPL("foo") }, 863b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("./foo.dll"), FPL("./foo") }, 864b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("foo..dll"), FPL("foo.") }, 865b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("foo"), FPL("foo") }, 866b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("foo."), FPL("foo") }, 867b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("foo.."), FPL("foo.") }, 868b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("foo.baz.dll"), FPL("foo.baz") }, 869b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#if defined(FILE_PATH_USES_WIN_SEPARATORS) 870b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("C:\\foo.bar\\foo"), FPL("C:\\foo.bar\\foo") }, 871b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("C:\\foo.bar\\..\\\\"), FPL("C:\\foo.bar\\..\\\\") }, 872b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#endif 873b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("/foo.bar/foo"), FPL("/foo.bar/foo") }, 874b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("/foo.bar/..////"), FPL("/foo.bar/..////") }, 875b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat }; 876b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat for (unsigned int i = 0; i < arraysize(cases); ++i) { 877b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat FilePath path(cases[i].input); 878b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat FilePath removed = path.RemoveExtension(); 879b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat FilePath removed_final = path.RemoveFinalExtension(); 880b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat EXPECT_EQ(cases[i].expected, removed.value()) << "i: " << i << 881b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat ", path: " << path.value(); 882b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat EXPECT_EQ(cases[i].expected, removed_final.value()) << "i: " << i << 883b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat ", path: " << path.value(); 884b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat } 885b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { 886b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat FilePath path(FPL("foo.tar.gz")); 887b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat FilePath removed = path.RemoveExtension(); 888b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat FilePath removed_final = path.RemoveFinalExtension(); 889b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat EXPECT_EQ(FPL("foo"), removed.value()) << ", path: " << path.value(); 890b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat EXPECT_EQ(FPL("foo.tar"), removed_final.value()) << ", path: " 891b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat << path.value(); 892b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat } 893b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat} 894b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 895b8cf94937c52feb53b55c39e3f82094d27de464cDaniel EratTEST_F(FilePathTest, ReplaceExtension) { 896b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat const struct BinaryTestData cases[] = { 897b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL(""), FPL("") }, FPL("") }, 898b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL(""), FPL("txt") }, FPL("") }, 899b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("."), FPL("txt") }, FPL("") }, 900b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL(".."), FPL("txt") }, FPL("") }, 901b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("."), FPL("") }, FPL("") }, 902b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("foo.dll"), FPL("txt") }, FPL("foo.txt") }, 903b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("./foo.dll"), FPL("txt") }, FPL("./foo.txt") }, 904b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("foo..dll"), FPL("txt") }, FPL("foo..txt") }, 905b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("foo.dll"), FPL(".txt") }, FPL("foo.txt") }, 906b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("foo"), FPL("txt") }, FPL("foo.txt") }, 907b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("foo."), FPL("txt") }, FPL("foo.txt") }, 908b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("foo.."), FPL("txt") }, FPL("foo..txt") }, 909b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("foo"), FPL(".txt") }, FPL("foo.txt") }, 910b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("foo.baz.dll"), FPL("txt") }, FPL("foo.baz.txt") }, 911b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("foo.baz.dll"), FPL(".txt") }, FPL("foo.baz.txt") }, 912b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("foo.dll"), FPL("") }, FPL("foo") }, 913b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("foo.dll"), FPL(".") }, FPL("foo") }, 914b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("foo"), FPL("") }, FPL("foo") }, 915b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("foo"), FPL(".") }, FPL("foo") }, 916b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("foo.baz.dll"), FPL("") }, FPL("foo.baz") }, 917b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("foo.baz.dll"), FPL(".") }, FPL("foo.baz") }, 918b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#if defined(FILE_PATH_USES_WIN_SEPARATORS) 919b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("C:\\foo.bar\\foo"), FPL("baz") }, FPL("C:\\foo.bar\\foo.baz") }, 920b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("C:\\foo.bar\\..\\\\"), FPL("baz") }, FPL("") }, 921b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#endif 922b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("/foo.bar/foo"), FPL("baz") }, FPL("/foo.bar/foo.baz") }, 923b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("/foo.bar/..////"), FPL("baz") }, FPL("") }, 924b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat }; 925b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat for (unsigned int i = 0; i < arraysize(cases); ++i) { 926b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat FilePath path(cases[i].inputs[0]); 927b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat FilePath replaced = path.ReplaceExtension(cases[i].inputs[1]); 928b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat EXPECT_EQ(cases[i].expected, replaced.value()) << "i: " << i << 929b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat ", path: " << path.value() << ", replace: " << cases[i].inputs[1]; 930b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat } 931b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat} 932b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 933b8cf94937c52feb53b55c39e3f82094d27de464cDaniel EratTEST_F(FilePathTest, AddExtension) { 934b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat const struct BinaryTestData cases[] = { 935b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL(""), FPL("") }, FPL("") }, 936b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL(""), FPL("txt") }, FPL("") }, 937b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("."), FPL("txt") }, FPL("") }, 938b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL(".."), FPL("txt") }, FPL("") }, 939b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("."), FPL("") }, FPL("") }, 940b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("foo.dll"), FPL("txt") }, FPL("foo.dll.txt") }, 941b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("./foo.dll"), FPL("txt") }, FPL("./foo.dll.txt") }, 942b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("foo..dll"), FPL("txt") }, FPL("foo..dll.txt") }, 943b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("foo.dll"), FPL(".txt") }, FPL("foo.dll.txt") }, 944b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("foo"), FPL("txt") }, FPL("foo.txt") }, 945b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("foo."), FPL("txt") }, FPL("foo.txt") }, 946b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("foo.."), FPL("txt") }, FPL("foo..txt") }, 947b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("foo"), FPL(".txt") }, FPL("foo.txt") }, 948b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("foo.baz.dll"), FPL("txt") }, FPL("foo.baz.dll.txt") }, 949b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("foo.baz.dll"), FPL(".txt") }, FPL("foo.baz.dll.txt") }, 950b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("foo.dll"), FPL("") }, FPL("foo.dll") }, 951b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("foo.dll"), FPL(".") }, FPL("foo.dll") }, 952b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("foo"), FPL("") }, FPL("foo") }, 953b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("foo"), FPL(".") }, FPL("foo") }, 954b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("foo.baz.dll"), FPL("") }, FPL("foo.baz.dll") }, 955b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("foo.baz.dll"), FPL(".") }, FPL("foo.baz.dll") }, 956b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#if defined(FILE_PATH_USES_WIN_SEPARATORS) 957b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("C:\\foo.bar\\foo"), FPL("baz") }, FPL("C:\\foo.bar\\foo.baz") }, 958b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("C:\\foo.bar\\..\\\\"), FPL("baz") }, FPL("") }, 959b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#endif 960b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("/foo.bar/foo"), FPL("baz") }, FPL("/foo.bar/foo.baz") }, 961b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("/foo.bar/..////"), FPL("baz") }, FPL("") }, 962b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat }; 963b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat for (unsigned int i = 0; i < arraysize(cases); ++i) { 964b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat FilePath path(cases[i].inputs[0]); 965b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat FilePath added = path.AddExtension(cases[i].inputs[1]); 966b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat EXPECT_EQ(cases[i].expected, added.value()) << "i: " << i << 967b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat ", path: " << path.value() << ", add: " << cases[i].inputs[1]; 968b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat } 969b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat} 970b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 971b8cf94937c52feb53b55c39e3f82094d27de464cDaniel EratTEST_F(FilePathTest, MatchesExtension) { 972b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat const struct BinaryBooleanTestData cases[] = { 973b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("foo"), FPL("") }, true}, 974b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("foo"), FPL(".") }, false}, 975b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("foo."), FPL("") }, false}, 976b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("foo."), FPL(".") }, true}, 977b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("foo.txt"), FPL(".dll") }, false}, 978b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("foo.txt"), FPL(".txt") }, true}, 979b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("foo.txt.dll"), FPL(".txt") }, false}, 980b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("foo.txt.dll"), FPL(".dll") }, true}, 981b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("foo.TXT"), FPL(".txt") }, true}, 982b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("foo.txt"), FPL(".TXT") }, true}, 983b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("foo.tXt"), FPL(".txt") }, true}, 984b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("foo.txt"), FPL(".tXt") }, true}, 985b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("foo.tXt"), FPL(".TXT") }, true}, 986b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("foo.tXt"), FPL(".tXt") }, true}, 987b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#if defined(FILE_PATH_USES_DRIVE_LETTERS) 988b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("c:/foo.txt.dll"), FPL(".txt") }, false}, 989b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("c:/foo.txt"), FPL(".txt") }, true}, 990b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#endif // FILE_PATH_USES_DRIVE_LETTERS 991b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#if defined(FILE_PATH_USES_WIN_SEPARATORS) 992b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("c:\\bar\\foo.txt.dll"), FPL(".txt") }, false}, 993b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("c:\\bar\\foo.txt"), FPL(".txt") }, true}, 994b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#endif // FILE_PATH_USES_DRIVE_LETTERS 995b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("/bar/foo.txt.dll"), FPL(".txt") }, false}, 996b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("/bar/foo.txt"), FPL(".txt") }, true}, 997b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#if defined(OS_WIN) || defined(OS_MACOSX) 998b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat // Umlauts A, O, U: direct comparison, and upper case vs. lower case 999b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("foo.\u00E4\u00F6\u00FC"), FPL(".\u00E4\u00F6\u00FC") }, true}, 1000b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("foo.\u00C4\u00D6\u00DC"), FPL(".\u00E4\u00F6\u00FC") }, true}, 1001b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat // C with circumflex: direct comparison, and upper case vs. lower case 1002b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("foo.\u0109"), FPL(".\u0109") }, true}, 1003b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("foo.\u0108"), FPL(".\u0109") }, true}, 1004b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#endif 1005b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat }; 1006b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 1007b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat for (size_t i = 0; i < arraysize(cases); ++i) { 1008b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat FilePath path(cases[i].inputs[0]); 1009b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat FilePath::StringType ext(cases[i].inputs[1]); 1010b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 1011b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat EXPECT_EQ(cases[i].expected, path.MatchesExtension(ext)) << 1012b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat "i: " << i << ", path: " << path.value() << ", ext: " << ext; 1013b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat } 1014b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat} 1015b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 1016b8cf94937c52feb53b55c39e3f82094d27de464cDaniel EratTEST_F(FilePathTest, CompareIgnoreCase) { 1017b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat const struct BinaryIntTestData cases[] = { 1018b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("foo"), FPL("foo") }, 0}, 1019b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("FOO"), FPL("foo") }, 0}, 1020b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("foo.ext"), FPL("foo.ext") }, 0}, 1021b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("FOO.EXT"), FPL("foo.ext") }, 0}, 1022b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("Foo.Ext"), FPL("foo.ext") }, 0}, 1023b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("foO"), FPL("foo") }, 0}, 1024b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("foo"), FPL("foO") }, 0}, 1025b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("fOo"), FPL("foo") }, 0}, 1026b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("foo"), FPL("fOo") }, 0}, 1027b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("bar"), FPL("foo") }, -1}, 1028b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("foo"), FPL("bar") }, 1}, 1029b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("BAR"), FPL("foo") }, -1}, 1030b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("FOO"), FPL("bar") }, 1}, 1031b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("bar"), FPL("FOO") }, -1}, 1032b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("foo"), FPL("BAR") }, 1}, 1033b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("BAR"), FPL("FOO") }, -1}, 1034b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("FOO"), FPL("BAR") }, 1}, 1035b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat // German "Eszett" (lower case and the new-fangled upper case) 1036b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat // Note that uc(<lowercase eszett>) => "SS", NOT <uppercase eszett>! 1037b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat // However, neither Windows nor Mac OSX converts these. 1038b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat // (or even have glyphs for <uppercase eszett>) 1039b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("\u00DF"), FPL("\u00DF") }, 0}, 1040b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("\u1E9E"), FPL("\u1E9E") }, 0}, 1041b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("\u00DF"), FPL("\u1E9E") }, -1}, 1042b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("SS"), FPL("\u00DF") }, -1}, 1043b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("SS"), FPL("\u1E9E") }, -1}, 1044b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#if defined(OS_WIN) || defined(OS_MACOSX) 1045b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat // Umlauts A, O, U: direct comparison, and upper case vs. lower case 1046b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("\u00E4\u00F6\u00FC"), FPL("\u00E4\u00F6\u00FC") }, 0}, 1047b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("\u00C4\u00D6\u00DC"), FPL("\u00E4\u00F6\u00FC") }, 0}, 1048b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat // C with circumflex: direct comparison, and upper case vs. lower case 1049b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("\u0109"), FPL("\u0109") }, 0}, 1050b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("\u0108"), FPL("\u0109") }, 0}, 1051b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat // Cyrillic letter SHA: direct comparison, and upper case vs. lower case 1052b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("\u0428"), FPL("\u0428") }, 0}, 1053b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("\u0428"), FPL("\u0448") }, 0}, 1054b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat // Greek letter DELTA: direct comparison, and upper case vs. lower case 1055b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("\u0394"), FPL("\u0394") }, 0}, 1056b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("\u0394"), FPL("\u03B4") }, 0}, 1057b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat // Japanese full-width A: direct comparison, and upper case vs. lower case 1058b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat // Note that full-width and standard characters are considered different. 1059b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("\uFF21"), FPL("\uFF21") }, 0}, 1060b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("\uFF21"), FPL("\uFF41") }, 0}, 1061b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("A"), FPL("\uFF21") }, -1}, 1062b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("A"), FPL("\uFF41") }, -1}, 1063b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("a"), FPL("\uFF21") }, -1}, 1064b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("a"), FPL("\uFF41") }, -1}, 1065b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#endif 1066b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#if defined(OS_MACOSX) 1067b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat // Codepoints > 0x1000 1068b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat // Georgian letter DON: direct comparison, and upper case vs. lower case 1069b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("\u10A3"), FPL("\u10A3") }, 0}, 1070b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("\u10A3"), FPL("\u10D3") }, 0}, 1071b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat // Combining characters vs. pre-composed characters, upper and lower case 1072b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("k\u0301u\u032Do\u0304\u0301n"), FPL("\u1E31\u1E77\u1E53n") }, 0}, 1073b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("k\u0301u\u032Do\u0304\u0301n"), FPL("kuon") }, 1}, 1074b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("kuon"), FPL("k\u0301u\u032Do\u0304\u0301n") }, -1}, 1075b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("K\u0301U\u032DO\u0304\u0301N"), FPL("KUON") }, 1}, 1076b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("KUON"), FPL("K\u0301U\u032DO\u0304\u0301N") }, -1}, 1077b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("k\u0301u\u032Do\u0304\u0301n"), FPL("KUON") }, 1}, 1078b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("K\u0301U\u032DO\u0304\u0301N"), FPL("\u1E31\u1E77\u1E53n") }, 0}, 1079b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("k\u0301u\u032Do\u0304\u0301n"), FPL("\u1E30\u1E76\u1E52n") }, 0}, 1080b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { { FPL("k\u0301u\u032Do\u0304\u0302n"), FPL("\u1E30\u1E76\u1E52n") }, 1}, 1081b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#endif 1082b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat }; 1083b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 1084b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat for (size_t i = 0; i < arraysize(cases); ++i) { 1085b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat FilePath::StringType s1(cases[i].inputs[0]); 1086b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat FilePath::StringType s2(cases[i].inputs[1]); 1087b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat int result = FilePath::CompareIgnoreCase(s1, s2); 1088b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat EXPECT_EQ(cases[i].expected, result) << 1089b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat "i: " << i << ", s1: " << s1 << ", s2: " << s2; 1090b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat } 1091b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat} 1092b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 1093b8cf94937c52feb53b55c39e3f82094d27de464cDaniel EratTEST_F(FilePathTest, ReferencesParent) { 1094b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat const struct UnaryBooleanTestData cases[] = { 1095b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("."), false }, 1096b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL(".."), true }, 1097b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL(".. "), true }, 1098b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL(" .."), true }, 1099b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("..."), true }, 1100b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("a.."), false }, 1101b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("..a"), false }, 1102b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("../"), true }, 1103b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("/.."), true }, 1104b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("/../"), true }, 1105b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("/a../"), false }, 1106b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("/..a/"), false }, 1107b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("//.."), true }, 1108b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("..//"), true }, 1109b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("//..//"), true }, 1110b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("a//..//c"), true }, 1111b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("../b/c"), true }, 1112b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("/../b/c"), true }, 1113b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("a/b/.."), true }, 1114b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("a/b/../"), true }, 1115b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("a/../c"), true }, 1116b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("a/b/c"), false }, 1117b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat }; 1118b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 1119b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat for (size_t i = 0; i < arraysize(cases); ++i) { 1120b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat FilePath input(cases[i].input); 1121b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat bool observed = input.ReferencesParent(); 1122b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat EXPECT_EQ(cases[i].expected, observed) << 1123b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat "i: " << i << ", input: " << input.value(); 1124b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat } 1125b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat} 1126b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 1127b8cf94937c52feb53b55c39e3f82094d27de464cDaniel EratTEST_F(FilePathTest, FromUTF8Unsafe_And_AsUTF8Unsafe) { 1128b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat const struct UTF8TestData cases[] = { 1129b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("foo.txt"), "foo.txt" }, 1130b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat // "aeo" with accents. Use http://0xcc.net/jsescape/ to decode them. 1131b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("\u00E0\u00E8\u00F2.txt"), "\xC3\xA0\xC3\xA8\xC3\xB2.txt" }, 1132b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat // Full-width "ABC". 1133b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("\uFF21\uFF22\uFF23.txt"), 1134b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat "\xEF\xBC\xA1\xEF\xBC\xA2\xEF\xBC\xA3.txt" }, 1135b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat }; 1136b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 1137999773c87b1935713c309e6209255570ec4c7c88Ari Hausman-Cohen#if !defined(SYSTEM_NATIVE_UTF8) && defined(OS_LINUX) 1138cce46a0c214b37e8da48c522c83037e8ffa4f9fdAlex Vakulenko ScopedLocale locale("en_US.UTF-8"); 11391ad3000647abb4e86484f68aa387def88294d82bAri Hausman-Cohen#endif 11401ad3000647abb4e86484f68aa387def88294d82bAri Hausman-Cohen 1141b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat for (size_t i = 0; i < arraysize(cases); ++i) { 1142b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat // Test FromUTF8Unsafe() works. 1143b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat FilePath from_utf8 = FilePath::FromUTF8Unsafe(cases[i].utf8); 1144b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat EXPECT_EQ(cases[i].native, from_utf8.value()) 1145b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat << "i: " << i << ", input: " << cases[i].native; 1146b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat // Test AsUTF8Unsafe() works. 1147b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat FilePath from_native = FilePath(cases[i].native); 1148b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat EXPECT_EQ(cases[i].utf8, from_native.AsUTF8Unsafe()) 1149b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat << "i: " << i << ", input: " << cases[i].native; 1150b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat // Test the two file paths are identical. 1151b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat EXPECT_EQ(from_utf8.value(), from_native.value()); 1152b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat } 1153b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat} 1154b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 1155b8cf94937c52feb53b55c39e3f82094d27de464cDaniel EratTEST_F(FilePathTest, ConstructWithNUL) { 1156b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat // Assert FPS() works. 1157b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat ASSERT_EQ(3U, FPS("a\0b").length()); 1158b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 1159b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat // Test constructor strips '\0' 1160b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat FilePath path(FPS("a\0b")); 1161b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat EXPECT_EQ(1U, path.value().length()); 1162b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat EXPECT_EQ(FPL("a"), path.value()); 1163b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat} 1164b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 1165b8cf94937c52feb53b55c39e3f82094d27de464cDaniel EratTEST_F(FilePathTest, AppendWithNUL) { 1166b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat // Assert FPS() works. 1167b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat ASSERT_EQ(3U, FPS("b\0b").length()); 1168b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 1169b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat // Test Append() strips '\0' 1170b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat FilePath path(FPL("a")); 1171b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat path = path.Append(FPS("b\0b")); 1172b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat EXPECT_EQ(3U, path.value().length()); 1173b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#if defined(FILE_PATH_USES_WIN_SEPARATORS) 1174b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat EXPECT_EQ(FPL("a\\b"), path.value()); 1175b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#else 1176b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat EXPECT_EQ(FPL("a/b"), path.value()); 1177b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#endif 1178b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat} 1179b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 1180b8cf94937c52feb53b55c39e3f82094d27de464cDaniel EratTEST_F(FilePathTest, ReferencesParentWithNUL) { 1181b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat // Assert FPS() works. 1182b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat ASSERT_EQ(3U, FPS("..\0").length()); 1183b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 1184b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat // Test ReferencesParent() doesn't break with "..\0" 1185b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat FilePath path(FPS("..\0")); 1186b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat EXPECT_TRUE(path.ReferencesParent()); 1187b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat} 1188b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 1189b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#if defined(FILE_PATH_USES_WIN_SEPARATORS) 1190b8cf94937c52feb53b55c39e3f82094d27de464cDaniel EratTEST_F(FilePathTest, NormalizePathSeparators) { 1191b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat const struct UnaryTestData cases[] = { 1192b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("foo/bar"), FPL("foo\\bar") }, 1193b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("foo/bar\\betz"), FPL("foo\\bar\\betz") }, 1194b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("foo\\bar"), FPL("foo\\bar") }, 1195b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("foo\\bar/betz"), FPL("foo\\bar\\betz") }, 1196b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("foo"), FPL("foo") }, 1197b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat // Trailing slashes don't automatically get stripped. That's what 1198b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat // StripTrailingSeparators() is for. 1199b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("foo\\"), FPL("foo\\") }, 1200b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("foo/"), FPL("foo\\") }, 1201b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("foo/bar\\"), FPL("foo\\bar\\") }, 1202b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("foo\\bar/"), FPL("foo\\bar\\") }, 1203b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("foo/bar/"), FPL("foo\\bar\\") }, 1204b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("foo\\bar\\"), FPL("foo\\bar\\") }, 1205b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("\\foo/bar"), FPL("\\foo\\bar") }, 1206b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("/foo\\bar"), FPL("\\foo\\bar") }, 1207b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("c:/foo/bar/"), FPL("c:\\foo\\bar\\") }, 1208b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("/foo/bar/"), FPL("\\foo\\bar\\") }, 1209b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("\\foo\\bar\\"), FPL("\\foo\\bar\\") }, 1210b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("c:\\foo/bar"), FPL("c:\\foo\\bar") }, 1211b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("//foo\\bar\\"), FPL("\\\\foo\\bar\\") }, 1212b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("\\\\foo\\bar\\"), FPL("\\\\foo\\bar\\") }, 1213b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("//foo\\bar\\"), FPL("\\\\foo\\bar\\") }, 1214b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat // This method does not normalize the number of path separators. 1215b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("foo\\\\bar"), FPL("foo\\\\bar") }, 1216b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("foo//bar"), FPL("foo\\\\bar") }, 1217b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("foo/\\bar"), FPL("foo\\\\bar") }, 1218b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("foo\\/bar"), FPL("foo\\\\bar") }, 1219b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("///foo\\\\bar"), FPL("\\\\\\foo\\\\bar") }, 1220b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("foo//bar///"), FPL("foo\\\\bar\\\\\\") }, 1221b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("foo/\\bar/\\"), FPL("foo\\\\bar\\\\") }, 1222b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("/\\foo\\/bar"), FPL("\\\\foo\\\\bar") }, 1223b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat }; 1224b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat for (size_t i = 0; i < arraysize(cases); ++i) { 1225b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat FilePath input(cases[i].input); 1226b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat FilePath observed = input.NormalizePathSeparators(); 1227b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat EXPECT_EQ(FilePath::StringType(cases[i].expected), observed.value()) << 1228b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat "i: " << i << ", input: " << input.value(); 1229b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat } 1230b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat} 1231b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#endif 1232b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 1233b8cf94937c52feb53b55c39e3f82094d27de464cDaniel EratTEST_F(FilePathTest, EndsWithSeparator) { 1234b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat const UnaryBooleanTestData cases[] = { 1235b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL(""), false }, 1236b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("/"), true }, 1237b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("foo/"), true }, 1238b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("bar"), false }, 1239b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("/foo/bar"), false }, 1240b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat }; 1241b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat for (size_t i = 0; i < arraysize(cases); ++i) { 1242b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat FilePath input = FilePath(cases[i].input).NormalizePathSeparators(); 1243b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat EXPECT_EQ(cases[i].expected, input.EndsWithSeparator()); 1244b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat } 1245b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat} 1246b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 1247b8cf94937c52feb53b55c39e3f82094d27de464cDaniel EratTEST_F(FilePathTest, AsEndingWithSeparator) { 1248b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat const UnaryTestData cases[] = { 1249b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL(""), FPL("") }, 1250b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("/"), FPL("/") }, 1251b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("foo"), FPL("foo/") }, 1252b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("foo/"), FPL("foo/") } 1253b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat }; 1254b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat for (size_t i = 0; i < arraysize(cases); ++i) { 1255b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat FilePath input = FilePath(cases[i].input).NormalizePathSeparators(); 1256b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat FilePath expected = FilePath(cases[i].expected).NormalizePathSeparators(); 1257b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat EXPECT_EQ(expected.value(), input.AsEndingWithSeparator().value()); 1258b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat } 1259b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat} 1260b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 1261b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#if defined(OS_ANDROID) 1262b8cf94937c52feb53b55c39e3f82094d27de464cDaniel EratTEST_F(FilePathTest, ContentUriTest) { 1263b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat const struct UnaryBooleanTestData cases[] = { 1264b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("content://foo.bar"), true }, 1265b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("content://foo.bar/"), true }, 1266b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("content://foo/bar"), true }, 1267b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("CoNTenT://foo.bar"), true }, 1268b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("content://"), true }, 1269b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("content:///foo.bar"), true }, 1270b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("content://3foo/bar"), true }, 1271b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("content://_foo/bar"), true }, 1272b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL(".. "), false }, 1273b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("foo.bar"), false }, 1274b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("content:foo.bar"), false }, 1275b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("content:/foo.ba"), false }, 1276b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("content:/dir/foo.bar"), false }, 1277b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("content: //foo.bar"), false }, 1278b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat { FPL("content%2a%2f%2f"), false }, 1279b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat }; 1280b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 1281b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat for (size_t i = 0; i < arraysize(cases); ++i) { 1282b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat FilePath input(cases[i].input); 1283b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat bool observed = input.IsContentUri(); 1284b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat EXPECT_EQ(cases[i].expected, observed) << 1285b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat "i: " << i << ", input: " << input.value(); 1286b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat } 1287b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat} 1288b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#endif 1289b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 1290b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat// Test the PrintTo overload for FilePath (used when a test fails to compare two 1291b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat// FilePaths). 1292b8cf94937c52feb53b55c39e3f82094d27de464cDaniel EratTEST_F(FilePathTest, PrintTo) { 1293b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat std::stringstream ss; 1294b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat FilePath fp(FPL("foo")); 1295b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat base::PrintTo(fp, &ss); 1296b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat EXPECT_EQ("foo", ss.str()); 1297b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat} 1298b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 1299b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat} // namespace base 1300