path_service_unittest.cc revision 513209b27ff55e2841eac0e4120199c23acce758
1// Copyright (c) 2010 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "base/path_service.h" 6 7#include "base/basictypes.h" 8#include "base/file_util.h" 9#include "base/file_path.h" 10#if defined(OS_WIN) 11#include "base/win/windows_version.h" 12#endif 13#include "testing/gtest/include/gtest/gtest.h" 14#include "testing/gtest/include/gtest/gtest-spi.h" 15#include "testing/platform_test.h" 16 17namespace { 18 19// Returns true if PathService::Get returns true and sets the path parameter 20// to non-empty for the given PathService::DirType enumeration value. 21bool ReturnsValidPath(int dir_type) { 22 FilePath path; 23 bool result = PathService::Get(dir_type, &path); 24#if defined(OS_POSIX) 25 // If chromium has never been started on this account, the cache path will not 26 // exist. 27 if (dir_type == base::DIR_USER_CACHE) 28 return result && !path.value().empty(); 29#endif 30 return result && !path.value().empty() && file_util::PathExists(path); 31} 32 33#if defined(OS_WIN) 34// Function to test DIR_LOCAL_APP_DATA_LOW on Windows XP. Make sure it fails. 35bool ReturnsInvalidPath(int dir_type) { 36 FilePath path; 37 bool result = PathService::Get(base::DIR_LOCAL_APP_DATA_LOW, &path); 38 return !result && path.empty(); 39} 40#endif 41 42} // namespace 43 44// On the Mac this winds up using some autoreleased objects, so we need to 45// be a PlatformTest. 46typedef PlatformTest PathServiceTest; 47 48// Test that all PathService::Get calls return a value and a true result 49// in the development environment. (This test was created because a few 50// later changes to Get broke the semantics of the function and yielded the 51// correct value while returning false.) 52TEST_F(PathServiceTest, Get) { 53 for (int key = base::DIR_CURRENT; key < base::PATH_END; ++key) { 54 EXPECT_PRED1(ReturnsValidPath, key); 55 } 56#if defined(OS_WIN) 57 for (int key = base::PATH_WIN_START + 1; key < base::PATH_WIN_END; ++key) { 58 if (key == base::DIR_LOCAL_APP_DATA_LOW && 59 base::win::GetVersion() < base::win::VERSION_VISTA) { 60 // DIR_LOCAL_APP_DATA_LOW is not supported prior Vista and is expected to 61 // fail. 62 EXPECT_TRUE(ReturnsInvalidPath(key)) << key; 63 } else { 64 EXPECT_TRUE(ReturnsValidPath(key)) << key; 65 } 66 } 67#elif defined(OS_MACOSX) 68 for (int key = base::PATH_MAC_START + 1; key < base::PATH_MAC_END; ++key) { 69 EXPECT_PRED1(ReturnsValidPath, key); 70 } 71#endif 72} 73