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