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 #if defined(OS_MACOSX)
24 // http://crbug.com/327520
25 #define MAYBE_AllPlatformVariables DISABLED_AllPlatformVariables
27 #define MAYBE_AllPlatformVariables AllPlatformVariables
29 TEST_F(PolicyPathParserTests
, MAYBE_AllPlatformVariables
) {
30 // No vars whatsoever no substitution should occur.
31 base::FilePath::StringType
no_vars(FILE_PATH_LITERAL("//$C/shares"));
32 base::FilePath::StringType no_vars_result
=
33 path_parser::ExpandPathVariables(no_vars
);
34 ASSERT_EQ(no_vars_result
, no_vars
);
36 // This is unknown variable and shouldn't be substituted.
37 base::FilePath::StringType
unknown_vars(FILE_PATH_LITERAL("//$C/${buggy}"));
38 base::FilePath::StringType unknown_vars_result
=
39 path_parser::ExpandPathVariables(unknown_vars
);
40 ASSERT_EQ(unknown_vars_result
, unknown_vars
);
42 // Trim quotes around, but not inside paths. Test against bug 80211.
43 base::FilePath::StringType
no_quotes(FILE_PATH_LITERAL("//$C/\"a\"/$path"));
44 base::FilePath::StringType
single_quotes(
45 FILE_PATH_LITERAL("'//$C/\"a\"/$path'"));
46 base::FilePath::StringType
double_quotes(
47 FILE_PATH_LITERAL("\"//$C/\"a\"/$path\""));
48 base::FilePath::StringType quotes_result
=
49 path_parser::ExpandPathVariables(single_quotes
);
50 ASSERT_EQ(quotes_result
, no_quotes
);
51 quotes_result
= path_parser::ExpandPathVariables(double_quotes
);
52 ASSERT_EQ(quotes_result
, no_quotes
);
54 // Both should have been substituted.
55 base::FilePath::StringType
vars(
56 FILE_PATH_LITERAL("${user_name}${machine_name}"));
57 base::FilePath::StringType vars_result
=
58 path_parser::ExpandPathVariables(vars
);
59 ASSERT_EQ(vars_result
.find(FILE_PATH_LITERAL("${user_name}")),
60 base::FilePath::StringType::npos
);
61 ASSERT_EQ(vars_result
.find(FILE_PATH_LITERAL("${machine_name}")),
62 base::FilePath::StringType::npos
);
64 // Should substitute only one instance.
65 vars
= FILE_PATH_LITERAL("${machine_name}${machine_name}");
66 vars_result
= path_parser::ExpandPathVariables(vars
);
67 size_t pos
= vars_result
.find(FILE_PATH_LITERAL("${machine_name}"));
68 ASSERT_NE(pos
, base::FilePath::StringType::npos
);
69 ASSERT_EQ(vars_result
.find(FILE_PATH_LITERAL("${machine_name}"), pos
+1),
70 base::FilePath::StringType::npos
);
72 vars
=FILE_PATH_LITERAL("${user_name}${machine_name}");
73 vars_result
= path_parser::ExpandPathVariables(vars
);
74 ASSERT_EQ(vars_result
.find(FILE_PATH_LITERAL("${user_name}")),
75 base::FilePath::StringType::npos
);
76 ASSERT_EQ(vars_result
.find(FILE_PATH_LITERAL("${machine_name}")),
77 base::FilePath::StringType::npos
);
79 CheckForSubstitution(FILE_PATH_LITERAL("//$C/${user_name}"),
80 FILE_PATH_LITERAL("${user_name}"));
81 CheckForSubstitution(FILE_PATH_LITERAL("//$C/${machine_name}"),
82 FILE_PATH_LITERAL("${machine_name}"));
85 #if defined(OS_MACOSX)
87 TEST_F(PolicyPathParserTests
, MacVariables
) {
88 CheckForSubstitution(FILE_PATH_LITERAL("//$C/${users}"),
89 FILE_PATH_LITERAL("${users}"));
90 CheckForSubstitution(FILE_PATH_LITERAL("//$C/${documents}"),
91 FILE_PATH_LITERAL("${documents}"));
96 TEST_F(PolicyPathParserTests
, WinVariables
) {
97 CheckForSubstitution(FILE_PATH_LITERAL("//$C/${documents}"),
98 FILE_PATH_LITERAL("${documents}"));
99 CheckForSubstitution(FILE_PATH_LITERAL("//$C/${local_app_data}"),
100 FILE_PATH_LITERAL("${local_app_data}"));
101 CheckForSubstitution(FILE_PATH_LITERAL("//$C/${roaming_app_data}"),
102 FILE_PATH_LITERAL("${roaming_app_data}"));
103 CheckForSubstitution(FILE_PATH_LITERAL("//$C/${profile}"),
104 FILE_PATH_LITERAL("${profile}"));
105 CheckForSubstitution(FILE_PATH_LITERAL("//$C/${global_app_data}"),
106 FILE_PATH_LITERAL("${global_app_data}"));
107 CheckForSubstitution(FILE_PATH_LITERAL("//$C/${program_files}"),
108 FILE_PATH_LITERAL("${program_files}"));
109 CheckForSubstitution(FILE_PATH_LITERAL("//$C/${windows}"),
110 FILE_PATH_LITERAL("${windows}"));
111 CheckForSubstitution(FILE_PATH_LITERAL("//$C/${client_name}"),
112 FILE_PATH_LITERAL("${client_name}"));
117 } // namespace policy