clipboard_history_util_unittest.cc 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. // Copyright 2020 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 "ash/clipboard/clipboard_history_util.h"
  5. #include <array>
  6. #include <deque>
  7. #include "ash/clipboard/clipboard_history_item.h"
  8. #include "ash/clipboard/test_support/clipboard_history_item_builder.h"
  9. #include "base/strings/utf_string_conversions.h"
  10. #include "testing/gtest/include/gtest/gtest.h"
  11. namespace ash {
  12. namespace ClipboardHistoryUtil {
  13. namespace {
  14. constexpr std::array<ui::ClipboardInternalFormat, 8> kAllFormats = {
  15. ui::ClipboardInternalFormat::kPng,
  16. ui::ClipboardInternalFormat::kHtml,
  17. ui::ClipboardInternalFormat::kText,
  18. ui::ClipboardInternalFormat::kRtf,
  19. ui::ClipboardInternalFormat::kBookmark,
  20. ui::ClipboardInternalFormat::kCustom,
  21. ui::ClipboardInternalFormat::kWeb,
  22. ui::ClipboardInternalFormat::kFilenames};
  23. // Helpers ---------------------------------------------------------------------
  24. // Sets hardcoded data for all formats on `builder`.
  25. void SetAllFormats(ClipboardHistoryItemBuilder* builder) {
  26. for (const auto& format : kAllFormats)
  27. builder->SetFormat(format);
  28. }
  29. } // namespace
  30. // Tests -----------------------------------------------------------------------
  31. using ClipboardHistoryUtilTest = testing::Test;
  32. TEST_F(ClipboardHistoryUtilTest, CalculateMainFormat) {
  33. ClipboardHistoryItemBuilder builder;
  34. SetAllFormats(&builder);
  35. // We will cycle through all formats in prioritized order.
  36. std::deque<ui::ClipboardInternalFormat> prioritized_formats = {
  37. ui::ClipboardInternalFormat::kPng,
  38. ui::ClipboardInternalFormat::kHtml,
  39. ui::ClipboardInternalFormat::kText,
  40. ui::ClipboardInternalFormat::kRtf,
  41. ui::ClipboardInternalFormat::kFilenames,
  42. ui::ClipboardInternalFormat::kBookmark,
  43. ui::ClipboardInternalFormat::kWeb,
  44. ui::ClipboardInternalFormat::kCustom,
  45. };
  46. while (!prioritized_formats.empty()) {
  47. ui::ClipboardInternalFormat format = prioritized_formats.front();
  48. EXPECT_EQ(CalculateMainFormat(builder.Build().data()), format);
  49. // Pop a format and resume testing.
  50. builder.ClearFormat(format);
  51. prioritized_formats.pop_front();
  52. }
  53. EXPECT_FALSE(CalculateMainFormat(builder.Build().data()).has_value());
  54. }
  55. TEST_F(ClipboardHistoryUtilTest, ContainsFormat) {
  56. ClipboardHistoryItemBuilder builder;
  57. for (const auto& format : kAllFormats) {
  58. EXPECT_FALSE(ContainsFormat(builder.Build().data(), format));
  59. builder.SetFormat(format);
  60. EXPECT_TRUE(ContainsFormat(builder.Build().data(), format));
  61. }
  62. }
  63. TEST_F(ClipboardHistoryUtilTest, ContainsFileSystemData) {
  64. ClipboardHistoryItemBuilder builder;
  65. EXPECT_FALSE(ContainsFileSystemData(builder.Build().data()));
  66. SetAllFormats(&builder);
  67. builder.ClearFormat(ui::ClipboardInternalFormat::kFilenames);
  68. EXPECT_FALSE(ContainsFileSystemData(builder.Build().data()));
  69. // Outside the Files app, file system sources are written to filenames.
  70. builder.SetFormat(ui::ClipboardInternalFormat::kFilenames);
  71. EXPECT_TRUE(ContainsFileSystemData(builder.Build().data()));
  72. builder.ClearFormat(ui::ClipboardInternalFormat::kFilenames);
  73. // Within the Files app, file system sources are written to custom data.
  74. builder.SetFileSystemData({u"/path/to/My%20File.txt"});
  75. EXPECT_TRUE(ContainsFileSystemData(builder.Build().data()));
  76. }
  77. TEST_F(ClipboardHistoryUtilTest, GetFileSystemSources) {
  78. ClipboardHistoryItemBuilder builder;
  79. EXPECT_TRUE(GetFileSystemSources(builder.Build().data()).empty());
  80. SetAllFormats(&builder);
  81. builder.ClearFormat(ui::ClipboardInternalFormat::kFilenames);
  82. EXPECT_TRUE(GetFileSystemSources(builder.Build().data()).empty());
  83. // Outside the Files app, file system sources are written to filenames.
  84. builder.SetFilenames({ui::FileInfo(base::FilePath("/path/to/My%20File.txt"),
  85. base::FilePath("My%20File.txt"))});
  86. EXPECT_EQ(GetFileSystemSources(builder.Build().data()),
  87. u"/path/to/My%20File.txt");
  88. builder.ClearFilenames();
  89. // Within the Files app, file system sources are written to custom data.
  90. builder.SetFileSystemData({u"/path/to/My%20File.txt"});
  91. EXPECT_EQ(GetFileSystemSources(builder.Build().data()),
  92. u"/path/to/My%20File.txt");
  93. }
  94. TEST_F(ClipboardHistoryUtilTest, GetSplitFileSystemData) {
  95. const std::string file_name1("File1.txt"), file_name2("File2.txt");
  96. const std::u16string file_name1_16(base::UTF8ToUTF16(file_name1)),
  97. file_name2_16(base::UTF8ToUTF16(file_name2));
  98. ClipboardHistoryItemBuilder builder;
  99. std::u16string sources;
  100. std::vector<base::StringPiece16> source_list;
  101. // Outside the Files app, file system sources are written to filenames.
  102. builder.SetFilenames(
  103. {ui::FileInfo(base::FilePath(file_name1), base::FilePath(file_name1)),
  104. ui::FileInfo(base::FilePath(file_name2), base::FilePath(file_name2))});
  105. GetSplitFileSystemData(builder.Build().data(), &source_list, &sources);
  106. EXPECT_EQ(file_name1_16, source_list[0]);
  107. EXPECT_EQ(file_name2_16, source_list[1]);
  108. builder.ClearFilenames();
  109. sources.clear();
  110. source_list.clear();
  111. // Within the Files app, file system sources are written to custom data.
  112. builder.SetFileSystemData({file_name1_16, file_name2_16});
  113. GetSplitFileSystemData(builder.Build().data(), &source_list, &sources);
  114. EXPECT_EQ(file_name1_16, source_list[0]);
  115. EXPECT_EQ(file_name2_16, source_list[1]);
  116. }
  117. TEST_F(ClipboardHistoryUtilTest, GetFilesCount) {
  118. ClipboardHistoryItemBuilder builder;
  119. // Outside the Files app, file system sources are written to filenames.
  120. builder.SetFilenames({ui::FileInfo(base::FilePath("/path/to/My%20File1.txt"),
  121. base::FilePath("My%20File1.txt")),
  122. ui::FileInfo(base::FilePath("/path/to/My%20File2.txt"),
  123. base::FilePath("My%20File2.txt"))});
  124. EXPECT_EQ(2u, GetCountOfCopiedFiles(builder.Build().data()));
  125. builder.ClearFilenames();
  126. // Within the Files app, file system sources are written to custom data.
  127. builder.SetFileSystemData(
  128. {u"/path/to/My%20File1.txt", u"/path/to/My%20File2.txt"});
  129. EXPECT_EQ(2u, GetCountOfCopiedFiles(builder.Build().data()));
  130. }
  131. TEST_F(ClipboardHistoryUtilTest, IsSupported) {
  132. ClipboardHistoryItemBuilder builder;
  133. EXPECT_FALSE(IsSupported(builder.Build().data()));
  134. for (const auto& format : kAllFormats) {
  135. if (format != ui::ClipboardInternalFormat::kCustom) {
  136. builder.SetFormat(format);
  137. EXPECT_TRUE(IsSupported(builder.Build().data()));
  138. builder.Clear();
  139. }
  140. }
  141. builder.SetFormat(ui::ClipboardInternalFormat::kCustom);
  142. EXPECT_FALSE(IsSupported(builder.Build().data()));
  143. builder.SetFileSystemData({u"/path/to/My%20File.txt"});
  144. EXPECT_TRUE(IsSupported(builder.Build().data()));
  145. }
  146. } // namespace ClipboardHistoryUtil
  147. } // namespace ash