path_service_unittest.cc revision c7f5f8508d98d5952d42ed7648c2a8f30a4da156
1// Copyright (c) 2006-2008 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_util.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  return result && !path.value().empty() && file_util::PathExists(path);
25}
26
27#if defined(OS_WIN)
28// Function to test DIR_LOCAL_APP_DATA_LOW on Windows XP. Make sure it fails.
29bool ReturnsInvalidPath(int dir_type) {
30  FilePath path;
31  bool result = PathService::Get(base::DIR_LOCAL_APP_DATA_LOW, &path);
32  return !result && path.empty();
33}
34#endif
35
36}  // namespace
37
38// On the Mac this winds up using some autoreleased objects, so we need to
39// be a PlatformTest.
40typedef PlatformTest PathServiceTest;
41
42// Test that all PathService::Get calls return a value and a true result
43// in the development environment.  (This test was created because a few
44// later changes to Get broke the semantics of the function and yielded the
45// correct value while returning false.)
46TEST_F(PathServiceTest, Get) {
47  for (int key = base::DIR_CURRENT; key < base::PATH_END; ++key) {
48    EXPECT_PRED1(ReturnsValidPath, key);
49  }
50#if defined(OS_WIN)
51  for (int key = base::PATH_WIN_START + 1; key < base::PATH_WIN_END; ++key) {
52    if (key == base::DIR_LOCAL_APP_DATA_LOW &&
53        win_util::GetWinVersion() < win_util::WINVERSION_VISTA) {
54      // DIR_LOCAL_APP_DATA_LOW is not supported prior Vista and is expected to
55      // fail.
56      EXPECT_TRUE(ReturnsInvalidPath(key)) << key;
57    } else {
58      EXPECT_TRUE(ReturnsValidPath(key)) << key;
59    }
60  }
61#elif defined(OS_MACOSX)
62  for (int key = base::PATH_MAC_START + 1; key < base::PATH_MAC_END; ++key) {
63      EXPECT_PRED1(ReturnsValidPath, key);
64  }
65#endif
66}
67