| Index: base/file_util_unittest.cc
|
| diff --git a/base/file_util_unittest.cc b/base/file_util_unittest.cc
|
| index 0cade2ae6f07be030ff4c5056e5ddba8233c0da8..ee73ef30b47a10519d736913afd01497d7d23f05 100644
|
| --- a/base/file_util_unittest.cc
|
| +++ b/base/file_util_unittest.cc
|
| @@ -1,4 +1,4 @@
|
| -// Copyright (c) 2011 The Chromium Authors. All rights reserved.
|
| +// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| @@ -580,6 +580,76 @@ TEST_F(FileUtilTest, NormalizeFilePathReparsePoints) {
|
| &normalized_path));
|
| }
|
|
|
| +TEST_F(FileUtilTest, DevicePathToDriveLetter) {
|
| + // Get a drive letter.
|
| + std::wstring real_drive_letter = temp_dir_.path().value().substr(0, 2);
|
| + if (!isalpha(real_drive_letter[0]) || ':' != real_drive_letter[1]) {
|
| + LOG(ERROR) << "Can't get a drive letter to test with.";
|
| + return;
|
| + }
|
| +
|
| + // Get the NT style path to that drive.
|
| + wchar_t device_path[MAX_PATH] = {'\0'};
|
| + ASSERT_TRUE(
|
| + ::QueryDosDevice(real_drive_letter.c_str(), device_path, MAX_PATH));
|
| + FilePath actual_device_path(device_path);
|
| + FilePath win32_path;
|
| +
|
| + // Run DevicePathToDriveLetterPath() on the NT style path we got from
|
| + // QueryDosDevice(). Expect the drive letter we started with.
|
| + ASSERT_TRUE(file_util::DevicePathToDriveLetterPath(actual_device_path,
|
| + &win32_path));
|
| + ASSERT_EQ(real_drive_letter, win32_path.value());
|
| +
|
| + // Add some directories to the path. Expect those extra path componenets
|
| + // to be preserved.
|
| + FilePath kRelativePath(FPL("dir1\\dir2\\file.txt"));
|
| + ASSERT_TRUE(file_util::DevicePathToDriveLetterPath(
|
| + actual_device_path.Append(kRelativePath),
|
| + &win32_path));
|
| + EXPECT_EQ(FilePath(real_drive_letter + L"\\").Append(kRelativePath).value(),
|
| + win32_path.value());
|
| +
|
| + // Deform the real path so that it is invalid by removing the last four
|
| + // characters. The way windows names devices that are hard disks
|
| + // (\Device\HardDiskVolume${NUMBER}) guarantees that the string is longer
|
| + // than three characters. The only way the truncated string could be a
|
| + // real drive is if more than 10^3 disks are mounted:
|
| + // \Device\HardDiskVolume10000 would be truncated to \Device\HardDiskVolume1
|
| + // Check that DevicePathToDriveLetterPath fails.
|
| + int path_length = actual_device_path.value().length();
|
| + int new_length = path_length - 4;
|
| + ASSERT_LT(0, new_length);
|
| + FilePath prefix_of_real_device_path(
|
| + actual_device_path.value().substr(0, new_length));
|
| + ASSERT_FALSE(file_util::DevicePathToDriveLetterPath(
|
| + prefix_of_real_device_path,
|
| + &win32_path));
|
| +
|
| + ASSERT_FALSE(file_util::DevicePathToDriveLetterPath(
|
| + prefix_of_real_device_path.Append(kRelativePath),
|
| + &win32_path));
|
| +
|
| + // Deform the real path so that it is invalid by adding some characters. For
|
| + // example, if C: maps to \Device\HardDiskVolume8, then we simulate a
|
| + // request for the drive letter whose native path is
|
| + // \Device\HardDiskVolume812345 . We assume such a device does not exist,
|
| + // because drives are numbered in order and mounting 112345 hard disks will
|
| + // never happen.
|
| + const FilePath::StringType kExtraChars = FPL("12345");
|
| +
|
| + FilePath real_device_path_plus_numbers(
|
| + actual_device_path.value() + kExtraChars);
|
| +
|
| + ASSERT_FALSE(file_util::DevicePathToDriveLetterPath(
|
| + real_device_path_plus_numbers,
|
| + &win32_path));
|
| +
|
| + ASSERT_FALSE(file_util::DevicePathToDriveLetterPath(
|
| + real_device_path_plus_numbers.Append(kRelativePath),
|
| + &win32_path));
|
| +}
|
| +
|
| TEST_F(FileUtilTest, GetPlatformFileInfoForDirectory) {
|
| FilePath empty_dir = temp_dir_.path().Append(FPL("gpfi_test"));
|
| ASSERT_TRUE(file_util::CreateDirectory(empty_dir));
|
|
|