123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- // Copyright 2017 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.
- #include "ui/shell_dialogs/select_file_dialog.h"
- #include <stddef.h>
- #include "testing/gtest/include/gtest/gtest.h"
- TEST(ShellDialogs, ShortenFileNameIfNeeded) {
- struct ShortenFileNameTestCase {
- base::FilePath::StringType input;
- base::FilePath::StringType expected;
- } test_cases[] = {
- // Paths with short paths/file names don't get shortened.
- {FILE_PATH_LITERAL("folder1111/folder2222/file1.html"),
- FILE_PATH_LITERAL("folder1111/folder2222/file1.html")},
- // Path with long filename gets shortened to 255 chars
- {FILE_PATH_LITERAL("folder1111/"
- "abcdefghijklmnopqrstuvwxyz1234abcdefghijklmnopqrstuvw"
- "xyz1234abcdefghijklmnopqrstuvwxyz1234abcdefghijklmnop"
- "qrstuvwxyz1234abcdefghijklmnopqrstuvwxyz1234abcdefghi"
- "jklmnopqrstuvwxyz1234abcdefghijklmnopqrstuvwxyz1234ab"
- "cdefghijklmnopqrstuvwxyz1234abcdefghijklmnopqrstuvwxy"
- "z1234.html"),
- FILE_PATH_LITERAL("folder1111/"
- "abcdefghijklmnopqrstuvwxyz1234abcdefghijklmnopqrstuvw"
- "xyz1234abcdefghijklmnopqrstuvwxyz1234abcdefghijklmnop"
- "qrstuvwxyz1234abcdefghijklmnopqrstuvwxyz1234abcdefghi"
- "jklmnopqrstuvwxyz1234abcdefghijklmnopqrstuvwxyz1234ab"
- "cdefghijklmnopqrstuvwxyz1234abcdefghij.html")},
- // Long path but short filename is not truncated, handled by system open
- // file dialog.
- {FILE_PATH_LITERAL(
- "folder1111/folder2222/folder3333/folder4444/folder5555/folder6666/"
- "folder7777/folder8888/folder9999/folder0000/folder1111/folder2222/"
- "folder3333/folder4444/folder5555/folder6666/folder7777/folder8888/"
- "folder9999/folder0000/folder1111/folder2222/folder3333/folder4444/"
- "folder5555/folder6666/folder7777/folder8888/folder9999/folder0000/"
- "file1.pdf"),
- FILE_PATH_LITERAL(
- "folder1111/folder2222/folder3333/folder4444/folder5555/folder6666/"
- "folder7777/folder8888/folder9999/folder0000/folder1111/folder2222/"
- "folder3333/folder4444/folder5555/folder6666/folder7777/folder8888/"
- "folder9999/folder0000/folder1111/folder2222/folder3333/folder4444/"
- "folder5555/folder6666/folder7777/folder8888/folder9999/folder0000/"
- "file1.pdf")},
- // Long extension with total file name length < 255 is not truncated.
- {FILE_PATH_LITERAL("folder1111/folder2222/"
- "file1."
- "abcdefghijklmnopqrstuvwxyz1234abcdefghijklmnopqrstuvw"
- "xyz1234abcdefghijklmnopqrstuvwxyz1234abcdefghijklmnop"
- "qrstuvwxyz1234abcdefghijklmnopqrstuvwxyz1234abcdefghi"
- "jklmnopqrstuvwxyz1234abcdefghijklmnopqrstuvwxyz1234"),
- FILE_PATH_LITERAL("folder1111/folder2222/"
- "file1."
- "abcdefghijklmnopqrstuvwxyz1234abcdefghijklmnopqrstuvw"
- "xyz1234abcdefghijklmnopqrstuvwxyz1234abcdefghijklmnop"
- "qrstuvwxyz1234abcdefghijklmnopqrstuvwxyz1234abcdefghi"
- "jklmnopqrstuvwxyz1234abcdefghijklmnopqrstuvwxyz123"
- "4")},
- // Long extension, medium length file name is truncated so that total
- // file name length = 255
- {FILE_PATH_LITERAL("folder1111/folder2222/"
- "file1234567890123456789012345678901234567890123456789"
- "0."
- "abcdefghijklmnopqrstuvwxyz1234abcdefghijklmnopqrstuvw"
- "xyz1234abcdefghijklmnopqrstuvwxyz1234abcdefghijklmnop"
- "qrstuvwxyz1234abcdefghijklmnopqrstuvwxyz1234abcdefghi"
- "jklmnopqrstuvwxyz1234abcdefghijklmnopqrstuvwxyz1234"),
- FILE_PATH_LITERAL("folder1111/folder2222/"
- "file1234567890123456789012345678901234567890123456789"
- "0."
- "abcdefghijklmnopqrstuvwxyz1234abcdefghijklmnopqrstuvw"
- "xyz1234abcdefghijklmnopqrstuvwxyz1234abcdefghijklmnop"
- "qrstuvwxyz1234abcdefghijklmnopqrstuvwxyz1234abcdefghi"
- "jklmnopqrstuvwxyz1234abcdefghijklmnopqrst")},
- // Long extension and long file name -> extension truncated to 13 chars
- // and file name truncated to 255-13.
- {FILE_PATH_LITERAL("folder1111/folder2222/"
- "abcdefghijklmnopqrstuvwxyz1234abcdefghijklmnopqrstuvw"
- "xyz1234abcdefghijklmnopqrstuvwxyz1234abcdefghijklmnop"
- "qrstuvwxyz1234abcdefghijklmnopqrstuvwxyz1234abcdefghi"
- "jklmnopqrstuvwxyz1234abcdefghijklmnopqrstuvwxyz1234ab"
- "cdefghijklmnopqrstuvwxyz1234abcdefghijklmnopqrstuvwxy"
- "z1234."
- "abcdefghijklmnopqrstuvwxyz1234abcdefghijklmnopqrstuvw"
- "xyz1234abcdefghijklmnopqrstuvwxyz1234abcdefghijklmnop"
- "qrstuvwxyz1234abcdefghijklmnopqrstuvwxyz1234abcdefghi"
- "jklmnopqrstuvwxyz1234abcdefghijklmnopqrstuvwxyz1234"),
- FILE_PATH_LITERAL("folder1111/folder2222/"
- "abcdefghijklmnopqrstuvwxyz1234abcdefghijklmnopqrstuvw"
- "xyz1234abcdefghijklmnopqrstuvwxyz1234abcdefghijklmnop"
- "qrstuvwxyz1234abcdefghijklmnopqrstuvwxyz1234abcdefghi"
- "jklmnopqrstuvwxyz1234abcdefghijklmnopqrstuvwxyz1234ab"
- "cdefghijklmnopqrstuvwxyz1234ab.abcdefghijkl")}};
- for (size_t i = 0; i < std::size(test_cases); ++i) {
- base::FilePath input =
- base::FilePath(test_cases[i].input).NormalizePathSeparators();
- base::FilePath output =
- base::FilePath(test_cases[i].expected).NormalizePathSeparators();
- EXPECT_EQ(output.value(),
- ui::SelectFileDialog::GetShortenedFilePath(input).value());
- EXPECT_LE(ui::SelectFileDialog::GetShortenedFilePath(input)
- .BaseName()
- .value()
- .length(),
- 255u);
- }
- }
|