1dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// Copyright (c) 2010 The Chromium Authors. All rights reserved.
2dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// Use of this source code is governed by a BSD-style license that can be
3dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// found in the LICENSE file.
4dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
5dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include <base/file_path.h>
6dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include <chrome/browser/policy/policy_path_parser.h>
7dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
8dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "testing/gtest/include/gtest/gtest.h"
9dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
10dc0f95d653279beabeb9817299e2902918ba123eKristian Monsennamespace policy {
11dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
12dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenclass PolicyPathParserTests : public testing::Test {
13dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen protected:
14dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  void CheckForSubstitution(FilePath::StringType test_string,
15dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen                            FilePath::StringType var_name) {
16dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen    FilePath::StringType var(test_string);
17dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen    FilePath::StringType var_result =
18dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen        path_parser::ExpandPathVariables(var);
19dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen    ASSERT_EQ(var_result.find(var_name), FilePath::StringType::npos);
20dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  }
21dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen};
22dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
23dc0f95d653279beabeb9817299e2902918ba123eKristian MonsenTEST_F(PolicyPathParserTests, AllPlatformVariables) {
24dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  // No vars whatsoever no substitution should occur.
25dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  FilePath::StringType no_vars(FILE_PATH_LITERAL("//$C/shares"));
26dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  FilePath::StringType no_vars_result =
27dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen      path_parser::ExpandPathVariables(no_vars);
28dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  ASSERT_EQ(no_vars_result, no_vars);
29dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
30dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  // This is unknown variable and shouldn't be substituted.
31dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  FilePath::StringType unknown_vars(FILE_PATH_LITERAL("//$C/${buggy}"));
32dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  FilePath::StringType unknown_vars_result =
33dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen      path_parser::ExpandPathVariables(unknown_vars);
34dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  ASSERT_EQ(unknown_vars_result, unknown_vars);
35dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
36dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  // Both should have been substituted.
37dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  FilePath::StringType vars(FILE_PATH_LITERAL("${user_name}${machine_name}"));
38dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  FilePath::StringType vars_result = path_parser::ExpandPathVariables(vars);
39dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  ASSERT_EQ(vars_result.find(FILE_PATH_LITERAL("${user_name}")),
40dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen            FilePath::StringType::npos);
41dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  ASSERT_EQ(vars_result.find(FILE_PATH_LITERAL("${machine_name}")),
42dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen            FilePath::StringType::npos);
43dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
44dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  // Should substitute only one instance.
45dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  vars = FILE_PATH_LITERAL("${machine_name}${machine_name}");
46dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  vars_result = path_parser::ExpandPathVariables(vars);
47dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  size_t pos = vars_result.find(FILE_PATH_LITERAL("${machine_name}"));
48dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  ASSERT_NE(pos, FilePath::StringType::npos);
49dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  ASSERT_EQ(vars_result.find(FILE_PATH_LITERAL("${machine_name}"), pos+1),
50dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen            FilePath::StringType::npos);
51dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
52dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  vars =FILE_PATH_LITERAL("${user_name}${machine_name}");
53dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  vars_result = path_parser::ExpandPathVariables(vars);
54dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  ASSERT_EQ(vars_result.find(FILE_PATH_LITERAL("${user_name}")),
55dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen            FilePath::StringType::npos);
56dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  ASSERT_EQ(vars_result.find(FILE_PATH_LITERAL("${machine_name}")),
57dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen            FilePath::StringType::npos);
58dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
59dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  CheckForSubstitution(FILE_PATH_LITERAL("//$C/${user_name}"),
60dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen                       FILE_PATH_LITERAL("${user_name}"));
61dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  CheckForSubstitution(FILE_PATH_LITERAL("//$C/${machine_name}"),
62dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen                       FILE_PATH_LITERAL("${machine_name}"));
63dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen}
64dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
65dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#if defined(OS_MACOSX)
66dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
67dc0f95d653279beabeb9817299e2902918ba123eKristian MonsenTEST_F(PolicyPathParserTests, MacVariables) {
68dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  CheckForSubstitution(FILE_PATH_LITERAL("//$C/${users}"),
69dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen                       FILE_PATH_LITERAL("${users}"));
70dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  CheckForSubstitution(FILE_PATH_LITERAL("//$C/${documents}"),
71dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen                       FILE_PATH_LITERAL("${documents}"));
72dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen}
73dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
74dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#elif defined(OS_WIN)
75dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
76dc0f95d653279beabeb9817299e2902918ba123eKristian MonsenTEST_F(PolicyPathParserTests, WinVariables) {
77dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  CheckForSubstitution(FILE_PATH_LITERAL("//$C/${documents}"),
78dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen                       FILE_PATH_LITERAL("${documents}"));
79dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  CheckForSubstitution(FILE_PATH_LITERAL("//$C/${local_app_data}"),
80dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen                       FILE_PATH_LITERAL("${local_app_data}"));
81dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  CheckForSubstitution(FILE_PATH_LITERAL("//$C/${roaming_app_data}"),
82dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen                       FILE_PATH_LITERAL("${roaming_app_data}"));
83dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  CheckForSubstitution(FILE_PATH_LITERAL("//$C/${profile}"),
84dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen                       FILE_PATH_LITERAL("${profile}"));
85dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  CheckForSubstitution(FILE_PATH_LITERAL("//$C/${global_app_data}"),
86dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen                       FILE_PATH_LITERAL("${global_app_data}"));
87dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  CheckForSubstitution(FILE_PATH_LITERAL("//$C/${program_files}"),
88dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen                       FILE_PATH_LITERAL("${program_files}"));
89dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  CheckForSubstitution(FILE_PATH_LITERAL("//$C/${windows}"),
90dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen                       FILE_PATH_LITERAL("${windows}"));
91dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen}
92dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
93dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#endif  // OS_WIN
94dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
95dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen}  // namespace policy
96