| OLD | NEW |
| (Empty) | |
| 1 // Copyright 2017 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. |
| 4 |
| 5 #include <stddef.h> |
| 6 |
| 7 #include "base/macros.h" |
| 8 #include "testing/gtest/include/gtest/gtest.h" |
| 9 #include "ui/shell_dialogs/select_file_dialog.h" |
| 10 |
| 11 TEST(ShellDialogs, ShortenFileNameIfNeeded) { |
| 12 struct ShortenFileNameTestCase { |
| 13 base::FilePath::StringType input; |
| 14 base::FilePath::StringType expected; |
| 15 } test_cases[] = { |
| 16 // Paths with short paths/file names don't get shortened. |
| 17 {FILE_PATH_LITERAL("folder1111/folder2222/file1.html"), |
| 18 FILE_PATH_LITERAL("folder1111/folder2222/file1.html")}, |
| 19 |
| 20 // Path with long filename gets shortened to 255 chars |
| 21 {FILE_PATH_LITERAL("folder1111/" |
| 22 "abcdefghijklmnopqrstuvwxyz1234abcdefghijklmnopqrstuvw" |
| 23 "xyz1234abcdefghijklmnopqrstuvwxyz1234abcdefghijklmnop" |
| 24 "qrstuvwxyz1234abcdefghijklmnopqrstuvwxyz1234abcdefghi" |
| 25 "jklmnopqrstuvwxyz1234abcdefghijklmnopqrstuvwxyz1234ab" |
| 26 "cdefghijklmnopqrstuvwxyz1234abcdefghijklmnopqrstuvwxy" |
| 27 "z1234.html"), |
| 28 FILE_PATH_LITERAL("folder1111/" |
| 29 "abcdefghijklmnopqrstuvwxyz1234abcdefghijklmnopqrstuvw" |
| 30 "xyz1234abcdefghijklmnopqrstuvwxyz1234abcdefghijklmnop" |
| 31 "qrstuvwxyz1234abcdefghijklmnopqrstuvwxyz1234abcdefghi" |
| 32 "jklmnopqrstuvwxyz1234abcdefghijklmnopqrstuvwxyz1234ab" |
| 33 "cdefghijklmnopqrstuvwxyz1234abcdefghij.html")}, |
| 34 |
| 35 // Long path but short filename is not truncated, handled by system open |
| 36 // file dialog. |
| 37 {FILE_PATH_LITERAL( |
| 38 "folder1111/folder2222/folder3333/folder4444/folder5555/folder6666/" |
| 39 "folder7777/folder8888/folder9999/folder0000/folder1111/folder2222/" |
| 40 "folder3333/folder4444/folder5555/folder6666/folder7777/folder8888/" |
| 41 "folder9999/folder0000/folder1111/folder2222/folder3333/folder4444/" |
| 42 "folder5555/folder6666/folder7777/folder8888/folder9999/folder0000/" |
| 43 "file1.pdf"), |
| 44 FILE_PATH_LITERAL( |
| 45 "folder1111/folder2222/folder3333/folder4444/folder5555/folder6666/" |
| 46 "folder7777/folder8888/folder9999/folder0000/folder1111/folder2222/" |
| 47 "folder3333/folder4444/folder5555/folder6666/folder7777/folder8888/" |
| 48 "folder9999/folder0000/folder1111/folder2222/folder3333/folder4444/" |
| 49 "folder5555/folder6666/folder7777/folder8888/folder9999/folder0000/" |
| 50 "file1.pdf")}, |
| 51 |
| 52 // Long extension with total file name length < 255 is not truncated. |
| 53 {FILE_PATH_LITERAL("folder1111/folder2222/" |
| 54 "file1." |
| 55 "abcdefghijklmnopqrstuvwxyz1234abcdefghijklmnopqrstuvw" |
| 56 "xyz1234abcdefghijklmnopqrstuvwxyz1234abcdefghijklmnop" |
| 57 "qrstuvwxyz1234abcdefghijklmnopqrstuvwxyz1234abcdefghi" |
| 58 "jklmnopqrstuvwxyz1234abcdefghijklmnopqrstuvwxyz1234"), |
| 59 FILE_PATH_LITERAL("folder1111/folder2222/" |
| 60 "file1." |
| 61 "abcdefghijklmnopqrstuvwxyz1234abcdefghijklmnopqrstuvw" |
| 62 "xyz1234abcdefghijklmnopqrstuvwxyz1234abcdefghijklmnop" |
| 63 "qrstuvwxyz1234abcdefghijklmnopqrstuvwxyz1234abcdefghi" |
| 64 "jklmnopqrstuvwxyz1234abcdefghijklmnopqrstuvwxyz123" |
| 65 "4")}, |
| 66 |
| 67 // Long extension, medium length file name is truncated so that total |
| 68 // file name length = 255 |
| 69 {FILE_PATH_LITERAL("folder1111/folder2222/" |
| 70 "file1234567890123456789012345678901234567890123456789" |
| 71 "0." |
| 72 "abcdefghijklmnopqrstuvwxyz1234abcdefghijklmnopqrstuvw" |
| 73 "xyz1234abcdefghijklmnopqrstuvwxyz1234abcdefghijklmnop" |
| 74 "qrstuvwxyz1234abcdefghijklmnopqrstuvwxyz1234abcdefghi" |
| 75 "jklmnopqrstuvwxyz1234abcdefghijklmnopqrstuvwxyz1234"), |
| 76 FILE_PATH_LITERAL("folder1111/folder2222/" |
| 77 "file1234567890123456789012345678901234567890123456789" |
| 78 "0." |
| 79 "abcdefghijklmnopqrstuvwxyz1234abcdefghijklmnopqrstuvw" |
| 80 "xyz1234abcdefghijklmnopqrstuvwxyz1234abcdefghijklmnop" |
| 81 "qrstuvwxyz1234abcdefghijklmnopqrstuvwxyz1234abcdefghi" |
| 82 "jklmnopqrstuvwxyz1234abcdefghijklmnopqrst")}, |
| 83 |
| 84 // Long extension and long file name -> extension truncated to 13 chars |
| 85 // and file name truncated to 255-13. |
| 86 {FILE_PATH_LITERAL("folder1111/folder2222/" |
| 87 "abcdefghijklmnopqrstuvwxyz1234abcdefghijklmnopqrstuvw" |
| 88 "xyz1234abcdefghijklmnopqrstuvwxyz1234abcdefghijklmnop" |
| 89 "qrstuvwxyz1234abcdefghijklmnopqrstuvwxyz1234abcdefghi" |
| 90 "jklmnopqrstuvwxyz1234abcdefghijklmnopqrstuvwxyz1234ab" |
| 91 "cdefghijklmnopqrstuvwxyz1234abcdefghijklmnopqrstuvwxy" |
| 92 "z1234." |
| 93 "abcdefghijklmnopqrstuvwxyz1234abcdefghijklmnopqrstuvw" |
| 94 "xyz1234abcdefghijklmnopqrstuvwxyz1234abcdefghijklmnop" |
| 95 "qrstuvwxyz1234abcdefghijklmnopqrstuvwxyz1234abcdefghi" |
| 96 "jklmnopqrstuvwxyz1234abcdefghijklmnopqrstuvwxyz1234"), |
| 97 FILE_PATH_LITERAL("folder1111/folder2222/" |
| 98 "abcdefghijklmnopqrstuvwxyz1234abcdefghijklmnopqrstuvw" |
| 99 "xyz1234abcdefghijklmnopqrstuvwxyz1234abcdefghijklmnop" |
| 100 "qrstuvwxyz1234abcdefghijklmnopqrstuvwxyz1234abcdefghi" |
| 101 "jklmnopqrstuvwxyz1234abcdefghijklmnopqrstuvwxyz1234ab" |
| 102 "cdefghijklmnopqrstuvwxyz1234ab.abcdefghijkl")}}; |
| 103 |
| 104 for (size_t i = 0; i < arraysize(test_cases); ++i) { |
| 105 base::FilePath input = |
| 106 base::FilePath(test_cases[i].input).NormalizePathSeparators(); |
| 107 base::FilePath output = |
| 108 base::FilePath(test_cases[i].expected).NormalizePathSeparators(); |
| 109 EXPECT_EQ(output.value(), |
| 110 ui::SelectFileDialog::GetShortenedFilePath(input).value()); |
| 111 EXPECT_LE(ui::SelectFileDialog::GetShortenedFilePath(input) |
| 112 .BaseName() |
| 113 .value() |
| 114 .length(), |
| 115 255u); |
| 116 } |
| 117 } |
| OLD | NEW |