OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "base/test/test_shortcut_win.h" | 5 #include "base/test/test_shortcut_win.h" |
6 | 6 |
7 #include <windows.h> | 7 #include <windows.h> |
8 #include <shlobj.h> | 8 #include <shlobj.h> |
9 #include <propkey.h> | 9 #include <propkey.h> |
10 | 10 |
11 #include "base/file_path.h" | 11 #include "base/file_path.h" |
12 #include "base/string16.h" | 12 #include "base/string16.h" |
13 #include "base/utf_string_conversions.h" | 13 #include "base/utf_string_conversions.h" |
14 #include "base/win/scoped_comptr.h" | 14 #include "base/win/scoped_comptr.h" |
15 #include "base/win/scoped_propvariant.h" | 15 #include "base/win/scoped_propvariant.h" |
16 #include "base/win/windows_version.h" | 16 #include "base/win/windows_version.h" |
17 #include "testing/gtest/include/gtest/gtest.h" | 17 #include "testing/gtest/include/gtest/gtest.h" |
18 | 18 |
19 namespace base { | 19 namespace base { |
20 namespace win { | 20 namespace win { |
21 | 21 |
22 namespace { | 22 namespace { |
23 | 23 |
24 // Validates |actual_path|'s LongPathName case-insensitively matches | 24 // Validates |actual_path|'s LongPathName case-insensitively matches |
25 // |expected_path|'s LongPathName. | 25 // |expected_path|'s LongPathName. |
26 void ValidatePathsAreEqual(const FilePath& expected_path, | 26 void ValidatePathsAreEqual(const base::FilePath& expected_path, |
27 const FilePath& actual_path) { | 27 const base::FilePath& actual_path) { |
28 wchar_t long_expected_path_chars[MAX_PATH] = {0}; | 28 wchar_t long_expected_path_chars[MAX_PATH] = {0}; |
29 wchar_t long_actual_path_chars[MAX_PATH] = {0}; | 29 wchar_t long_actual_path_chars[MAX_PATH] = {0}; |
30 | 30 |
31 // If |expected_path| is empty confirm immediately that |actual_path| is also | 31 // If |expected_path| is empty confirm immediately that |actual_path| is also |
32 // empty. | 32 // empty. |
33 if (expected_path.empty()) { | 33 if (expected_path.empty()) { |
34 EXPECT_TRUE(actual_path.empty()); | 34 EXPECT_TRUE(actual_path.empty()); |
35 return; | 35 return; |
36 } | 36 } |
37 | 37 |
38 // Proceed with LongPathName matching which will also confirm the paths exist. | 38 // Proceed with LongPathName matching which will also confirm the paths exist. |
39 EXPECT_NE(0U, ::GetLongPathName( | 39 EXPECT_NE(0U, ::GetLongPathName( |
40 expected_path.value().c_str(), long_expected_path_chars, MAX_PATH)) | 40 expected_path.value().c_str(), long_expected_path_chars, MAX_PATH)) |
41 << "Failed to get LongPathName of " << expected_path.value(); | 41 << "Failed to get LongPathName of " << expected_path.value(); |
42 EXPECT_NE(0U, ::GetLongPathName( | 42 EXPECT_NE(0U, ::GetLongPathName( |
43 actual_path.value().c_str(), long_actual_path_chars, MAX_PATH)) | 43 actual_path.value().c_str(), long_actual_path_chars, MAX_PATH)) |
44 << "Failed to get LongPathName of " << actual_path.value(); | 44 << "Failed to get LongPathName of " << actual_path.value(); |
45 | 45 |
46 FilePath long_expected_path(long_expected_path_chars); | 46 base::FilePath long_expected_path(long_expected_path_chars); |
47 FilePath long_actual_path(long_actual_path_chars); | 47 base::FilePath long_actual_path(long_actual_path_chars); |
48 EXPECT_FALSE(long_expected_path.empty()); | 48 EXPECT_FALSE(long_expected_path.empty()); |
49 EXPECT_FALSE(long_actual_path.empty()); | 49 EXPECT_FALSE(long_actual_path.empty()); |
50 | 50 |
51 EXPECT_EQ(long_expected_path, long_actual_path); | 51 EXPECT_EQ(long_expected_path, long_actual_path); |
52 } | 52 } |
53 | 53 |
54 } // namespace | 54 } // namespace |
55 | 55 |
56 void ValidateShortcut(const FilePath& shortcut_path, | 56 void ValidateShortcut(const base::FilePath& shortcut_path, |
57 const ShortcutProperties& properties) { | 57 const ShortcutProperties& properties) { |
58 ScopedComPtr<IShellLink> i_shell_link; | 58 ScopedComPtr<IShellLink> i_shell_link; |
59 ScopedComPtr<IPersistFile> i_persist_file; | 59 ScopedComPtr<IPersistFile> i_persist_file; |
60 | 60 |
61 wchar_t read_target[MAX_PATH] = {0}; | 61 wchar_t read_target[MAX_PATH] = {0}; |
62 wchar_t read_working_dir[MAX_PATH] = {0}; | 62 wchar_t read_working_dir[MAX_PATH] = {0}; |
63 wchar_t read_arguments[MAX_PATH] = {0}; | 63 wchar_t read_arguments[MAX_PATH] = {0}; |
64 wchar_t read_description[MAX_PATH] = {0}; | 64 wchar_t read_description[MAX_PATH] = {0}; |
65 wchar_t read_icon[MAX_PATH] = {0}; | 65 wchar_t read_icon[MAX_PATH] = {0}; |
66 int read_icon_index = 0; | 66 int read_icon_index = 0; |
(...skipping 13 matching lines...) Expand all Loading... |
80 // Load the shortcut. | 80 // Load the shortcut. |
81 EXPECT_TRUE(SUCCEEDED(hr = i_persist_file->Load( | 81 EXPECT_TRUE(SUCCEEDED(hr = i_persist_file->Load( |
82 shortcut_path.value().c_str(), 0))) << "Failed to load shortcut at " | 82 shortcut_path.value().c_str(), 0))) << "Failed to load shortcut at " |
83 << shortcut_path.value(); | 83 << shortcut_path.value(); |
84 if (FAILED(hr)) | 84 if (FAILED(hr)) |
85 return; | 85 return; |
86 | 86 |
87 if (properties.options & ShortcutProperties::PROPERTIES_TARGET) { | 87 if (properties.options & ShortcutProperties::PROPERTIES_TARGET) { |
88 EXPECT_TRUE(SUCCEEDED( | 88 EXPECT_TRUE(SUCCEEDED( |
89 i_shell_link->GetPath(read_target, MAX_PATH, NULL, SLGP_SHORTPATH))); | 89 i_shell_link->GetPath(read_target, MAX_PATH, NULL, SLGP_SHORTPATH))); |
90 ValidatePathsAreEqual(properties.target, FilePath(read_target)); | 90 ValidatePathsAreEqual(properties.target, base::FilePath(read_target)); |
91 } | 91 } |
92 | 92 |
93 if (properties.options & ShortcutProperties::PROPERTIES_WORKING_DIR) { | 93 if (properties.options & ShortcutProperties::PROPERTIES_WORKING_DIR) { |
94 EXPECT_TRUE(SUCCEEDED( | 94 EXPECT_TRUE(SUCCEEDED( |
95 i_shell_link->GetWorkingDirectory(read_working_dir, MAX_PATH))); | 95 i_shell_link->GetWorkingDirectory(read_working_dir, MAX_PATH))); |
96 ValidatePathsAreEqual(properties.working_dir, FilePath(read_working_dir)); | 96 ValidatePathsAreEqual(properties.working_dir, |
| 97 base::FilePath(read_working_dir)); |
97 } | 98 } |
98 | 99 |
99 if (properties.options & ShortcutProperties::PROPERTIES_ARGUMENTS) { | 100 if (properties.options & ShortcutProperties::PROPERTIES_ARGUMENTS) { |
100 EXPECT_TRUE(SUCCEEDED( | 101 EXPECT_TRUE(SUCCEEDED( |
101 i_shell_link->GetArguments(read_arguments, MAX_PATH))); | 102 i_shell_link->GetArguments(read_arguments, MAX_PATH))); |
102 EXPECT_EQ(properties.arguments, read_arguments); | 103 EXPECT_EQ(properties.arguments, read_arguments); |
103 } | 104 } |
104 | 105 |
105 if (properties.options & ShortcutProperties::PROPERTIES_DESCRIPTION) { | 106 if (properties.options & ShortcutProperties::PROPERTIES_DESCRIPTION) { |
106 EXPECT_TRUE(SUCCEEDED( | 107 EXPECT_TRUE(SUCCEEDED( |
107 i_shell_link->GetDescription(read_description, MAX_PATH))); | 108 i_shell_link->GetDescription(read_description, MAX_PATH))); |
108 EXPECT_EQ(properties.description, read_description); | 109 EXPECT_EQ(properties.description, read_description); |
109 } | 110 } |
110 | 111 |
111 if (properties.options & ShortcutProperties::PROPERTIES_ICON) { | 112 if (properties.options & ShortcutProperties::PROPERTIES_ICON) { |
112 EXPECT_TRUE(SUCCEEDED( | 113 EXPECT_TRUE(SUCCEEDED( |
113 i_shell_link->GetIconLocation(read_icon, MAX_PATH, &read_icon_index))); | 114 i_shell_link->GetIconLocation(read_icon, MAX_PATH, &read_icon_index))); |
114 ValidatePathsAreEqual(properties.icon, FilePath(read_icon)); | 115 ValidatePathsAreEqual(properties.icon, base::FilePath(read_icon)); |
115 EXPECT_EQ(properties.icon_index, read_icon_index); | 116 EXPECT_EQ(properties.icon_index, read_icon_index); |
116 } | 117 } |
117 | 118 |
118 if (GetVersion() >= VERSION_WIN7) { | 119 if (GetVersion() >= VERSION_WIN7) { |
119 ScopedComPtr<IPropertyStore> property_store; | 120 ScopedComPtr<IPropertyStore> property_store; |
120 EXPECT_TRUE(SUCCEEDED(hr = property_store.QueryFrom(i_shell_link))); | 121 EXPECT_TRUE(SUCCEEDED(hr = property_store.QueryFrom(i_shell_link))); |
121 if (FAILED(hr)) | 122 if (FAILED(hr)) |
122 return; | 123 return; |
123 | 124 |
124 if (properties.options & ShortcutProperties::PROPERTIES_APP_ID) { | 125 if (properties.options & ShortcutProperties::PROPERTIES_APP_ID) { |
(...skipping 26 matching lines...) Expand all Loading... |
151 break; | 152 break; |
152 default: | 153 default: |
153 ADD_FAILURE() << "Unexpected variant type: " << pv_dual_mode.get().vt; | 154 ADD_FAILURE() << "Unexpected variant type: " << pv_dual_mode.get().vt; |
154 } | 155 } |
155 } | 156 } |
156 } | 157 } |
157 } | 158 } |
158 | 159 |
159 } // namespace win | 160 } // namespace win |
160 } // namespace base | 161 } // namespace base |
OLD | NEW |