OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/shell_integration_linux.h" | 5 #include "chrome/browser/shell_integration_linux.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <cstdlib> | 8 #include <cstdlib> |
9 #include <map> | 9 #include <map> |
10 #include <vector> | 10 #include <vector> |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
92 | 92 |
93 } // namespace | 93 } // namespace |
94 | 94 |
95 TEST(ShellIntegrationTest, GetDataWriteLocation) { | 95 TEST(ShellIntegrationTest, GetDataWriteLocation) { |
96 base::MessageLoop message_loop; | 96 base::MessageLoop message_loop; |
97 content::TestBrowserThread file_thread(BrowserThread::FILE, &message_loop); | 97 content::TestBrowserThread file_thread(BrowserThread::FILE, &message_loop); |
98 | 98 |
99 // Test that it returns $XDG_DATA_HOME. | 99 // Test that it returns $XDG_DATA_HOME. |
100 { | 100 { |
101 MockEnvironment env; | 101 MockEnvironment env; |
102 env.Set("HOME", "/home/user"); | 102 base::ScopedPathOverride home_override(base::DIR_HOME, |
| 103 base::FilePath("/home/user"), |
| 104 true /* absolute? */, |
| 105 false /* create? */); |
103 env.Set("XDG_DATA_HOME", "/user/path"); | 106 env.Set("XDG_DATA_HOME", "/user/path"); |
104 base::FilePath path; | 107 base::FilePath path = GetDataWriteLocation(&env); |
105 ASSERT_TRUE(GetDataWriteLocation(&env, &path)); | |
106 EXPECT_EQ("/user/path", path.value()); | 108 EXPECT_EQ("/user/path", path.value()); |
107 } | 109 } |
108 | 110 |
109 // Test that $XDG_DATA_HOME falls back to $HOME/.local/share. | 111 // Test that $XDG_DATA_HOME falls back to $HOME/.local/share. |
110 { | 112 { |
111 MockEnvironment env; | 113 MockEnvironment env; |
112 env.Set("HOME", "/home/user"); | 114 base::ScopedPathOverride home_override(base::DIR_HOME, |
113 base::FilePath path; | 115 base::FilePath("/home/user"), |
114 ASSERT_TRUE(GetDataWriteLocation(&env, &path)); | 116 true /* absolute? */, |
| 117 false /* create? */); |
| 118 base::FilePath path = GetDataWriteLocation(&env); |
115 EXPECT_EQ("/home/user/.local/share", path.value()); | 119 EXPECT_EQ("/home/user/.local/share", path.value()); |
116 } | 120 } |
117 | |
118 // Test that if neither $XDG_DATA_HOME nor $HOME are specified, it fails. | |
119 { | |
120 MockEnvironment env; | |
121 base::FilePath path; | |
122 ASSERT_FALSE(GetDataWriteLocation(&env, &path)); | |
123 } | |
124 } | 121 } |
125 | 122 |
126 TEST(ShellIntegrationTest, GetDataSearchLocations) { | 123 TEST(ShellIntegrationTest, GetDataSearchLocations) { |
127 base::MessageLoop message_loop; | 124 base::MessageLoop message_loop; |
128 content::TestBrowserThread file_thread(BrowserThread::FILE, &message_loop); | 125 content::TestBrowserThread file_thread(BrowserThread::FILE, &message_loop); |
129 | 126 |
130 // Test that it returns $XDG_DATA_HOME + $XDG_DATA_DIRS. | 127 // Test that it returns $XDG_DATA_HOME + $XDG_DATA_DIRS. |
131 { | 128 { |
132 MockEnvironment env; | 129 MockEnvironment env; |
133 env.Set("HOME", "/home/user"); | 130 base::ScopedPathOverride home_override(base::DIR_HOME, |
| 131 base::FilePath("/home/user"), |
| 132 true /* absolute? */, |
| 133 false /* create? */); |
134 env.Set("XDG_DATA_HOME", "/user/path"); | 134 env.Set("XDG_DATA_HOME", "/user/path"); |
135 env.Set("XDG_DATA_DIRS", "/system/path/1:/system/path/2"); | 135 env.Set("XDG_DATA_DIRS", "/system/path/1:/system/path/2"); |
136 EXPECT_THAT( | 136 EXPECT_THAT( |
137 FilePathsToStrings(GetDataSearchLocations(&env)), | 137 FilePathsToStrings(GetDataSearchLocations(&env)), |
138 ElementsAre("/user/path", | 138 ElementsAre("/user/path", |
139 "/system/path/1", | 139 "/system/path/1", |
140 "/system/path/2")); | 140 "/system/path/2")); |
141 } | 141 } |
142 | 142 |
143 // Test that $XDG_DATA_HOME falls back to $HOME/.local/share. | 143 // Test that $XDG_DATA_HOME falls back to $HOME/.local/share. |
144 { | 144 { |
145 MockEnvironment env; | 145 MockEnvironment env; |
146 env.Set("HOME", "/home/user"); | 146 base::ScopedPathOverride home_override(base::DIR_HOME, |
| 147 base::FilePath("/home/user"), |
| 148 true /* absolute? */, |
| 149 false /* create? */); |
147 env.Set("XDG_DATA_DIRS", "/system/path/1:/system/path/2"); | 150 env.Set("XDG_DATA_DIRS", "/system/path/1:/system/path/2"); |
148 EXPECT_THAT( | 151 EXPECT_THAT( |
149 FilePathsToStrings(GetDataSearchLocations(&env)), | 152 FilePathsToStrings(GetDataSearchLocations(&env)), |
150 ElementsAre("/home/user/.local/share", | 153 ElementsAre("/home/user/.local/share", |
151 "/system/path/1", | 154 "/system/path/1", |
152 "/system/path/2")); | 155 "/system/path/2")); |
153 } | 156 } |
154 | 157 |
155 // Test that if neither $XDG_DATA_HOME nor $HOME are specified, it still | 158 // Test that if neither $XDG_DATA_HOME nor $HOME are specified, it still |
156 // succeeds. | 159 // succeeds. |
157 { | 160 { |
158 MockEnvironment env; | 161 MockEnvironment env; |
159 env.Set("XDG_DATA_DIRS", "/system/path/1:/system/path/2"); | 162 env.Set("XDG_DATA_DIRS", "/system/path/1:/system/path/2"); |
160 EXPECT_THAT( | 163 std::vector<std::string> results = |
161 FilePathsToStrings(GetDataSearchLocations(&env)), | 164 FilePathsToStrings(GetDataSearchLocations(&env)); |
162 ElementsAre("/system/path/1", | 165 ASSERT_EQ(3U, results.size()); |
163 "/system/path/2")); | 166 EXPECT_FALSE(results[0].empty()); |
| 167 EXPECT_EQ("/system/path/1", results[1]); |
| 168 EXPECT_EQ("/system/path/2", results[2]); |
164 } | 169 } |
165 | 170 |
166 // Test that $XDG_DATA_DIRS falls back to the two default paths. | 171 // Test that $XDG_DATA_DIRS falls back to the two default paths. |
167 { | 172 { |
168 MockEnvironment env; | 173 MockEnvironment env; |
169 env.Set("HOME", "/home/user"); | 174 base::ScopedPathOverride home_override(base::DIR_HOME, |
| 175 base::FilePath("/home/user"), |
| 176 true /* absolute? */, |
| 177 false /* create? */); |
170 env.Set("XDG_DATA_HOME", "/user/path"); | 178 env.Set("XDG_DATA_HOME", "/user/path"); |
171 EXPECT_THAT( | 179 EXPECT_THAT( |
172 FilePathsToStrings(GetDataSearchLocations(&env)), | 180 FilePathsToStrings(GetDataSearchLocations(&env)), |
173 ElementsAre("/user/path", | 181 ElementsAre("/user/path", |
174 "/usr/local/share", | 182 "/usr/local/share", |
175 "/usr/share")); | 183 "/usr/share")); |
176 } | 184 } |
177 } | 185 } |
178 | 186 |
179 TEST(ShellIntegrationTest, GetExistingShortcutLocations) { | 187 TEST(ShellIntegrationTest, GetExistingShortcutLocations) { |
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
309 GetExistingShortcutContents(&env, kTemplateFilepath, &contents)); | 317 GetExistingShortcutContents(&env, kTemplateFilepath, &contents)); |
310 EXPECT_EQ(kTestData1, contents); | 318 EXPECT_EQ(kTestData1, contents); |
311 } | 319 } |
312 | 320 |
313 // Test that it falls back to $HOME/.local/share/applications. | 321 // Test that it falls back to $HOME/.local/share/applications. |
314 { | 322 { |
315 base::ScopedTempDir temp_dir; | 323 base::ScopedTempDir temp_dir; |
316 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); | 324 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); |
317 | 325 |
318 MockEnvironment env; | 326 MockEnvironment env; |
319 env.Set("HOME", temp_dir.path().value()); | 327 base::ScopedPathOverride home_override(base::DIR_HOME, |
| 328 temp_dir.path(), |
| 329 true /* absolute? */, |
| 330 false /* create? */); |
320 ASSERT_TRUE(base::CreateDirectory( | 331 ASSERT_TRUE(base::CreateDirectory( |
321 temp_dir.path().Append(".local/share/applications"))); | 332 temp_dir.path().Append(".local/share/applications"))); |
322 ASSERT_TRUE(WriteString( | 333 ASSERT_TRUE(WriteString( |
323 temp_dir.path().Append(".local/share/applications") | 334 temp_dir.path().Append(".local/share/applications") |
324 .Append(kTemplateFilename), | 335 .Append(kTemplateFilename), |
325 kTestData1)); | 336 kTestData1)); |
326 std::string contents; | 337 std::string contents; |
327 ASSERT_TRUE( | 338 ASSERT_TRUE( |
328 GetExistingShortcutContents(&env, kTemplateFilepath, &contents)); | 339 GetExistingShortcutContents(&env, kTemplateFilepath, &contents)); |
329 EXPECT_EQ(kTestData1, contents); | 340 EXPECT_EQ(kTestData1, contents); |
(...skipping 304 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
634 | 645 |
635 for (size_t i = 0; i < arraysize(test_cases); i++) { | 646 for (size_t i = 0; i < arraysize(test_cases); i++) { |
636 SCOPED_TRACE(i); | 647 SCOPED_TRACE(i); |
637 EXPECT_EQ(test_cases[i].expected_output, | 648 EXPECT_EQ(test_cases[i].expected_output, |
638 GetDirectoryFileContents(base::ASCIIToUTF16(test_cases[i].title), | 649 GetDirectoryFileContents(base::ASCIIToUTF16(test_cases[i].title), |
639 test_cases[i].icon_name)); | 650 test_cases[i].icon_name)); |
640 } | 651 } |
641 } | 652 } |
642 | 653 |
643 } // namespace shell_integration_linux | 654 } // namespace shell_integration_linux |
OLD | NEW |