1 // Copyright (c) 2011 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.
5 #include "base/files/file_path.h"
6 #include "chrome/browser/policy/policy_path_parser.h"
8 #include "testing/gtest/include/gtest/gtest.h"
12 class PolicyPathParserTests : public testing::Test {
14 void CheckForSubstitution(base::FilePath::StringType test_string,
15 base::FilePath::StringType var_name) {
16 base::FilePath::StringType var(test_string);
17 base::FilePath::StringType var_result =
18 path_parser::ExpandPathVariables(var);
19 ASSERT_EQ(var_result.find(var_name), base::FilePath::StringType::npos);
23 TEST_F(PolicyPathParserTests, AllPlatformVariables) {
24 // No vars whatsoever no substitution should occur.
25 base::FilePath::StringType no_vars(FILE_PATH_LITERAL("//$C/shares"));
26 base::FilePath::StringType no_vars_result =
27 path_parser::ExpandPathVariables(no_vars);
28 ASSERT_EQ(no_vars_result, no_vars);
30 // This is unknown variable and shouldn't be substituted.
31 base::FilePath::StringType unknown_vars(FILE_PATH_LITERAL("//$C/${buggy}"));
32 base::FilePath::StringType unknown_vars_result =
33 path_parser::ExpandPathVariables(unknown_vars);
34 ASSERT_EQ(unknown_vars_result, unknown_vars);
36 // Trim quotes around, but not inside paths. Test against bug 80211.
37 base::FilePath::StringType no_quotes(FILE_PATH_LITERAL("//$C/\"a\"/$path"));
38 base::FilePath::StringType single_quotes(
39 FILE_PATH_LITERAL("'//$C/\"a\"/$path'"));
40 base::FilePath::StringType double_quotes(
41 FILE_PATH_LITERAL("\"//$C/\"a\"/$path\""));
42 base::FilePath::StringType quotes_result =
43 path_parser::ExpandPathVariables(single_quotes);
44 ASSERT_EQ(quotes_result, no_quotes);
45 quotes_result = path_parser::ExpandPathVariables(double_quotes);
46 ASSERT_EQ(quotes_result, no_quotes);
48 // Both should have been substituted.
49 base::FilePath::StringType vars(
50 FILE_PATH_LITERAL("${user_name}${machine_name}"));
51 base::FilePath::StringType vars_result =
52 path_parser::ExpandPathVariables(vars);
53 ASSERT_EQ(vars_result.find(FILE_PATH_LITERAL("${user_name}")),
54 base::FilePath::StringType::npos);
55 ASSERT_EQ(vars_result.find(FILE_PATH_LITERAL("${machine_name}")),
56 base::FilePath::StringType::npos);
58 // Should substitute only one instance.
59 vars = FILE_PATH_LITERAL("${machine_name}${machine_name}");
60 vars_result = path_parser::ExpandPathVariables(vars);
61 size_t pos = vars_result.find(FILE_PATH_LITERAL("${machine_name}"));
62 ASSERT_NE(pos, base::FilePath::StringType::npos);
63 ASSERT_EQ(vars_result.find(FILE_PATH_LITERAL("${machine_name}"), pos+1),
64 base::FilePath::StringType::npos);
66 vars =FILE_PATH_LITERAL("${user_name}${machine_name}");
67 vars_result = path_parser::ExpandPathVariables(vars);
68 ASSERT_EQ(vars_result.find(FILE_PATH_LITERAL("${user_name}")),
69 base::FilePath::StringType::npos);
70 ASSERT_EQ(vars_result.find(FILE_PATH_LITERAL("${machine_name}")),
71 base::FilePath::StringType::npos);
73 CheckForSubstitution(FILE_PATH_LITERAL("//$C/${user_name}"),
74 FILE_PATH_LITERAL("${user_name}"));
75 CheckForSubstitution(FILE_PATH_LITERAL("//$C/${machine_name}"),
76 FILE_PATH_LITERAL("${machine_name}"));
79 #if defined(OS_MACOSX)
81 TEST_F(PolicyPathParserTests, MacVariables) {
82 CheckForSubstitution(FILE_PATH_LITERAL("//$C/${users}"),
83 FILE_PATH_LITERAL("${users}"));
84 CheckForSubstitution(FILE_PATH_LITERAL("//$C/${documents}"),
85 FILE_PATH_LITERAL("${documents}"));
90 TEST_F(PolicyPathParserTests, WinVariables) {
91 CheckForSubstitution(FILE_PATH_LITERAL("//$C/${documents}"),
92 FILE_PATH_LITERAL("${documents}"));
93 CheckForSubstitution(FILE_PATH_LITERAL("//$C/${local_app_data}"),
94 FILE_PATH_LITERAL("${local_app_data}"));
95 CheckForSubstitution(FILE_PATH_LITERAL("//$C/${roaming_app_data}"),
96 FILE_PATH_LITERAL("${roaming_app_data}"));
97 CheckForSubstitution(FILE_PATH_LITERAL("//$C/${profile}"),
98 FILE_PATH_LITERAL("${profile}"));
99 CheckForSubstitution(FILE_PATH_LITERAL("//$C/${global_app_data}"),
100 FILE_PATH_LITERAL("${global_app_data}"));
101 CheckForSubstitution(FILE_PATH_LITERAL("//$C/${program_files}"),
102 FILE_PATH_LITERAL("${program_files}"));
103 CheckForSubstitution(FILE_PATH_LITERAL("//$C/${windows}"),
104 FILE_PATH_LITERAL("${windows}"));
105 CheckForSubstitution(FILE_PATH_LITERAL("//$C/${client_name}"),
106 FILE_PATH_LITERAL("${client_name}"));
111 } // namespace policy