Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(687)

Unified Diff: base/file_util_unittest.cc

Issue 10914109: Refactoring and tests for the highly undertested file_util::CreateOrUpdateShortcutLink() method. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: better path matching Created 8 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: base/file_util_unittest.cc
diff --git a/base/file_util_unittest.cc b/base/file_util_unittest.cc
index 5a999839e79612fb5b3aca59c9be3149a6ad2e36..1104aeb765af2187170ba494d6d92f6c456c3946 100644
--- a/base/file_util_unittest.cc
+++ b/base/file_util_unittest.cc
@@ -6,6 +6,7 @@
#if defined(OS_WIN)
#include <windows.h>
+#include <objbase.h>
#include <shellapi.h>
#include <shlobj.h>
#include <tchar.h>
@@ -21,6 +22,8 @@
#include "base/file_util.h"
#include "base/path_service.h"
#include "base/scoped_temp_dir.h"
+#include "base/memory/scoped_ptr.h"
+#include "base/test/test_file_util.h"
#include "base/threading/platform_thread.h"
#include "base/utf_string_conversions.h"
#include "testing/gtest/include/gtest/gtest.h"
@@ -133,18 +136,6 @@ const wchar_t bogus_content[] = L"I'm cannon fodder.";
const int FILES_AND_DIRECTORIES =
file_util::FileEnumerator::FILES | file_util::FileEnumerator::DIRECTORIES;
-// file_util winds up using autoreleased objects on the Mac, so this needs
-// to be a PlatformTest
-class FileUtilTest : public PlatformTest {
- protected:
- virtual void SetUp() OVERRIDE {
- PlatformTest::SetUp();
- ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
- }
-
- ScopedTempDir temp_dir_;
-};
-
// Collects all the results from the given file enumerator, and provides an
// interface to query whether a given file is present.
class FindResultCollector {
@@ -307,6 +298,20 @@ static const struct dir_case {
#endif
};
+// file_util winds up using autoreleased objects on the Mac, so this needs
+// to be a PlatformTest
+class FileUtilTest : public PlatformTest {
+ protected:
+ virtual void SetUp() OVERRIDE {
+ PlatformTest::SetUp();
+ ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
+ ASSERT_TRUE(temp_dir_2_.CreateUniqueTempDir());
+ }
+
+ ScopedTempDir temp_dir_;
+ ScopedTempDir temp_dir_2_;
+};
+
TEST_F(FileUtilTest, CountFilesCreatedAfter) {
FilePath file_name =
temp_dir_.path().Append(FILE_PATH_LITERAL("f.txt"));
@@ -397,6 +402,169 @@ TEST_F(FileUtilTest, NormalizeFilePathBasic) {
#if defined(OS_WIN)
+class FileUtilShortcutTest : public FileUtilTest {
+ protected:
+ virtual void SetUp() OVERRIDE {
+ FileUtilTest::SetUp();
+
+ EXPECT_EQ(S_OK, CoInitialize(NULL));
+
+ link_file_ = temp_dir_.path().Append(L"My Link.lnk");
+
+ // Shortcut 1's properties
+ {
+ file_contents_ = string16(L"This is a target.");
+ const FilePath target_file(temp_dir_.path().Append(L"Target 1.txt"));
+ CreateTextFile(target_file, file_contents_);
+
+ link_properties_.set_target(target_file.value());
+ link_properties_.set_working_dir(temp_dir_.path().value());
+ link_properties_.set_arguments(L"--magic --awesome");
+ link_properties_.set_description(L"Chrome is awesome.");
+ link_properties_.set_icon(link_properties_.target, 4);
+ link_properties_.set_app_id(L"Chrome");
+ link_properties_.set_dual_mode(false);
+ }
+
+ // Shortcut 2's properties (all different from properties of shortcut 1).
+ {
+ file_contents_2_ = string16(L"This is another target.");
+ const FilePath target_file_2(temp_dir_.path().Append(L"Target 2.txt"));
+ CreateTextFile(target_file_2, file_contents_2_);
+
+ const FilePath icon_path_2(temp_dir_.path().Append(L"icon.ico"));
+ CreateTextFile(icon_path_2, L"A fake icon");
+
+ link_properties_2_.set_target(target_file_2.value());
+ link_properties_2_.set_working_dir(temp_dir_2_.path().value());
+ link_properties_2_.set_arguments(L"--super --crazy");
+ link_properties_2_.set_description(L"The best in the west.");
+ link_properties_2_.set_icon(icon_path_2.value(), 0);
+ link_properties_2_.set_app_id(L"Chrome.UserLevelCrazySuffix");
+ link_properties_2_.set_dual_mode(true);
+ }
+ }
+
+ virtual void TearDown() OVERRIDE {
+ CoUninitialize();
+ }
+
+ // The link file to be created/updated in the shortcut tests below.
+ FilePath link_file_;
+
+ // Properties for the created shortcut.
+ string16 file_contents_;
+ file_util::ShortcutProperties link_properties_;
+
+ // Properties for the updated shortcut.
+ string16 file_contents_2_;
+ file_util::ShortcutProperties link_properties_2_;
+};
+
+TEST_F(FileUtilShortcutTest, CreateShortcut) {
+ file_util::ShortcutProperties only_target_properties;
+ only_target_properties.set_target(link_properties_.target);
+
+ ASSERT_TRUE(file_util::CreateOrUpdateShortcutLink(
+ link_file_.value().c_str(), only_target_properties,
+ file_util::SHORTCUT_CREATE_ALWAYS));
+
+ FilePath resolved_name;
+ EXPECT_TRUE(file_util::ResolveShortcut(link_file_, &resolved_name, NULL));
+ const string16 read_contents(ReadTextFile(resolved_name));
+ EXPECT_EQ(file_contents_, read_contents);
+}
+
+TEST_F(FileUtilShortcutTest, CreateShortcutWithOnlySomeProperties) {
+ file_util::ShortcutProperties target_and_args_properties;
+ target_and_args_properties.set_target(link_properties_.target);
+ target_and_args_properties.set_arguments(link_properties_.arguments);
+
+ ASSERT_TRUE(file_util::CreateOrUpdateShortcutLink(
+ link_file_.value().c_str(), target_and_args_properties,
+ file_util::SHORTCUT_CREATE_ALWAYS));
+
+ ASSERT_EQ(file_util::VERIFY_SHORTCUT_SUCCESS,
+ file_util::VerifyShortcut(link_file_.value(),
+ target_and_args_properties));
+}
+
+TEST_F(FileUtilShortcutTest, CreateShortcutVerifyProperties) {
+ ASSERT_TRUE(file_util::CreateOrUpdateShortcutLink(
+ link_file_.value().c_str(), link_properties_,
+ file_util::SHORTCUT_CREATE_ALWAYS));
+
+ ASSERT_EQ(file_util::VERIFY_SHORTCUT_SUCCESS,
+ file_util::VerifyShortcut(link_file_.value(), link_properties_));
+}
+
+TEST_F(FileUtilShortcutTest, UpdateShortcutVerifyProperties) {
+ ASSERT_TRUE(file_util::CreateOrUpdateShortcutLink(
+ link_file_.value().c_str(), link_properties_,
+ file_util::SHORTCUT_CREATE_ALWAYS));
+
+ ASSERT_TRUE(file_util::CreateOrUpdateShortcutLink(
+ link_file_.value().c_str(), link_properties_2_,
+ file_util::SHORTCUT_UPDATE_EXISTING));
+
+ ASSERT_EQ(file_util::VERIFY_SHORTCUT_SUCCESS,
+ file_util::VerifyShortcut(link_file_.value(), link_properties_2_));
+}
+
+TEST_F(FileUtilShortcutTest, UpdateShortcutUpdateOnlyTarget) {
+ ASSERT_TRUE(file_util::CreateOrUpdateShortcutLink(
+ link_file_.value().c_str(), link_properties_,
+ file_util::SHORTCUT_CREATE_ALWAYS));
+
+ file_util::ShortcutProperties update_only_target_properties;
+ update_only_target_properties.set_target(link_properties_2_.target);
+
+ ASSERT_TRUE(file_util::CreateOrUpdateShortcutLink(
+ link_file_.value().c_str(), update_only_target_properties,
+ file_util::SHORTCUT_UPDATE_EXISTING));
+
+ file_util::ShortcutProperties expected_properties = link_properties_;
+ expected_properties.set_target(link_properties_2_.target);
+ ASSERT_EQ(file_util::VERIFY_SHORTCUT_SUCCESS,
+ file_util::VerifyShortcut(link_file_.value(), expected_properties));
+}
+
+TEST_F(FileUtilShortcutTest, UpdateShortcutMakeDualMode) {
+ ASSERT_TRUE(file_util::CreateOrUpdateShortcutLink(
+ link_file_.value().c_str(), link_properties_,
+ file_util::SHORTCUT_CREATE_ALWAYS));
+
+ file_util::ShortcutProperties make_dual_mode_properties;
+ make_dual_mode_properties.set_dual_mode(true);
+
+ ASSERT_TRUE(file_util::CreateOrUpdateShortcutLink(
+ link_file_.value().c_str(), make_dual_mode_properties,
+ file_util::SHORTCUT_UPDATE_EXISTING));
+
+ file_util::ShortcutProperties expected_properties = link_properties_;
+ expected_properties.set_dual_mode(true);
+ ASSERT_EQ(file_util::VERIFY_SHORTCUT_SUCCESS,
+ file_util::VerifyShortcut(link_file_.value(), expected_properties));
+}
+
+TEST_F(FileUtilShortcutTest, UpdateShortcutRemoveDualMode) {
+ ASSERT_TRUE(file_util::CreateOrUpdateShortcutLink(
+ link_file_.value().c_str(), link_properties_2_,
+ file_util::SHORTCUT_CREATE_ALWAYS));
+
+ file_util::ShortcutProperties remove_dual_mode_properties;
+ remove_dual_mode_properties.set_dual_mode(false);
+
+ ASSERT_TRUE(file_util::CreateOrUpdateShortcutLink(
+ link_file_.value().c_str(), remove_dual_mode_properties,
+ file_util::SHORTCUT_UPDATE_EXISTING));
+
+ file_util::ShortcutProperties expected_properties = link_properties_2_;
+ expected_properties.set_dual_mode(false);
+ ASSERT_EQ(file_util::VERIFY_SHORTCUT_SUCCESS,
+ file_util::VerifyShortcut(link_file_.value(), expected_properties));
+}
+
TEST_F(FileUtilTest, NormalizeFilePathReparsePoints) {
// Build the following directory structure:
//
@@ -1639,28 +1807,6 @@ TEST_F(FileUtilTest, ResolveShortcutTest) {
CoUninitialize();
}
-TEST_F(FileUtilTest, CreateShortcutTest) {
- const wchar_t* file_contents = L"This is another target.";
- FilePath target_file = temp_dir_.path().Append(L"Target1.txt");
- CreateTextFile(target_file, file_contents);
-
- FilePath link_file = temp_dir_.path().Append(L"Link1.lnk");
-
- CoInitialize(NULL);
- EXPECT_TRUE(file_util::CreateOrUpdateShortcutLink(
- target_file.value().c_str(), link_file.value().c_str(), NULL,
- NULL, NULL, NULL, 0, NULL,
- file_util::SHORTCUT_CREATE_ALWAYS));
- FilePath resolved_name;
- EXPECT_TRUE(file_util::ResolveShortcut(link_file, &resolved_name, NULL));
- std::wstring read_contents = ReadTextFile(resolved_name);
- EXPECT_EQ(file_contents, read_contents);
-
- DeleteFile(target_file.value().c_str());
- DeleteFile(link_file.value().c_str());
- CoUninitialize();
-}
-
TEST_F(FileUtilTest, CopyAndDeleteDirectoryTest) {
// Create a directory
FilePath dir_name_from =
« base/file_util.h ('K') | « base/file_util.h ('k') | base/file_util_win.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698