113481Sgiacomo.travaglini@arm.com// Copyright 2008, Google Inc. 213481Sgiacomo.travaglini@arm.com// All rights reserved. 313481Sgiacomo.travaglini@arm.com// 413481Sgiacomo.travaglini@arm.com// Redistribution and use in source and binary forms, with or without 513481Sgiacomo.travaglini@arm.com// modification, are permitted provided that the following conditions are 613481Sgiacomo.travaglini@arm.com// met: 713481Sgiacomo.travaglini@arm.com// 813481Sgiacomo.travaglini@arm.com// * Redistributions of source code must retain the above copyright 913481Sgiacomo.travaglini@arm.com// notice, this list of conditions and the following disclaimer. 1013481Sgiacomo.travaglini@arm.com// * Redistributions in binary form must reproduce the above 1113481Sgiacomo.travaglini@arm.com// copyright notice, this list of conditions and the following disclaimer 1213481Sgiacomo.travaglini@arm.com// in the documentation and/or other materials provided with the 1313481Sgiacomo.travaglini@arm.com// distribution. 1413481Sgiacomo.travaglini@arm.com// * Neither the name of Google Inc. nor the names of its 1513481Sgiacomo.travaglini@arm.com// contributors may be used to endorse or promote products derived from 1613481Sgiacomo.travaglini@arm.com// this software without specific prior written permission. 1713481Sgiacomo.travaglini@arm.com// 1813481Sgiacomo.travaglini@arm.com// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1913481Sgiacomo.travaglini@arm.com// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 2013481Sgiacomo.travaglini@arm.com// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 2113481Sgiacomo.travaglini@arm.com// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2213481Sgiacomo.travaglini@arm.com// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2313481Sgiacomo.travaglini@arm.com// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2413481Sgiacomo.travaglini@arm.com// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2513481Sgiacomo.travaglini@arm.com// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2613481Sgiacomo.travaglini@arm.com// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2713481Sgiacomo.travaglini@arm.com// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2813481Sgiacomo.travaglini@arm.com// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2913481Sgiacomo.travaglini@arm.com// 3013481Sgiacomo.travaglini@arm.com// Authors: keith.ray@gmail.com (Keith Ray) 3113481Sgiacomo.travaglini@arm.com// 3213481Sgiacomo.travaglini@arm.com// Google Test filepath utilities 3313481Sgiacomo.travaglini@arm.com// 3413481Sgiacomo.travaglini@arm.com// This file tests classes and functions used internally by 3513481Sgiacomo.travaglini@arm.com// Google Test. They are subject to change without notice. 3613481Sgiacomo.travaglini@arm.com// 3713481Sgiacomo.travaglini@arm.com// This file is #included from gtest_unittest.cc, to avoid changing 3813481Sgiacomo.travaglini@arm.com// build or make-files for some existing Google Test clients. Do not 3913481Sgiacomo.travaglini@arm.com// #include this file anywhere else! 4013481Sgiacomo.travaglini@arm.com 4113481Sgiacomo.travaglini@arm.com#include "gtest/internal/gtest-filepath.h" 4213481Sgiacomo.travaglini@arm.com#include "gtest/gtest.h" 4313481Sgiacomo.travaglini@arm.com 4413481Sgiacomo.travaglini@arm.com// Indicates that this translation unit is part of Google Test's 4513481Sgiacomo.travaglini@arm.com// implementation. It must come before gtest-internal-inl.h is 4613481Sgiacomo.travaglini@arm.com// included, or there will be a compiler error. This trick is to 4713481Sgiacomo.travaglini@arm.com// prevent a user from accidentally including gtest-internal-inl.h in 4813481Sgiacomo.travaglini@arm.com// his code. 4913481Sgiacomo.travaglini@arm.com#define GTEST_IMPLEMENTATION_ 1 5013481Sgiacomo.travaglini@arm.com#include "src/gtest-internal-inl.h" 5113481Sgiacomo.travaglini@arm.com#undef GTEST_IMPLEMENTATION_ 5213481Sgiacomo.travaglini@arm.com 5313481Sgiacomo.travaglini@arm.com#if GTEST_OS_WINDOWS_MOBILE 5413481Sgiacomo.travaglini@arm.com# include <windows.h> // NOLINT 5513481Sgiacomo.travaglini@arm.com#elif GTEST_OS_WINDOWS 5613481Sgiacomo.travaglini@arm.com# include <direct.h> // NOLINT 5713481Sgiacomo.travaglini@arm.com#endif // GTEST_OS_WINDOWS_MOBILE 5813481Sgiacomo.travaglini@arm.com 5913481Sgiacomo.travaglini@arm.comnamespace testing { 6013481Sgiacomo.travaglini@arm.comnamespace internal { 6113481Sgiacomo.travaglini@arm.comnamespace { 6213481Sgiacomo.travaglini@arm.com 6313481Sgiacomo.travaglini@arm.com#if GTEST_OS_WINDOWS_MOBILE 6413481Sgiacomo.travaglini@arm.com// TODO(wan@google.com): Move these to the POSIX adapter section in 6513481Sgiacomo.travaglini@arm.com// gtest-port.h. 6613481Sgiacomo.travaglini@arm.com 6713481Sgiacomo.travaglini@arm.com// Windows CE doesn't have the remove C function. 6813481Sgiacomo.travaglini@arm.comint remove(const char* path) { 6913481Sgiacomo.travaglini@arm.com LPCWSTR wpath = String::AnsiToUtf16(path); 7013481Sgiacomo.travaglini@arm.com int ret = DeleteFile(wpath) ? 0 : -1; 7113481Sgiacomo.travaglini@arm.com delete [] wpath; 7213481Sgiacomo.travaglini@arm.com return ret; 7313481Sgiacomo.travaglini@arm.com} 7413481Sgiacomo.travaglini@arm.com// Windows CE doesn't have the _rmdir C function. 7513481Sgiacomo.travaglini@arm.comint _rmdir(const char* path) { 7613481Sgiacomo.travaglini@arm.com FilePath filepath(path); 7713481Sgiacomo.travaglini@arm.com LPCWSTR wpath = String::AnsiToUtf16( 7813481Sgiacomo.travaglini@arm.com filepath.RemoveTrailingPathSeparator().c_str()); 7913481Sgiacomo.travaglini@arm.com int ret = RemoveDirectory(wpath) ? 0 : -1; 8013481Sgiacomo.travaglini@arm.com delete [] wpath; 8113481Sgiacomo.travaglini@arm.com return ret; 8213481Sgiacomo.travaglini@arm.com} 8313481Sgiacomo.travaglini@arm.com 8413481Sgiacomo.travaglini@arm.com#else 8513481Sgiacomo.travaglini@arm.com 8613481Sgiacomo.travaglini@arm.comTEST(GetCurrentDirTest, ReturnsCurrentDir) { 8713481Sgiacomo.travaglini@arm.com const FilePath original_dir = FilePath::GetCurrentDir(); 8813481Sgiacomo.travaglini@arm.com EXPECT_FALSE(original_dir.IsEmpty()); 8913481Sgiacomo.travaglini@arm.com 9013481Sgiacomo.travaglini@arm.com posix::ChDir(GTEST_PATH_SEP_); 9113481Sgiacomo.travaglini@arm.com const FilePath cwd = FilePath::GetCurrentDir(); 9213481Sgiacomo.travaglini@arm.com posix::ChDir(original_dir.c_str()); 9313481Sgiacomo.travaglini@arm.com 9413481Sgiacomo.travaglini@arm.com# if GTEST_OS_WINDOWS 9513481Sgiacomo.travaglini@arm.com 9613481Sgiacomo.travaglini@arm.com // Skips the ":". 9713481Sgiacomo.travaglini@arm.com const char* const cwd_without_drive = strchr(cwd.c_str(), ':'); 9813481Sgiacomo.travaglini@arm.com ASSERT_TRUE(cwd_without_drive != NULL); 9913481Sgiacomo.travaglini@arm.com EXPECT_STREQ(GTEST_PATH_SEP_, cwd_without_drive + 1); 10013481Sgiacomo.travaglini@arm.com 10113481Sgiacomo.travaglini@arm.com# else 10213481Sgiacomo.travaglini@arm.com 10313481Sgiacomo.travaglini@arm.com EXPECT_EQ(GTEST_PATH_SEP_, cwd.string()); 10413481Sgiacomo.travaglini@arm.com 10513481Sgiacomo.travaglini@arm.com# endif 10613481Sgiacomo.travaglini@arm.com} 10713481Sgiacomo.travaglini@arm.com 10813481Sgiacomo.travaglini@arm.com#endif // GTEST_OS_WINDOWS_MOBILE 10913481Sgiacomo.travaglini@arm.com 11013481Sgiacomo.travaglini@arm.comTEST(IsEmptyTest, ReturnsTrueForEmptyPath) { 11113481Sgiacomo.travaglini@arm.com EXPECT_TRUE(FilePath("").IsEmpty()); 11213481Sgiacomo.travaglini@arm.com} 11313481Sgiacomo.travaglini@arm.com 11413481Sgiacomo.travaglini@arm.comTEST(IsEmptyTest, ReturnsFalseForNonEmptyPath) { 11513481Sgiacomo.travaglini@arm.com EXPECT_FALSE(FilePath("a").IsEmpty()); 11613481Sgiacomo.travaglini@arm.com EXPECT_FALSE(FilePath(".").IsEmpty()); 11713481Sgiacomo.travaglini@arm.com EXPECT_FALSE(FilePath("a/b").IsEmpty()); 11813481Sgiacomo.travaglini@arm.com EXPECT_FALSE(FilePath("a\\b\\").IsEmpty()); 11913481Sgiacomo.travaglini@arm.com} 12013481Sgiacomo.travaglini@arm.com 12113481Sgiacomo.travaglini@arm.com// RemoveDirectoryName "" -> "" 12213481Sgiacomo.travaglini@arm.comTEST(RemoveDirectoryNameTest, WhenEmptyName) { 12313481Sgiacomo.travaglini@arm.com EXPECT_EQ("", FilePath("").RemoveDirectoryName().string()); 12413481Sgiacomo.travaglini@arm.com} 12513481Sgiacomo.travaglini@arm.com 12613481Sgiacomo.travaglini@arm.com// RemoveDirectoryName "afile" -> "afile" 12713481Sgiacomo.travaglini@arm.comTEST(RemoveDirectoryNameTest, ButNoDirectory) { 12813481Sgiacomo.travaglini@arm.com EXPECT_EQ("afile", 12913481Sgiacomo.travaglini@arm.com FilePath("afile").RemoveDirectoryName().string()); 13013481Sgiacomo.travaglini@arm.com} 13113481Sgiacomo.travaglini@arm.com 13213481Sgiacomo.travaglini@arm.com// RemoveDirectoryName "/afile" -> "afile" 13313481Sgiacomo.travaglini@arm.comTEST(RemoveDirectoryNameTest, RootFileShouldGiveFileName) { 13413481Sgiacomo.travaglini@arm.com EXPECT_EQ("afile", 13513481Sgiacomo.travaglini@arm.com FilePath(GTEST_PATH_SEP_ "afile").RemoveDirectoryName().string()); 13613481Sgiacomo.travaglini@arm.com} 13713481Sgiacomo.travaglini@arm.com 13813481Sgiacomo.travaglini@arm.com// RemoveDirectoryName "adir/" -> "" 13913481Sgiacomo.travaglini@arm.comTEST(RemoveDirectoryNameTest, WhereThereIsNoFileName) { 14013481Sgiacomo.travaglini@arm.com EXPECT_EQ("", 14113481Sgiacomo.travaglini@arm.com FilePath("adir" GTEST_PATH_SEP_).RemoveDirectoryName().string()); 14213481Sgiacomo.travaglini@arm.com} 14313481Sgiacomo.travaglini@arm.com 14413481Sgiacomo.travaglini@arm.com// RemoveDirectoryName "adir/afile" -> "afile" 14513481Sgiacomo.travaglini@arm.comTEST(RemoveDirectoryNameTest, ShouldGiveFileName) { 14613481Sgiacomo.travaglini@arm.com EXPECT_EQ("afile", 14713481Sgiacomo.travaglini@arm.com FilePath("adir" GTEST_PATH_SEP_ "afile").RemoveDirectoryName().string()); 14813481Sgiacomo.travaglini@arm.com} 14913481Sgiacomo.travaglini@arm.com 15013481Sgiacomo.travaglini@arm.com// RemoveDirectoryName "adir/subdir/afile" -> "afile" 15113481Sgiacomo.travaglini@arm.comTEST(RemoveDirectoryNameTest, ShouldAlsoGiveFileName) { 15213481Sgiacomo.travaglini@arm.com EXPECT_EQ("afile", 15313481Sgiacomo.travaglini@arm.com FilePath("adir" GTEST_PATH_SEP_ "subdir" GTEST_PATH_SEP_ "afile") 15413481Sgiacomo.travaglini@arm.com .RemoveDirectoryName().string()); 15513481Sgiacomo.travaglini@arm.com} 15613481Sgiacomo.travaglini@arm.com 15713481Sgiacomo.travaglini@arm.com#if GTEST_HAS_ALT_PATH_SEP_ 15813481Sgiacomo.travaglini@arm.com 15913481Sgiacomo.travaglini@arm.com// Tests that RemoveDirectoryName() works with the alternate separator 16013481Sgiacomo.travaglini@arm.com// on Windows. 16113481Sgiacomo.travaglini@arm.com 16213481Sgiacomo.travaglini@arm.com// RemoveDirectoryName("/afile") -> "afile" 16313481Sgiacomo.travaglini@arm.comTEST(RemoveDirectoryNameTest, RootFileShouldGiveFileNameForAlternateSeparator) { 16413481Sgiacomo.travaglini@arm.com EXPECT_EQ("afile", FilePath("/afile").RemoveDirectoryName().string()); 16513481Sgiacomo.travaglini@arm.com} 16613481Sgiacomo.travaglini@arm.com 16713481Sgiacomo.travaglini@arm.com// RemoveDirectoryName("adir/") -> "" 16813481Sgiacomo.travaglini@arm.comTEST(RemoveDirectoryNameTest, WhereThereIsNoFileNameForAlternateSeparator) { 16913481Sgiacomo.travaglini@arm.com EXPECT_EQ("", FilePath("adir/").RemoveDirectoryName().string()); 17013481Sgiacomo.travaglini@arm.com} 17113481Sgiacomo.travaglini@arm.com 17213481Sgiacomo.travaglini@arm.com// RemoveDirectoryName("adir/afile") -> "afile" 17313481Sgiacomo.travaglini@arm.comTEST(RemoveDirectoryNameTest, ShouldGiveFileNameForAlternateSeparator) { 17413481Sgiacomo.travaglini@arm.com EXPECT_EQ("afile", FilePath("adir/afile").RemoveDirectoryName().string()); 17513481Sgiacomo.travaglini@arm.com} 17613481Sgiacomo.travaglini@arm.com 17713481Sgiacomo.travaglini@arm.com// RemoveDirectoryName("adir/subdir/afile") -> "afile" 17813481Sgiacomo.travaglini@arm.comTEST(RemoveDirectoryNameTest, ShouldAlsoGiveFileNameForAlternateSeparator) { 17913481Sgiacomo.travaglini@arm.com EXPECT_EQ("afile", 18013481Sgiacomo.travaglini@arm.com FilePath("adir/subdir/afile").RemoveDirectoryName().string()); 18113481Sgiacomo.travaglini@arm.com} 18213481Sgiacomo.travaglini@arm.com 18313481Sgiacomo.travaglini@arm.com#endif 18413481Sgiacomo.travaglini@arm.com 18513481Sgiacomo.travaglini@arm.com// RemoveFileName "" -> "./" 18613481Sgiacomo.travaglini@arm.comTEST(RemoveFileNameTest, EmptyName) { 18713481Sgiacomo.travaglini@arm.com#if GTEST_OS_WINDOWS_MOBILE 18813481Sgiacomo.travaglini@arm.com // On Windows CE, we use the root as the current directory. 18913481Sgiacomo.travaglini@arm.com EXPECT_EQ(GTEST_PATH_SEP_, FilePath("").RemoveFileName().string()); 19013481Sgiacomo.travaglini@arm.com#else 19113481Sgiacomo.travaglini@arm.com EXPECT_EQ("." GTEST_PATH_SEP_, FilePath("").RemoveFileName().string()); 19213481Sgiacomo.travaglini@arm.com#endif 19313481Sgiacomo.travaglini@arm.com} 19413481Sgiacomo.travaglini@arm.com 19513481Sgiacomo.travaglini@arm.com// RemoveFileName "adir/" -> "adir/" 19613481Sgiacomo.travaglini@arm.comTEST(RemoveFileNameTest, ButNoFile) { 19713481Sgiacomo.travaglini@arm.com EXPECT_EQ("adir" GTEST_PATH_SEP_, 19813481Sgiacomo.travaglini@arm.com FilePath("adir" GTEST_PATH_SEP_).RemoveFileName().string()); 19913481Sgiacomo.travaglini@arm.com} 20013481Sgiacomo.travaglini@arm.com 20113481Sgiacomo.travaglini@arm.com// RemoveFileName "adir/afile" -> "adir/" 20213481Sgiacomo.travaglini@arm.comTEST(RemoveFileNameTest, GivesDirName) { 20313481Sgiacomo.travaglini@arm.com EXPECT_EQ("adir" GTEST_PATH_SEP_, 20413481Sgiacomo.travaglini@arm.com FilePath("adir" GTEST_PATH_SEP_ "afile").RemoveFileName().string()); 20513481Sgiacomo.travaglini@arm.com} 20613481Sgiacomo.travaglini@arm.com 20713481Sgiacomo.travaglini@arm.com// RemoveFileName "adir/subdir/afile" -> "adir/subdir/" 20813481Sgiacomo.travaglini@arm.comTEST(RemoveFileNameTest, GivesDirAndSubDirName) { 20913481Sgiacomo.travaglini@arm.com EXPECT_EQ("adir" GTEST_PATH_SEP_ "subdir" GTEST_PATH_SEP_, 21013481Sgiacomo.travaglini@arm.com FilePath("adir" GTEST_PATH_SEP_ "subdir" GTEST_PATH_SEP_ "afile") 21113481Sgiacomo.travaglini@arm.com .RemoveFileName().string()); 21213481Sgiacomo.travaglini@arm.com} 21313481Sgiacomo.travaglini@arm.com 21413481Sgiacomo.travaglini@arm.com// RemoveFileName "/afile" -> "/" 21513481Sgiacomo.travaglini@arm.comTEST(RemoveFileNameTest, GivesRootDir) { 21613481Sgiacomo.travaglini@arm.com EXPECT_EQ(GTEST_PATH_SEP_, 21713481Sgiacomo.travaglini@arm.com FilePath(GTEST_PATH_SEP_ "afile").RemoveFileName().string()); 21813481Sgiacomo.travaglini@arm.com} 21913481Sgiacomo.travaglini@arm.com 22013481Sgiacomo.travaglini@arm.com#if GTEST_HAS_ALT_PATH_SEP_ 22113481Sgiacomo.travaglini@arm.com 22213481Sgiacomo.travaglini@arm.com// Tests that RemoveFileName() works with the alternate separator on 22313481Sgiacomo.travaglini@arm.com// Windows. 22413481Sgiacomo.travaglini@arm.com 22513481Sgiacomo.travaglini@arm.com// RemoveFileName("adir/") -> "adir/" 22613481Sgiacomo.travaglini@arm.comTEST(RemoveFileNameTest, ButNoFileForAlternateSeparator) { 22713481Sgiacomo.travaglini@arm.com EXPECT_EQ("adir" GTEST_PATH_SEP_, 22813481Sgiacomo.travaglini@arm.com FilePath("adir/").RemoveFileName().string()); 22913481Sgiacomo.travaglini@arm.com} 23013481Sgiacomo.travaglini@arm.com 23113481Sgiacomo.travaglini@arm.com// RemoveFileName("adir/afile") -> "adir/" 23213481Sgiacomo.travaglini@arm.comTEST(RemoveFileNameTest, GivesDirNameForAlternateSeparator) { 23313481Sgiacomo.travaglini@arm.com EXPECT_EQ("adir" GTEST_PATH_SEP_, 23413481Sgiacomo.travaglini@arm.com FilePath("adir/afile").RemoveFileName().string()); 23513481Sgiacomo.travaglini@arm.com} 23613481Sgiacomo.travaglini@arm.com 23713481Sgiacomo.travaglini@arm.com// RemoveFileName("adir/subdir/afile") -> "adir/subdir/" 23813481Sgiacomo.travaglini@arm.comTEST(RemoveFileNameTest, GivesDirAndSubDirNameForAlternateSeparator) { 23913481Sgiacomo.travaglini@arm.com EXPECT_EQ("adir" GTEST_PATH_SEP_ "subdir" GTEST_PATH_SEP_, 24013481Sgiacomo.travaglini@arm.com FilePath("adir/subdir/afile").RemoveFileName().string()); 24113481Sgiacomo.travaglini@arm.com} 24213481Sgiacomo.travaglini@arm.com 24313481Sgiacomo.travaglini@arm.com// RemoveFileName("/afile") -> "\" 24413481Sgiacomo.travaglini@arm.comTEST(RemoveFileNameTest, GivesRootDirForAlternateSeparator) { 24513481Sgiacomo.travaglini@arm.com EXPECT_EQ(GTEST_PATH_SEP_, FilePath("/afile").RemoveFileName().string()); 24613481Sgiacomo.travaglini@arm.com} 24713481Sgiacomo.travaglini@arm.com 24813481Sgiacomo.travaglini@arm.com#endif 24913481Sgiacomo.travaglini@arm.com 25013481Sgiacomo.travaglini@arm.comTEST(MakeFileNameTest, GenerateWhenNumberIsZero) { 25113481Sgiacomo.travaglini@arm.com FilePath actual = FilePath::MakeFileName(FilePath("foo"), FilePath("bar"), 25213481Sgiacomo.travaglini@arm.com 0, "xml"); 25313481Sgiacomo.travaglini@arm.com EXPECT_EQ("foo" GTEST_PATH_SEP_ "bar.xml", actual.string()); 25413481Sgiacomo.travaglini@arm.com} 25513481Sgiacomo.travaglini@arm.com 25613481Sgiacomo.travaglini@arm.comTEST(MakeFileNameTest, GenerateFileNameNumberGtZero) { 25713481Sgiacomo.travaglini@arm.com FilePath actual = FilePath::MakeFileName(FilePath("foo"), FilePath("bar"), 25813481Sgiacomo.travaglini@arm.com 12, "xml"); 25913481Sgiacomo.travaglini@arm.com EXPECT_EQ("foo" GTEST_PATH_SEP_ "bar_12.xml", actual.string()); 26013481Sgiacomo.travaglini@arm.com} 26113481Sgiacomo.travaglini@arm.com 26213481Sgiacomo.travaglini@arm.comTEST(MakeFileNameTest, GenerateFileNameWithSlashNumberIsZero) { 26313481Sgiacomo.travaglini@arm.com FilePath actual = FilePath::MakeFileName(FilePath("foo" GTEST_PATH_SEP_), 26413481Sgiacomo.travaglini@arm.com FilePath("bar"), 0, "xml"); 26513481Sgiacomo.travaglini@arm.com EXPECT_EQ("foo" GTEST_PATH_SEP_ "bar.xml", actual.string()); 26613481Sgiacomo.travaglini@arm.com} 26713481Sgiacomo.travaglini@arm.com 26813481Sgiacomo.travaglini@arm.comTEST(MakeFileNameTest, GenerateFileNameWithSlashNumberGtZero) { 26913481Sgiacomo.travaglini@arm.com FilePath actual = FilePath::MakeFileName(FilePath("foo" GTEST_PATH_SEP_), 27013481Sgiacomo.travaglini@arm.com FilePath("bar"), 12, "xml"); 27113481Sgiacomo.travaglini@arm.com EXPECT_EQ("foo" GTEST_PATH_SEP_ "bar_12.xml", actual.string()); 27213481Sgiacomo.travaglini@arm.com} 27313481Sgiacomo.travaglini@arm.com 27413481Sgiacomo.travaglini@arm.comTEST(MakeFileNameTest, GenerateWhenNumberIsZeroAndDirIsEmpty) { 27513481Sgiacomo.travaglini@arm.com FilePath actual = FilePath::MakeFileName(FilePath(""), FilePath("bar"), 27613481Sgiacomo.travaglini@arm.com 0, "xml"); 27713481Sgiacomo.travaglini@arm.com EXPECT_EQ("bar.xml", actual.string()); 27813481Sgiacomo.travaglini@arm.com} 27913481Sgiacomo.travaglini@arm.com 28013481Sgiacomo.travaglini@arm.comTEST(MakeFileNameTest, GenerateWhenNumberIsNotZeroAndDirIsEmpty) { 28113481Sgiacomo.travaglini@arm.com FilePath actual = FilePath::MakeFileName(FilePath(""), FilePath("bar"), 28213481Sgiacomo.travaglini@arm.com 14, "xml"); 28313481Sgiacomo.travaglini@arm.com EXPECT_EQ("bar_14.xml", actual.string()); 28413481Sgiacomo.travaglini@arm.com} 28513481Sgiacomo.travaglini@arm.com 28613481Sgiacomo.travaglini@arm.comTEST(ConcatPathsTest, WorksWhenDirDoesNotEndWithPathSep) { 28713481Sgiacomo.travaglini@arm.com FilePath actual = FilePath::ConcatPaths(FilePath("foo"), 28813481Sgiacomo.travaglini@arm.com FilePath("bar.xml")); 28913481Sgiacomo.travaglini@arm.com EXPECT_EQ("foo" GTEST_PATH_SEP_ "bar.xml", actual.string()); 29013481Sgiacomo.travaglini@arm.com} 29113481Sgiacomo.travaglini@arm.com 29213481Sgiacomo.travaglini@arm.comTEST(ConcatPathsTest, WorksWhenPath1EndsWithPathSep) { 29313481Sgiacomo.travaglini@arm.com FilePath actual = FilePath::ConcatPaths(FilePath("foo" GTEST_PATH_SEP_), 29413481Sgiacomo.travaglini@arm.com FilePath("bar.xml")); 29513481Sgiacomo.travaglini@arm.com EXPECT_EQ("foo" GTEST_PATH_SEP_ "bar.xml", actual.string()); 29613481Sgiacomo.travaglini@arm.com} 29713481Sgiacomo.travaglini@arm.com 29813481Sgiacomo.travaglini@arm.comTEST(ConcatPathsTest, Path1BeingEmpty) { 29913481Sgiacomo.travaglini@arm.com FilePath actual = FilePath::ConcatPaths(FilePath(""), 30013481Sgiacomo.travaglini@arm.com FilePath("bar.xml")); 30113481Sgiacomo.travaglini@arm.com EXPECT_EQ("bar.xml", actual.string()); 30213481Sgiacomo.travaglini@arm.com} 30313481Sgiacomo.travaglini@arm.com 30413481Sgiacomo.travaglini@arm.comTEST(ConcatPathsTest, Path2BeingEmpty) { 30513481Sgiacomo.travaglini@arm.com FilePath actual = FilePath::ConcatPaths(FilePath("foo"), FilePath("")); 30613481Sgiacomo.travaglini@arm.com EXPECT_EQ("foo" GTEST_PATH_SEP_, actual.string()); 30713481Sgiacomo.travaglini@arm.com} 30813481Sgiacomo.travaglini@arm.com 30913481Sgiacomo.travaglini@arm.comTEST(ConcatPathsTest, BothPathBeingEmpty) { 31013481Sgiacomo.travaglini@arm.com FilePath actual = FilePath::ConcatPaths(FilePath(""), 31113481Sgiacomo.travaglini@arm.com FilePath("")); 31213481Sgiacomo.travaglini@arm.com EXPECT_EQ("", actual.string()); 31313481Sgiacomo.travaglini@arm.com} 31413481Sgiacomo.travaglini@arm.com 31513481Sgiacomo.travaglini@arm.comTEST(ConcatPathsTest, Path1ContainsPathSep) { 31613481Sgiacomo.travaglini@arm.com FilePath actual = FilePath::ConcatPaths(FilePath("foo" GTEST_PATH_SEP_ "bar"), 31713481Sgiacomo.travaglini@arm.com FilePath("foobar.xml")); 31813481Sgiacomo.travaglini@arm.com EXPECT_EQ("foo" GTEST_PATH_SEP_ "bar" GTEST_PATH_SEP_ "foobar.xml", 31913481Sgiacomo.travaglini@arm.com actual.string()); 32013481Sgiacomo.travaglini@arm.com} 32113481Sgiacomo.travaglini@arm.com 32213481Sgiacomo.travaglini@arm.comTEST(ConcatPathsTest, Path2ContainsPathSep) { 32313481Sgiacomo.travaglini@arm.com FilePath actual = FilePath::ConcatPaths( 32413481Sgiacomo.travaglini@arm.com FilePath("foo" GTEST_PATH_SEP_), 32513481Sgiacomo.travaglini@arm.com FilePath("bar" GTEST_PATH_SEP_ "bar.xml")); 32613481Sgiacomo.travaglini@arm.com EXPECT_EQ("foo" GTEST_PATH_SEP_ "bar" GTEST_PATH_SEP_ "bar.xml", 32713481Sgiacomo.travaglini@arm.com actual.string()); 32813481Sgiacomo.travaglini@arm.com} 32913481Sgiacomo.travaglini@arm.com 33013481Sgiacomo.travaglini@arm.comTEST(ConcatPathsTest, Path2EndsWithPathSep) { 33113481Sgiacomo.travaglini@arm.com FilePath actual = FilePath::ConcatPaths(FilePath("foo"), 33213481Sgiacomo.travaglini@arm.com FilePath("bar" GTEST_PATH_SEP_)); 33313481Sgiacomo.travaglini@arm.com EXPECT_EQ("foo" GTEST_PATH_SEP_ "bar" GTEST_PATH_SEP_, actual.string()); 33413481Sgiacomo.travaglini@arm.com} 33513481Sgiacomo.travaglini@arm.com 33613481Sgiacomo.travaglini@arm.com// RemoveTrailingPathSeparator "" -> "" 33713481Sgiacomo.travaglini@arm.comTEST(RemoveTrailingPathSeparatorTest, EmptyString) { 33813481Sgiacomo.travaglini@arm.com EXPECT_EQ("", FilePath("").RemoveTrailingPathSeparator().string()); 33913481Sgiacomo.travaglini@arm.com} 34013481Sgiacomo.travaglini@arm.com 34113481Sgiacomo.travaglini@arm.com// RemoveTrailingPathSeparator "foo" -> "foo" 34213481Sgiacomo.travaglini@arm.comTEST(RemoveTrailingPathSeparatorTest, FileNoSlashString) { 34313481Sgiacomo.travaglini@arm.com EXPECT_EQ("foo", FilePath("foo").RemoveTrailingPathSeparator().string()); 34413481Sgiacomo.travaglini@arm.com} 34513481Sgiacomo.travaglini@arm.com 34613481Sgiacomo.travaglini@arm.com// RemoveTrailingPathSeparator "foo/" -> "foo" 34713481Sgiacomo.travaglini@arm.comTEST(RemoveTrailingPathSeparatorTest, ShouldRemoveTrailingSeparator) { 34813481Sgiacomo.travaglini@arm.com EXPECT_EQ("foo", 34913481Sgiacomo.travaglini@arm.com FilePath("foo" GTEST_PATH_SEP_).RemoveTrailingPathSeparator().string()); 35013481Sgiacomo.travaglini@arm.com#if GTEST_HAS_ALT_PATH_SEP_ 35113481Sgiacomo.travaglini@arm.com EXPECT_EQ("foo", FilePath("foo/").RemoveTrailingPathSeparator().string()); 35213481Sgiacomo.travaglini@arm.com#endif 35313481Sgiacomo.travaglini@arm.com} 35413481Sgiacomo.travaglini@arm.com 35513481Sgiacomo.travaglini@arm.com// RemoveTrailingPathSeparator "foo/bar/" -> "foo/bar/" 35613481Sgiacomo.travaglini@arm.comTEST(RemoveTrailingPathSeparatorTest, ShouldRemoveLastSeparator) { 35713481Sgiacomo.travaglini@arm.com EXPECT_EQ("foo" GTEST_PATH_SEP_ "bar", 35813481Sgiacomo.travaglini@arm.com FilePath("foo" GTEST_PATH_SEP_ "bar" GTEST_PATH_SEP_) 35913481Sgiacomo.travaglini@arm.com .RemoveTrailingPathSeparator().string()); 36013481Sgiacomo.travaglini@arm.com} 36113481Sgiacomo.travaglini@arm.com 36213481Sgiacomo.travaglini@arm.com// RemoveTrailingPathSeparator "foo/bar" -> "foo/bar" 36313481Sgiacomo.travaglini@arm.comTEST(RemoveTrailingPathSeparatorTest, ShouldReturnUnmodified) { 36413481Sgiacomo.travaglini@arm.com EXPECT_EQ("foo" GTEST_PATH_SEP_ "bar", 36513481Sgiacomo.travaglini@arm.com FilePath("foo" GTEST_PATH_SEP_ "bar") 36613481Sgiacomo.travaglini@arm.com .RemoveTrailingPathSeparator().string()); 36713481Sgiacomo.travaglini@arm.com} 36813481Sgiacomo.travaglini@arm.com 36913481Sgiacomo.travaglini@arm.comTEST(DirectoryTest, RootDirectoryExists) { 37013481Sgiacomo.travaglini@arm.com#if GTEST_OS_WINDOWS // We are on Windows. 37113481Sgiacomo.travaglini@arm.com char current_drive[_MAX_PATH]; // NOLINT 37213481Sgiacomo.travaglini@arm.com current_drive[0] = static_cast<char>(_getdrive() + 'A' - 1); 37313481Sgiacomo.travaglini@arm.com current_drive[1] = ':'; 37413481Sgiacomo.travaglini@arm.com current_drive[2] = '\\'; 37513481Sgiacomo.travaglini@arm.com current_drive[3] = '\0'; 37613481Sgiacomo.travaglini@arm.com EXPECT_TRUE(FilePath(current_drive).DirectoryExists()); 37713481Sgiacomo.travaglini@arm.com#else 37813481Sgiacomo.travaglini@arm.com EXPECT_TRUE(FilePath("/").DirectoryExists()); 37913481Sgiacomo.travaglini@arm.com#endif // GTEST_OS_WINDOWS 38013481Sgiacomo.travaglini@arm.com} 38113481Sgiacomo.travaglini@arm.com 38213481Sgiacomo.travaglini@arm.com#if GTEST_OS_WINDOWS 38313481Sgiacomo.travaglini@arm.comTEST(DirectoryTest, RootOfWrongDriveDoesNotExists) { 38413481Sgiacomo.travaglini@arm.com const int saved_drive_ = _getdrive(); 38513481Sgiacomo.travaglini@arm.com // Find a drive that doesn't exist. Start with 'Z' to avoid common ones. 38613481Sgiacomo.travaglini@arm.com for (char drive = 'Z'; drive >= 'A'; drive--) 38713481Sgiacomo.travaglini@arm.com if (_chdrive(drive - 'A' + 1) == -1) { 38813481Sgiacomo.travaglini@arm.com char non_drive[_MAX_PATH]; // NOLINT 38913481Sgiacomo.travaglini@arm.com non_drive[0] = drive; 39013481Sgiacomo.travaglini@arm.com non_drive[1] = ':'; 39113481Sgiacomo.travaglini@arm.com non_drive[2] = '\\'; 39213481Sgiacomo.travaglini@arm.com non_drive[3] = '\0'; 39313481Sgiacomo.travaglini@arm.com EXPECT_FALSE(FilePath(non_drive).DirectoryExists()); 39413481Sgiacomo.travaglini@arm.com break; 39513481Sgiacomo.travaglini@arm.com } 39613481Sgiacomo.travaglini@arm.com _chdrive(saved_drive_); 39713481Sgiacomo.travaglini@arm.com} 39813481Sgiacomo.travaglini@arm.com#endif // GTEST_OS_WINDOWS 39913481Sgiacomo.travaglini@arm.com 40013481Sgiacomo.travaglini@arm.com#if !GTEST_OS_WINDOWS_MOBILE 40113481Sgiacomo.travaglini@arm.com// Windows CE _does_ consider an empty directory to exist. 40213481Sgiacomo.travaglini@arm.comTEST(DirectoryTest, EmptyPathDirectoryDoesNotExist) { 40313481Sgiacomo.travaglini@arm.com EXPECT_FALSE(FilePath("").DirectoryExists()); 40413481Sgiacomo.travaglini@arm.com} 40513481Sgiacomo.travaglini@arm.com#endif // !GTEST_OS_WINDOWS_MOBILE 40613481Sgiacomo.travaglini@arm.com 40713481Sgiacomo.travaglini@arm.comTEST(DirectoryTest, CurrentDirectoryExists) { 40813481Sgiacomo.travaglini@arm.com#if GTEST_OS_WINDOWS // We are on Windows. 40913481Sgiacomo.travaglini@arm.com# ifndef _WIN32_CE // Windows CE doesn't have a current directory. 41013481Sgiacomo.travaglini@arm.com 41113481Sgiacomo.travaglini@arm.com EXPECT_TRUE(FilePath(".").DirectoryExists()); 41213481Sgiacomo.travaglini@arm.com EXPECT_TRUE(FilePath(".\\").DirectoryExists()); 41313481Sgiacomo.travaglini@arm.com 41413481Sgiacomo.travaglini@arm.com# endif // _WIN32_CE 41513481Sgiacomo.travaglini@arm.com#else 41613481Sgiacomo.travaglini@arm.com EXPECT_TRUE(FilePath(".").DirectoryExists()); 41713481Sgiacomo.travaglini@arm.com EXPECT_TRUE(FilePath("./").DirectoryExists()); 41813481Sgiacomo.travaglini@arm.com#endif // GTEST_OS_WINDOWS 41913481Sgiacomo.travaglini@arm.com} 42013481Sgiacomo.travaglini@arm.com 42113481Sgiacomo.travaglini@arm.com// "foo/bar" == foo//bar" == "foo///bar" 42213481Sgiacomo.travaglini@arm.comTEST(NormalizeTest, MultipleConsecutiveSepaparatorsInMidstring) { 42313481Sgiacomo.travaglini@arm.com EXPECT_EQ("foo" GTEST_PATH_SEP_ "bar", 42413481Sgiacomo.travaglini@arm.com FilePath("foo" GTEST_PATH_SEP_ "bar").string()); 42513481Sgiacomo.travaglini@arm.com EXPECT_EQ("foo" GTEST_PATH_SEP_ "bar", 42613481Sgiacomo.travaglini@arm.com FilePath("foo" GTEST_PATH_SEP_ GTEST_PATH_SEP_ "bar").string()); 42713481Sgiacomo.travaglini@arm.com EXPECT_EQ("foo" GTEST_PATH_SEP_ "bar", 42813481Sgiacomo.travaglini@arm.com FilePath("foo" GTEST_PATH_SEP_ GTEST_PATH_SEP_ 42913481Sgiacomo.travaglini@arm.com GTEST_PATH_SEP_ "bar").string()); 43013481Sgiacomo.travaglini@arm.com} 43113481Sgiacomo.travaglini@arm.com 43213481Sgiacomo.travaglini@arm.com// "/bar" == //bar" == "///bar" 43313481Sgiacomo.travaglini@arm.comTEST(NormalizeTest, MultipleConsecutiveSepaparatorsAtStringStart) { 43413481Sgiacomo.travaglini@arm.com EXPECT_EQ(GTEST_PATH_SEP_ "bar", 43513481Sgiacomo.travaglini@arm.com FilePath(GTEST_PATH_SEP_ "bar").string()); 43613481Sgiacomo.travaglini@arm.com EXPECT_EQ(GTEST_PATH_SEP_ "bar", 43713481Sgiacomo.travaglini@arm.com FilePath(GTEST_PATH_SEP_ GTEST_PATH_SEP_ "bar").string()); 43813481Sgiacomo.travaglini@arm.com EXPECT_EQ(GTEST_PATH_SEP_ "bar", 43913481Sgiacomo.travaglini@arm.com FilePath(GTEST_PATH_SEP_ GTEST_PATH_SEP_ GTEST_PATH_SEP_ "bar").string()); 44013481Sgiacomo.travaglini@arm.com} 44113481Sgiacomo.travaglini@arm.com 44213481Sgiacomo.travaglini@arm.com// "foo/" == foo//" == "foo///" 44313481Sgiacomo.travaglini@arm.comTEST(NormalizeTest, MultipleConsecutiveSepaparatorsAtStringEnd) { 44413481Sgiacomo.travaglini@arm.com EXPECT_EQ("foo" GTEST_PATH_SEP_, 44513481Sgiacomo.travaglini@arm.com FilePath("foo" GTEST_PATH_SEP_).string()); 44613481Sgiacomo.travaglini@arm.com EXPECT_EQ("foo" GTEST_PATH_SEP_, 44713481Sgiacomo.travaglini@arm.com FilePath("foo" GTEST_PATH_SEP_ GTEST_PATH_SEP_).string()); 44813481Sgiacomo.travaglini@arm.com EXPECT_EQ("foo" GTEST_PATH_SEP_, 44913481Sgiacomo.travaglini@arm.com FilePath("foo" GTEST_PATH_SEP_ GTEST_PATH_SEP_ GTEST_PATH_SEP_).string()); 45013481Sgiacomo.travaglini@arm.com} 45113481Sgiacomo.travaglini@arm.com 45213481Sgiacomo.travaglini@arm.com#if GTEST_HAS_ALT_PATH_SEP_ 45313481Sgiacomo.travaglini@arm.com 45413481Sgiacomo.travaglini@arm.com// Tests that separators at the end of the string are normalized 45513481Sgiacomo.travaglini@arm.com// regardless of their combination (e.g. "foo\" =="foo/\" == 45613481Sgiacomo.travaglini@arm.com// "foo\\/"). 45713481Sgiacomo.travaglini@arm.comTEST(NormalizeTest, MixAlternateSeparatorAtStringEnd) { 45813481Sgiacomo.travaglini@arm.com EXPECT_EQ("foo" GTEST_PATH_SEP_, 45913481Sgiacomo.travaglini@arm.com FilePath("foo/").string()); 46013481Sgiacomo.travaglini@arm.com EXPECT_EQ("foo" GTEST_PATH_SEP_, 46113481Sgiacomo.travaglini@arm.com FilePath("foo" GTEST_PATH_SEP_ "/").string()); 46213481Sgiacomo.travaglini@arm.com EXPECT_EQ("foo" GTEST_PATH_SEP_, 46313481Sgiacomo.travaglini@arm.com FilePath("foo//" GTEST_PATH_SEP_).string()); 46413481Sgiacomo.travaglini@arm.com} 46513481Sgiacomo.travaglini@arm.com 46613481Sgiacomo.travaglini@arm.com#endif 46713481Sgiacomo.travaglini@arm.com 46813481Sgiacomo.travaglini@arm.comTEST(AssignmentOperatorTest, DefaultAssignedToNonDefault) { 46913481Sgiacomo.travaglini@arm.com FilePath default_path; 47013481Sgiacomo.travaglini@arm.com FilePath non_default_path("path"); 47113481Sgiacomo.travaglini@arm.com non_default_path = default_path; 47213481Sgiacomo.travaglini@arm.com EXPECT_EQ("", non_default_path.string()); 47313481Sgiacomo.travaglini@arm.com EXPECT_EQ("", default_path.string()); // RHS var is unchanged. 47413481Sgiacomo.travaglini@arm.com} 47513481Sgiacomo.travaglini@arm.com 47613481Sgiacomo.travaglini@arm.comTEST(AssignmentOperatorTest, NonDefaultAssignedToDefault) { 47713481Sgiacomo.travaglini@arm.com FilePath non_default_path("path"); 47813481Sgiacomo.travaglini@arm.com FilePath default_path; 47913481Sgiacomo.travaglini@arm.com default_path = non_default_path; 48013481Sgiacomo.travaglini@arm.com EXPECT_EQ("path", default_path.string()); 48113481Sgiacomo.travaglini@arm.com EXPECT_EQ("path", non_default_path.string()); // RHS var is unchanged. 48213481Sgiacomo.travaglini@arm.com} 48313481Sgiacomo.travaglini@arm.com 48413481Sgiacomo.travaglini@arm.comTEST(AssignmentOperatorTest, ConstAssignedToNonConst) { 48513481Sgiacomo.travaglini@arm.com const FilePath const_default_path("const_path"); 48613481Sgiacomo.travaglini@arm.com FilePath non_default_path("path"); 48713481Sgiacomo.travaglini@arm.com non_default_path = const_default_path; 48813481Sgiacomo.travaglini@arm.com EXPECT_EQ("const_path", non_default_path.string()); 48913481Sgiacomo.travaglini@arm.com} 49013481Sgiacomo.travaglini@arm.com 49113481Sgiacomo.travaglini@arm.comclass DirectoryCreationTest : public Test { 49213481Sgiacomo.travaglini@arm.com protected: 49313481Sgiacomo.travaglini@arm.com virtual void SetUp() { 49413481Sgiacomo.travaglini@arm.com testdata_path_.Set(FilePath( 49513481Sgiacomo.travaglini@arm.com TempDir() + GetCurrentExecutableName().string() + 49613481Sgiacomo.travaglini@arm.com "_directory_creation" GTEST_PATH_SEP_ "test" GTEST_PATH_SEP_)); 49713481Sgiacomo.travaglini@arm.com testdata_file_.Set(testdata_path_.RemoveTrailingPathSeparator()); 49813481Sgiacomo.travaglini@arm.com 49913481Sgiacomo.travaglini@arm.com unique_file0_.Set(FilePath::MakeFileName(testdata_path_, FilePath("unique"), 50013481Sgiacomo.travaglini@arm.com 0, "txt")); 50113481Sgiacomo.travaglini@arm.com unique_file1_.Set(FilePath::MakeFileName(testdata_path_, FilePath("unique"), 50213481Sgiacomo.travaglini@arm.com 1, "txt")); 50313481Sgiacomo.travaglini@arm.com 50413481Sgiacomo.travaglini@arm.com remove(testdata_file_.c_str()); 50513481Sgiacomo.travaglini@arm.com remove(unique_file0_.c_str()); 50613481Sgiacomo.travaglini@arm.com remove(unique_file1_.c_str()); 50713481Sgiacomo.travaglini@arm.com posix::RmDir(testdata_path_.c_str()); 50813481Sgiacomo.travaglini@arm.com } 50913481Sgiacomo.travaglini@arm.com 51013481Sgiacomo.travaglini@arm.com virtual void TearDown() { 51113481Sgiacomo.travaglini@arm.com remove(testdata_file_.c_str()); 51213481Sgiacomo.travaglini@arm.com remove(unique_file0_.c_str()); 51313481Sgiacomo.travaglini@arm.com remove(unique_file1_.c_str()); 51413481Sgiacomo.travaglini@arm.com posix::RmDir(testdata_path_.c_str()); 51513481Sgiacomo.travaglini@arm.com } 51613481Sgiacomo.travaglini@arm.com 51713481Sgiacomo.travaglini@arm.com void CreateTextFile(const char* filename) { 51813481Sgiacomo.travaglini@arm.com FILE* f = posix::FOpen(filename, "w"); 51913481Sgiacomo.travaglini@arm.com fprintf(f, "text\n"); 52013481Sgiacomo.travaglini@arm.com fclose(f); 52113481Sgiacomo.travaglini@arm.com } 52213481Sgiacomo.travaglini@arm.com 52313481Sgiacomo.travaglini@arm.com // Strings representing a directory and a file, with identical paths 52413481Sgiacomo.travaglini@arm.com // except for the trailing separator character that distinquishes 52513481Sgiacomo.travaglini@arm.com // a directory named 'test' from a file named 'test'. Example names: 52613481Sgiacomo.travaglini@arm.com FilePath testdata_path_; // "/tmp/directory_creation/test/" 52713481Sgiacomo.travaglini@arm.com FilePath testdata_file_; // "/tmp/directory_creation/test" 52813481Sgiacomo.travaglini@arm.com FilePath unique_file0_; // "/tmp/directory_creation/test/unique.txt" 52913481Sgiacomo.travaglini@arm.com FilePath unique_file1_; // "/tmp/directory_creation/test/unique_1.txt" 53013481Sgiacomo.travaglini@arm.com}; 53113481Sgiacomo.travaglini@arm.com 53213481Sgiacomo.travaglini@arm.comTEST_F(DirectoryCreationTest, CreateDirectoriesRecursively) { 53313481Sgiacomo.travaglini@arm.com EXPECT_FALSE(testdata_path_.DirectoryExists()) << testdata_path_.string(); 53413481Sgiacomo.travaglini@arm.com EXPECT_TRUE(testdata_path_.CreateDirectoriesRecursively()); 53513481Sgiacomo.travaglini@arm.com EXPECT_TRUE(testdata_path_.DirectoryExists()); 53613481Sgiacomo.travaglini@arm.com} 53713481Sgiacomo.travaglini@arm.com 53813481Sgiacomo.travaglini@arm.comTEST_F(DirectoryCreationTest, CreateDirectoriesForAlreadyExistingPath) { 53913481Sgiacomo.travaglini@arm.com EXPECT_FALSE(testdata_path_.DirectoryExists()) << testdata_path_.string(); 54013481Sgiacomo.travaglini@arm.com EXPECT_TRUE(testdata_path_.CreateDirectoriesRecursively()); 54113481Sgiacomo.travaglini@arm.com // Call 'create' again... should still succeed. 54213481Sgiacomo.travaglini@arm.com EXPECT_TRUE(testdata_path_.CreateDirectoriesRecursively()); 54313481Sgiacomo.travaglini@arm.com} 54413481Sgiacomo.travaglini@arm.com 54513481Sgiacomo.travaglini@arm.comTEST_F(DirectoryCreationTest, CreateDirectoriesAndUniqueFilename) { 54613481Sgiacomo.travaglini@arm.com FilePath file_path(FilePath::GenerateUniqueFileName(testdata_path_, 54713481Sgiacomo.travaglini@arm.com FilePath("unique"), "txt")); 54813481Sgiacomo.travaglini@arm.com EXPECT_EQ(unique_file0_.string(), file_path.string()); 54913481Sgiacomo.travaglini@arm.com EXPECT_FALSE(file_path.FileOrDirectoryExists()); // file not there 55013481Sgiacomo.travaglini@arm.com 55113481Sgiacomo.travaglini@arm.com testdata_path_.CreateDirectoriesRecursively(); 55213481Sgiacomo.travaglini@arm.com EXPECT_FALSE(file_path.FileOrDirectoryExists()); // file still not there 55313481Sgiacomo.travaglini@arm.com CreateTextFile(file_path.c_str()); 55413481Sgiacomo.travaglini@arm.com EXPECT_TRUE(file_path.FileOrDirectoryExists()); 55513481Sgiacomo.travaglini@arm.com 55613481Sgiacomo.travaglini@arm.com FilePath file_path2(FilePath::GenerateUniqueFileName(testdata_path_, 55713481Sgiacomo.travaglini@arm.com FilePath("unique"), "txt")); 55813481Sgiacomo.travaglini@arm.com EXPECT_EQ(unique_file1_.string(), file_path2.string()); 55913481Sgiacomo.travaglini@arm.com EXPECT_FALSE(file_path2.FileOrDirectoryExists()); // file not there 56013481Sgiacomo.travaglini@arm.com CreateTextFile(file_path2.c_str()); 56113481Sgiacomo.travaglini@arm.com EXPECT_TRUE(file_path2.FileOrDirectoryExists()); 56213481Sgiacomo.travaglini@arm.com} 56313481Sgiacomo.travaglini@arm.com 56413481Sgiacomo.travaglini@arm.comTEST_F(DirectoryCreationTest, CreateDirectoriesFail) { 56513481Sgiacomo.travaglini@arm.com // force a failure by putting a file where we will try to create a directory. 56613481Sgiacomo.travaglini@arm.com CreateTextFile(testdata_file_.c_str()); 56713481Sgiacomo.travaglini@arm.com EXPECT_TRUE(testdata_file_.FileOrDirectoryExists()); 56813481Sgiacomo.travaglini@arm.com EXPECT_FALSE(testdata_file_.DirectoryExists()); 56913481Sgiacomo.travaglini@arm.com EXPECT_FALSE(testdata_file_.CreateDirectoriesRecursively()); 57013481Sgiacomo.travaglini@arm.com} 57113481Sgiacomo.travaglini@arm.com 57213481Sgiacomo.travaglini@arm.comTEST(NoDirectoryCreationTest, CreateNoDirectoriesForDefaultXmlFile) { 57313481Sgiacomo.travaglini@arm.com const FilePath test_detail_xml("test_detail.xml"); 57413481Sgiacomo.travaglini@arm.com EXPECT_FALSE(test_detail_xml.CreateDirectoriesRecursively()); 57513481Sgiacomo.travaglini@arm.com} 57613481Sgiacomo.travaglini@arm.com 57713481Sgiacomo.travaglini@arm.comTEST(FilePathTest, DefaultConstructor) { 57813481Sgiacomo.travaglini@arm.com FilePath fp; 57913481Sgiacomo.travaglini@arm.com EXPECT_EQ("", fp.string()); 58013481Sgiacomo.travaglini@arm.com} 58113481Sgiacomo.travaglini@arm.com 58213481Sgiacomo.travaglini@arm.comTEST(FilePathTest, CharAndCopyConstructors) { 58313481Sgiacomo.travaglini@arm.com const FilePath fp("spicy"); 58413481Sgiacomo.travaglini@arm.com EXPECT_EQ("spicy", fp.string()); 58513481Sgiacomo.travaglini@arm.com 58613481Sgiacomo.travaglini@arm.com const FilePath fp_copy(fp); 58713481Sgiacomo.travaglini@arm.com EXPECT_EQ("spicy", fp_copy.string()); 58813481Sgiacomo.travaglini@arm.com} 58913481Sgiacomo.travaglini@arm.com 59013481Sgiacomo.travaglini@arm.comTEST(FilePathTest, StringConstructor) { 59113481Sgiacomo.travaglini@arm.com const FilePath fp(std::string("cider")); 59213481Sgiacomo.travaglini@arm.com EXPECT_EQ("cider", fp.string()); 59313481Sgiacomo.travaglini@arm.com} 59413481Sgiacomo.travaglini@arm.com 59513481Sgiacomo.travaglini@arm.comTEST(FilePathTest, Set) { 59613481Sgiacomo.travaglini@arm.com const FilePath apple("apple"); 59713481Sgiacomo.travaglini@arm.com FilePath mac("mac"); 59813481Sgiacomo.travaglini@arm.com mac.Set(apple); // Implement Set() since overloading operator= is forbidden. 59913481Sgiacomo.travaglini@arm.com EXPECT_EQ("apple", mac.string()); 60013481Sgiacomo.travaglini@arm.com EXPECT_EQ("apple", apple.string()); 60113481Sgiacomo.travaglini@arm.com} 60213481Sgiacomo.travaglini@arm.com 60313481Sgiacomo.travaglini@arm.comTEST(FilePathTest, ToString) { 60413481Sgiacomo.travaglini@arm.com const FilePath file("drink"); 60513481Sgiacomo.travaglini@arm.com EXPECT_EQ("drink", file.string()); 60613481Sgiacomo.travaglini@arm.com} 60713481Sgiacomo.travaglini@arm.com 60813481Sgiacomo.travaglini@arm.comTEST(FilePathTest, RemoveExtension) { 60913481Sgiacomo.travaglini@arm.com EXPECT_EQ("app", FilePath("app.cc").RemoveExtension("cc").string()); 61013481Sgiacomo.travaglini@arm.com EXPECT_EQ("app", FilePath("app.exe").RemoveExtension("exe").string()); 61113481Sgiacomo.travaglini@arm.com EXPECT_EQ("APP", FilePath("APP.EXE").RemoveExtension("exe").string()); 61213481Sgiacomo.travaglini@arm.com} 61313481Sgiacomo.travaglini@arm.com 61413481Sgiacomo.travaglini@arm.comTEST(FilePathTest, RemoveExtensionWhenThereIsNoExtension) { 61513481Sgiacomo.travaglini@arm.com EXPECT_EQ("app", FilePath("app").RemoveExtension("exe").string()); 61613481Sgiacomo.travaglini@arm.com} 61713481Sgiacomo.travaglini@arm.com 61813481Sgiacomo.travaglini@arm.comTEST(FilePathTest, IsDirectory) { 61913481Sgiacomo.travaglini@arm.com EXPECT_FALSE(FilePath("cola").IsDirectory()); 62013481Sgiacomo.travaglini@arm.com EXPECT_TRUE(FilePath("koala" GTEST_PATH_SEP_).IsDirectory()); 62113481Sgiacomo.travaglini@arm.com#if GTEST_HAS_ALT_PATH_SEP_ 62213481Sgiacomo.travaglini@arm.com EXPECT_TRUE(FilePath("koala/").IsDirectory()); 62313481Sgiacomo.travaglini@arm.com#endif 62413481Sgiacomo.travaglini@arm.com} 62513481Sgiacomo.travaglini@arm.com 62613481Sgiacomo.travaglini@arm.comTEST(FilePathTest, IsAbsolutePath) { 62713481Sgiacomo.travaglini@arm.com EXPECT_FALSE(FilePath("is" GTEST_PATH_SEP_ "relative").IsAbsolutePath()); 62813481Sgiacomo.travaglini@arm.com EXPECT_FALSE(FilePath("").IsAbsolutePath()); 62913481Sgiacomo.travaglini@arm.com#if GTEST_OS_WINDOWS 63013481Sgiacomo.travaglini@arm.com EXPECT_TRUE(FilePath("c:\\" GTEST_PATH_SEP_ "is_not" 63113481Sgiacomo.travaglini@arm.com GTEST_PATH_SEP_ "relative").IsAbsolutePath()); 63213481Sgiacomo.travaglini@arm.com EXPECT_FALSE(FilePath("c:foo" GTEST_PATH_SEP_ "bar").IsAbsolutePath()); 63313481Sgiacomo.travaglini@arm.com EXPECT_TRUE(FilePath("c:/" GTEST_PATH_SEP_ "is_not" 63413481Sgiacomo.travaglini@arm.com GTEST_PATH_SEP_ "relative").IsAbsolutePath()); 63513481Sgiacomo.travaglini@arm.com#else 63613481Sgiacomo.travaglini@arm.com EXPECT_TRUE(FilePath(GTEST_PATH_SEP_ "is_not" GTEST_PATH_SEP_ "relative") 63713481Sgiacomo.travaglini@arm.com .IsAbsolutePath()); 63813481Sgiacomo.travaglini@arm.com#endif // GTEST_OS_WINDOWS 63913481Sgiacomo.travaglini@arm.com} 64013481Sgiacomo.travaglini@arm.com 64113481Sgiacomo.travaglini@arm.comTEST(FilePathTest, IsRootDirectory) { 64213481Sgiacomo.travaglini@arm.com#if GTEST_OS_WINDOWS 64313481Sgiacomo.travaglini@arm.com EXPECT_TRUE(FilePath("a:\\").IsRootDirectory()); 64413481Sgiacomo.travaglini@arm.com EXPECT_TRUE(FilePath("Z:/").IsRootDirectory()); 64513481Sgiacomo.travaglini@arm.com EXPECT_TRUE(FilePath("e://").IsRootDirectory()); 64613481Sgiacomo.travaglini@arm.com EXPECT_FALSE(FilePath("").IsRootDirectory()); 64713481Sgiacomo.travaglini@arm.com EXPECT_FALSE(FilePath("b:").IsRootDirectory()); 64813481Sgiacomo.travaglini@arm.com EXPECT_FALSE(FilePath("b:a").IsRootDirectory()); 64913481Sgiacomo.travaglini@arm.com EXPECT_FALSE(FilePath("8:/").IsRootDirectory()); 65013481Sgiacomo.travaglini@arm.com EXPECT_FALSE(FilePath("c|/").IsRootDirectory()); 65113481Sgiacomo.travaglini@arm.com#else 65213481Sgiacomo.travaglini@arm.com EXPECT_TRUE(FilePath("/").IsRootDirectory()); 65313481Sgiacomo.travaglini@arm.com EXPECT_TRUE(FilePath("//").IsRootDirectory()); 65413481Sgiacomo.travaglini@arm.com EXPECT_FALSE(FilePath("").IsRootDirectory()); 65513481Sgiacomo.travaglini@arm.com EXPECT_FALSE(FilePath("\\").IsRootDirectory()); 65613481Sgiacomo.travaglini@arm.com EXPECT_FALSE(FilePath("/x").IsRootDirectory()); 65713481Sgiacomo.travaglini@arm.com#endif 65813481Sgiacomo.travaglini@arm.com} 65913481Sgiacomo.travaglini@arm.com 66013481Sgiacomo.travaglini@arm.com} // namespace 66113481Sgiacomo.travaglini@arm.com} // namespace internal 66213481Sgiacomo.travaglini@arm.com} // namespace testing 663