select_file_dialog_unittest.cc 6.4 KB

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