unified_desktop_utils_unittests.cc 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  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/display/unified_desktop_utils.h"
  5. #include <memory>
  6. #include "testing/gtest/include/gtest/gtest.h"
  7. #include "ui/display/display_layout_builder.h"
  8. #include "ui/display/types/display_constants.h"
  9. namespace display {
  10. TEST(UnifiedDesktopLayoutTests, ValidateMatrix) {
  11. UnifiedDesktopLayoutMatrix matrix;
  12. // Empty matrix.
  13. EXPECT_FALSE(ValidateMatrix(matrix));
  14. // Matrix with unequal row sizes.
  15. matrix.resize(2);
  16. matrix[0].emplace_back(1);
  17. matrix[0].emplace_back(2);
  18. matrix[1].emplace_back(3);
  19. EXPECT_FALSE(ValidateMatrix(matrix));
  20. // Matrix with a hole.
  21. matrix[1].emplace_back(display::kInvalidDisplayId);
  22. EXPECT_FALSE(ValidateMatrix(matrix));
  23. }
  24. TEST(UnifiedDesktopLayoutTests, PrimaryIdNotInList) {
  25. DisplayLayoutBuilder builder(20);
  26. builder.AddDisplayPlacement(30, 20, DisplayPlacement::Position::RIGHT, 0);
  27. builder.AddDisplayPlacement(40, 30, DisplayPlacement::Position::TOP, 0);
  28. builder.AddDisplayPlacement(50, 20, DisplayPlacement::Position::TOP, 0);
  29. UnifiedDesktopLayoutMatrix matrix;
  30. std::unique_ptr<DisplayLayout> layout = builder.Build();
  31. EXPECT_FALSE(BuildUnifiedDesktopMatrix({30, 40, 50}, *layout, &matrix));
  32. EXPECT_TRUE(matrix.empty());
  33. }
  34. TEST(UnifiedDesktopLayoutTests, ExtraPlacement) {
  35. DisplayLayoutBuilder builder(20);
  36. builder.AddDisplayPlacement(30, 20, DisplayPlacement::Position::RIGHT, 0);
  37. builder.AddDisplayPlacement(40, 30, DisplayPlacement::Position::TOP, 0);
  38. builder.AddDisplayPlacement(50, 20, DisplayPlacement::Position::TOP, 0);
  39. UnifiedDesktopLayoutMatrix matrix;
  40. std::unique_ptr<DisplayLayout> layout = builder.Build();
  41. EXPECT_FALSE(BuildUnifiedDesktopMatrix({20, 30, 40}, *layout, &matrix));
  42. EXPECT_TRUE(matrix.empty());
  43. }
  44. TEST(UnifiedDesktopLayoutTests, MissingPlacement) {
  45. DisplayLayoutBuilder builder(20);
  46. builder.AddDisplayPlacement(30, 20, DisplayPlacement::Position::RIGHT, 0);
  47. builder.AddDisplayPlacement(40, 30, DisplayPlacement::Position::TOP, 0);
  48. UnifiedDesktopLayoutMatrix matrix;
  49. std::unique_ptr<DisplayLayout> layout = builder.Build();
  50. EXPECT_FALSE(BuildUnifiedDesktopMatrix({20, 30, 40, 50}, *layout, &matrix));
  51. EXPECT_TRUE(matrix.empty());
  52. }
  53. TEST(UnifiedDesktopLayoutTests, PrimaryIsNotRoot) {
  54. DisplayLayoutBuilder builder(20);
  55. builder.AddDisplayPlacement(30, 60, DisplayPlacement::Position::LEFT, 0);
  56. builder.AddDisplayPlacement(40, 30, DisplayPlacement::Position::TOP, 0);
  57. builder.AddDisplayPlacement(50, 40, DisplayPlacement::Position::LEFT, 0);
  58. builder.AddDisplayPlacement(60, 40, DisplayPlacement::Position::BOTTOM, 0);
  59. UnifiedDesktopLayoutMatrix matrix;
  60. std::unique_ptr<DisplayLayout> layout = builder.Build();
  61. EXPECT_FALSE(
  62. BuildUnifiedDesktopMatrix({20, 30, 40, 50, 60}, *layout, &matrix));
  63. EXPECT_TRUE(matrix.empty());
  64. }
  65. TEST(UnifiedDesktopLayoutTests, CycleThroughPrimary) {
  66. DisplayLayoutBuilder builder(20);
  67. builder.AddDisplayPlacement(30, 20, DisplayPlacement::Position::RIGHT, 0);
  68. builder.AddDisplayPlacement(20, 40, DisplayPlacement::Position::BOTTOM, 0);
  69. builder.AddDisplayPlacement(40, 50, DisplayPlacement::Position::RIGHT, 0);
  70. builder.AddDisplayPlacement(50, 30, DisplayPlacement::Position::TOP, 0);
  71. UnifiedDesktopLayoutMatrix matrix;
  72. std::unique_ptr<DisplayLayout> layout = builder.Build();
  73. EXPECT_FALSE(BuildUnifiedDesktopMatrix({20, 30, 40, 50}, *layout, &matrix));
  74. EXPECT_TRUE(matrix.empty());
  75. }
  76. TEST(UnifiedDesktopLayoutTests, NoPlacementOffsets) {
  77. DisplayLayoutBuilder builder(20);
  78. builder.AddDisplayPlacement(30, 20, DisplayPlacement::Position::RIGHT, 20);
  79. builder.AddDisplayPlacement(40, 30, DisplayPlacement::Position::TOP, 0);
  80. builder.AddDisplayPlacement(50, 20, DisplayPlacement::Position::TOP, 0);
  81. UnifiedDesktopLayoutMatrix matrix;
  82. std::unique_ptr<DisplayLayout> layout = builder.Build();
  83. EXPECT_FALSE(BuildUnifiedDesktopMatrix({20, 30, 40, 50}, *layout, &matrix));
  84. EXPECT_TRUE(matrix.empty());
  85. }
  86. TEST(UnifiedDesktopLayoutTests, TwoChildrenOnOneSide) {
  87. DisplayLayoutBuilder builder(20);
  88. builder.AddDisplayPlacement(30, 20, DisplayPlacement::Position::RIGHT, 0);
  89. builder.AddDisplayPlacement(40, 30, DisplayPlacement::Position::TOP, 0);
  90. builder.AddDisplayPlacement(50, 20, DisplayPlacement::Position::TOP, 0);
  91. builder.AddDisplayPlacement(60, 30, DisplayPlacement::Position::RIGHT, 0);
  92. builder.AddDisplayPlacement(70, 30, DisplayPlacement::Position::RIGHT, 0);
  93. UnifiedDesktopLayoutMatrix matrix;
  94. std::unique_ptr<DisplayLayout> layout = builder.Build();
  95. EXPECT_FALSE(
  96. BuildUnifiedDesktopMatrix({20, 30, 40, 50, 60, 70}, *layout, &matrix));
  97. EXPECT_TRUE(matrix.empty());
  98. }
  99. TEST(UnifiedDesktopLayoutTests, EmptyHoles) {
  100. DisplayLayoutBuilder builder(20);
  101. builder.AddDisplayPlacement(30, 20, DisplayPlacement::Position::RIGHT, 0);
  102. builder.AddDisplayPlacement(40, 30, DisplayPlacement::Position::TOP, 0);
  103. builder.AddDisplayPlacement(50, 20, DisplayPlacement::Position::TOP, 0);
  104. builder.AddDisplayPlacement(60, 30, DisplayPlacement::Position::RIGHT, 0);
  105. builder.AddDisplayPlacement(70, 50, DisplayPlacement::Position::LEFT, 0);
  106. UnifiedDesktopLayoutMatrix matrix;
  107. std::unique_ptr<DisplayLayout> layout = builder.Build();
  108. EXPECT_FALSE(
  109. BuildUnifiedDesktopMatrix({20, 30, 40, 50, 60, 70}, *layout, &matrix));
  110. EXPECT_TRUE(matrix.empty());
  111. }
  112. TEST(UnifiedDesktopLayoutTests, ValidHorizontalMatrix) {
  113. DisplayLayoutBuilder builder(20);
  114. builder.AddDisplayPlacement(30, 20, DisplayPlacement::Position::RIGHT, 0);
  115. builder.AddDisplayPlacement(40, 30, DisplayPlacement::Position::RIGHT, 0);
  116. builder.AddDisplayPlacement(50, 40, DisplayPlacement::Position::RIGHT, 0);
  117. UnifiedDesktopLayoutMatrix matrix;
  118. std::unique_ptr<DisplayLayout> layout = builder.Build();
  119. EXPECT_TRUE(BuildUnifiedDesktopMatrix({20, 30, 40, 50}, *layout, &matrix));
  120. EXPECT_FALSE(matrix.empty());
  121. // 1 x 4 matrix.
  122. EXPECT_EQ(1u, matrix.size());
  123. EXPECT_EQ(4u, matrix[0].size());
  124. // [[20, 30, 40, 50]].
  125. EXPECT_EQ(20, matrix[0][0]);
  126. EXPECT_EQ(30, matrix[0][1]);
  127. EXPECT_EQ(40, matrix[0][2]);
  128. EXPECT_EQ(50, matrix[0][3]);
  129. }
  130. TEST(UnifiedDesktopLayoutTests, ValidHorizontalMatrixReverse) {
  131. DisplayLayoutBuilder builder(60);
  132. builder.AddDisplayPlacement(50, 60, DisplayPlacement::Position::RIGHT, 0);
  133. builder.AddDisplayPlacement(40, 50, DisplayPlacement::Position::RIGHT, 0);
  134. builder.AddDisplayPlacement(30, 40, DisplayPlacement::Position::RIGHT, 0);
  135. builder.AddDisplayPlacement(20, 30, DisplayPlacement::Position::RIGHT, 0);
  136. UnifiedDesktopLayoutMatrix matrix;
  137. std::unique_ptr<DisplayLayout> layout = builder.Build();
  138. EXPECT_TRUE(
  139. BuildUnifiedDesktopMatrix({20, 30, 40, 50, 60}, *layout, &matrix));
  140. EXPECT_FALSE(matrix.empty());
  141. // 1 x 4 matrix.
  142. EXPECT_EQ(1u, matrix.size());
  143. EXPECT_EQ(5u, matrix[0].size());
  144. // [[60, 50, 40, 30, 20]].
  145. EXPECT_EQ(60, matrix[0][0]);
  146. EXPECT_EQ(50, matrix[0][1]);
  147. EXPECT_EQ(40, matrix[0][2]);
  148. EXPECT_EQ(30, matrix[0][3]);
  149. EXPECT_EQ(20, matrix[0][4]);
  150. }
  151. TEST(UnifiedDesktopLayoutTests, ValidVerticalMatrix) {
  152. DisplayLayoutBuilder builder(20);
  153. builder.AddDisplayPlacement(30, 20, DisplayPlacement::Position::BOTTOM, 0);
  154. builder.AddDisplayPlacement(40, 30, DisplayPlacement::Position::BOTTOM, 0);
  155. builder.AddDisplayPlacement(50, 40, DisplayPlacement::Position::BOTTOM, 0);
  156. UnifiedDesktopLayoutMatrix matrix;
  157. std::unique_ptr<DisplayLayout> layout = builder.Build();
  158. EXPECT_TRUE(BuildUnifiedDesktopMatrix({20, 30, 40, 50}, *layout, &matrix));
  159. EXPECT_FALSE(matrix.empty());
  160. // 4 x 1 matrix.
  161. EXPECT_EQ(4u, matrix.size());
  162. EXPECT_EQ(1u, matrix[0].size());
  163. // [[20],
  164. // [30],
  165. // [40],
  166. // [50]].
  167. EXPECT_EQ(20, matrix[0][0]);
  168. EXPECT_EQ(30, matrix[1][0]);
  169. EXPECT_EQ(40, matrix[2][0]);
  170. EXPECT_EQ(50, matrix[3][0]);
  171. }
  172. TEST(UnifiedDesktopLayoutTests, ValidGridMatrix) {
  173. DisplayLayoutBuilder builder(20);
  174. builder.AddDisplayPlacement(30, 20, DisplayPlacement::Position::RIGHT, 0);
  175. builder.AddDisplayPlacement(40, 30, DisplayPlacement::Position::TOP, 0);
  176. builder.AddDisplayPlacement(50, 20, DisplayPlacement::Position::TOP, 0);
  177. builder.AddDisplayPlacement(60, 30, DisplayPlacement::Position::RIGHT, 0);
  178. builder.AddDisplayPlacement(70, 40, DisplayPlacement::Position::RIGHT, 0);
  179. UnifiedDesktopLayoutMatrix matrix;
  180. std::unique_ptr<DisplayLayout> layout = builder.Build();
  181. EXPECT_TRUE(
  182. BuildUnifiedDesktopMatrix({20, 30, 40, 50, 60, 70}, *layout, &matrix));
  183. EXPECT_FALSE(matrix.empty());
  184. // 2 x 3 matrix.
  185. EXPECT_EQ(2u, matrix.size());
  186. EXPECT_EQ(3u, matrix[0].size());
  187. // [[50, 40, 70],
  188. // [20, 30, 60]].
  189. EXPECT_EQ(50, matrix[0][0]);
  190. EXPECT_EQ(40, matrix[0][1]);
  191. EXPECT_EQ(70, matrix[0][2]);
  192. EXPECT_EQ(20, matrix[1][0]);
  193. EXPECT_EQ(30, matrix[1][1]);
  194. EXPECT_EQ(60, matrix[1][2]);
  195. }
  196. } // namespace display