nine_patch_generator_unittest.cc 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237
  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 "cc/layers/nine_patch_generator.h"
  5. #include "testing/gtest/include/gtest/gtest.h"
  6. #include "ui/gfx/geometry/rect.h"
  7. #include "ui/gfx/geometry/size.h"
  8. namespace cc {
  9. namespace {
  10. TEST(NinePatchGeneratorTest, SetLayoutReturnsChanged) {
  11. NinePatchGenerator quad_generator;
  12. EXPECT_TRUE(quad_generator.SetLayout(
  13. gfx::Size(10, 10), gfx::Size(10, 10), gfx::Rect(1, 1, 8, 8),
  14. gfx::Rect(1, 1, 2, 2), gfx::Rect(), true, false));
  15. EXPECT_FALSE(quad_generator.SetLayout(
  16. gfx::Size(10, 10), gfx::Size(10, 10), gfx::Rect(1, 1, 8, 8),
  17. gfx::Rect(1, 1, 2, 2), gfx::Rect(), true, false));
  18. EXPECT_TRUE(quad_generator.SetLayout(
  19. gfx::Size(10, 10), gfx::Size(10, 10), gfx::Rect(1, 1, 8, 8),
  20. gfx::Rect(1, 1, 2, 2), gfx::Rect(), false, false));
  21. EXPECT_FALSE(quad_generator.SetLayout(
  22. gfx::Size(10, 10), gfx::Size(10, 10), gfx::Rect(1, 1, 8, 8),
  23. gfx::Rect(1, 1, 2, 2), gfx::Rect(), false, false));
  24. EXPECT_TRUE(quad_generator.SetLayout(
  25. gfx::Size(12, 10), gfx::Size(10, 10), gfx::Rect(1, 1, 8, 8),
  26. gfx::Rect(1, 1, 2, 2), gfx::Rect(), false, false));
  27. }
  28. TEST(NinePatchGeneratorTest, BasicGenerate) {
  29. NinePatchGenerator quad_generator;
  30. quad_generator.SetLayout(gfx::Size(10, 10), gfx::Size(10, 10),
  31. gfx::Rect(1, 1, 8, 8), gfx::Rect(1, 1, 2, 2),
  32. gfx::Rect(), true, false);
  33. std::vector<NinePatchGenerator::Patch> patches =
  34. quad_generator.GeneratePatches();
  35. ASSERT_EQ(9u, patches.size());
  36. // Center.
  37. EXPECT_EQ(gfx::RectF(1, 1, 8, 8), patches[8].image_rect);
  38. EXPECT_EQ(gfx::RectF(1, 1, 8, 8), patches[8].output_rect);
  39. EXPECT_EQ(gfx::RectF(0.1f, 0.1f, 0.8f, 0.8f),
  40. patches[8].normalized_image_rect);
  41. // Bottom.
  42. EXPECT_EQ(gfx::RectF(1, 9, 8, 1), patches[7].image_rect);
  43. EXPECT_EQ(gfx::RectF(1, 9, 8, 1), patches[7].output_rect);
  44. EXPECT_EQ(gfx::RectF(0.1f, 0.9f, 0.8f, 0.1f),
  45. patches[7].normalized_image_rect);
  46. // Right.
  47. EXPECT_EQ(gfx::RectF(9, 1, 1, 8), patches[6].image_rect);
  48. EXPECT_EQ(gfx::RectF(9, 1, 1, 8), patches[6].output_rect);
  49. EXPECT_EQ(gfx::RectF(0.9f, 0.1f, 0.1f, 0.8f),
  50. patches[6].normalized_image_rect);
  51. // Left.
  52. EXPECT_EQ(gfx::RectF(0, 1, 1, 8), patches[5].image_rect);
  53. EXPECT_EQ(gfx::RectF(0, 1, 1, 8), patches[5].output_rect);
  54. EXPECT_EQ(gfx::RectF(0.f, 0.1f, 0.1f, 0.8f),
  55. patches[5].normalized_image_rect);
  56. // Top.
  57. EXPECT_EQ(gfx::RectF(1, 0, 8, 1), patches[4].image_rect);
  58. EXPECT_EQ(gfx::RectF(1, 0, 8, 1), patches[4].output_rect);
  59. EXPECT_EQ(gfx::RectF(0.1f, 0.f, 0.8f, 0.1f),
  60. patches[4].normalized_image_rect);
  61. // Bottom-right
  62. EXPECT_EQ(gfx::RectF(9, 9, 1, 1), patches[3].image_rect);
  63. EXPECT_EQ(gfx::RectF(9, 9, 1, 1), patches[3].output_rect);
  64. EXPECT_EQ(gfx::RectF(0.9f, 0.9f, 0.1f, 0.1f),
  65. patches[3].normalized_image_rect);
  66. // Bottom-left
  67. EXPECT_EQ(gfx::RectF(0, 9, 1, 1), patches[2].image_rect);
  68. EXPECT_EQ(gfx::RectF(0, 9, 1, 1), patches[2].output_rect);
  69. EXPECT_EQ(gfx::RectF(0.f, 0.9f, 0.1f, 0.1f),
  70. patches[2].normalized_image_rect);
  71. // Top-right
  72. EXPECT_EQ(gfx::RectF(9, 0, 1, 1), patches[1].image_rect);
  73. EXPECT_EQ(gfx::RectF(9, 0, 1, 1), patches[1].output_rect);
  74. EXPECT_EQ(gfx::RectF(0.9f, 0.f, 0.1f, 0.1f),
  75. patches[1].normalized_image_rect);
  76. // Top-left
  77. EXPECT_EQ(gfx::RectF(0, 0, 1, 1), patches[0].image_rect);
  78. EXPECT_EQ(gfx::RectF(0, 0, 1, 1), patches[0].output_rect);
  79. EXPECT_EQ(gfx::RectF(0.f, 0.f, 0.1f, 0.1f), patches[0].normalized_image_rect);
  80. }
  81. TEST(NinePatchGeneratorTest, GenerateNonSymmetricAperture) {
  82. NinePatchGenerator quad_generator;
  83. quad_generator.SetLayout(gfx::Size(10, 10), gfx::Size(10, 10),
  84. gfx::Rect(3, 5, 2, 2), gfx::Rect(2, 4, 4, 8),
  85. gfx::Rect(), true, false);
  86. std::vector<NinePatchGenerator::Patch> patches =
  87. quad_generator.GeneratePatches();
  88. ASSERT_EQ(9u, patches.size());
  89. // Center.
  90. EXPECT_EQ(gfx::RectF(3, 5, 2, 2), patches[8].image_rect);
  91. EXPECT_EQ(gfx::RectF(2, 4, 6, 2), patches[8].output_rect);
  92. EXPECT_EQ(gfx::RectF(0.3f, 0.5f, 0.2f, 0.2f),
  93. patches[8].normalized_image_rect);
  94. // Bottom.
  95. EXPECT_EQ(gfx::RectF(3, 7, 2, 3), patches[7].image_rect);
  96. EXPECT_EQ(gfx::RectF(2, 6, 6, 4), patches[7].output_rect);
  97. EXPECT_EQ(gfx::RectF(0.3f, 0.7f, 0.2f, 0.3f),
  98. patches[7].normalized_image_rect);
  99. // Right.
  100. EXPECT_EQ(gfx::RectF(5, 5, 5, 2), patches[6].image_rect);
  101. EXPECT_EQ(gfx::RectF(8, 4, 2, 2), patches[6].output_rect);
  102. EXPECT_EQ(gfx::RectF(0.5f, 0.5f, 0.5f, 0.2f),
  103. patches[6].normalized_image_rect);
  104. // Left.
  105. EXPECT_EQ(gfx::RectF(0, 5, 3, 2), patches[5].image_rect);
  106. EXPECT_EQ(gfx::RectF(0, 4, 2, 2), patches[5].output_rect);
  107. EXPECT_EQ(gfx::RectF(0.f, 0.5f, 0.3f, 0.2f),
  108. patches[5].normalized_image_rect);
  109. // Top.
  110. EXPECT_EQ(gfx::RectF(3, 0, 2, 5), patches[4].image_rect);
  111. EXPECT_EQ(gfx::RectF(2, 0, 6, 4), patches[4].output_rect);
  112. EXPECT_EQ(gfx::RectF(0.3f, 0.f, 0.2f, 0.5f),
  113. patches[4].normalized_image_rect);
  114. // Bottom-right
  115. EXPECT_EQ(gfx::RectF(5, 7, 5, 3), patches[3].image_rect);
  116. EXPECT_EQ(gfx::RectF(8, 6, 2, 4), patches[3].output_rect);
  117. EXPECT_EQ(gfx::RectF(0.5f, 0.7f, 0.5f, 0.3f),
  118. patches[3].normalized_image_rect);
  119. // Bottom-left
  120. EXPECT_EQ(gfx::RectF(0, 7, 3, 3), patches[2].image_rect);
  121. EXPECT_EQ(gfx::RectF(0, 6, 2, 4), patches[2].output_rect);
  122. EXPECT_EQ(gfx::RectF(0.f, 0.7f, 0.3f, 0.3f),
  123. patches[2].normalized_image_rect);
  124. // Top-right
  125. EXPECT_EQ(gfx::RectF(5, 0, 5, 5), patches[1].image_rect);
  126. EXPECT_EQ(gfx::RectF(8, 0, 2, 4), patches[1].output_rect);
  127. EXPECT_EQ(gfx::RectF(0.5f, 0.f, 0.5f, 0.5f),
  128. patches[1].normalized_image_rect);
  129. // Top-left
  130. EXPECT_EQ(gfx::RectF(0, 0, 3, 5), patches[0].image_rect);
  131. EXPECT_EQ(gfx::RectF(0, 0, 2, 4), patches[0].output_rect);
  132. EXPECT_EQ(gfx::RectF(0.f, 0.f, 0.3f, 0.5f), patches[0].normalized_image_rect);
  133. }
  134. TEST(NinePatchGeneratorTest, LargerLayerGenerate) {
  135. NinePatchGenerator quad_generator;
  136. quad_generator.SetLayout(gfx::Size(10, 10), gfx::Size(20, 15),
  137. gfx::Rect(1, 1, 8, 8), gfx::Rect(1, 1, 2, 2),
  138. gfx::Rect(), true, false);
  139. std::vector<NinePatchGenerator::Patch> patches =
  140. quad_generator.GeneratePatches();
  141. ASSERT_EQ(9u, patches.size());
  142. // Center.
  143. EXPECT_EQ(gfx::RectF(1, 1, 8, 8), patches[8].image_rect);
  144. EXPECT_EQ(gfx::RectF(1, 1, 18, 13), patches[8].output_rect);
  145. EXPECT_EQ(gfx::RectF(0.1f, 0.1f, 0.8f, 0.8f),
  146. patches[8].normalized_image_rect);
  147. // Bottom.
  148. EXPECT_EQ(gfx::RectF(1, 9, 8, 1), patches[7].image_rect);
  149. EXPECT_EQ(gfx::RectF(1, 14, 18, 1), patches[7].output_rect);
  150. EXPECT_EQ(gfx::RectF(0.1f, 0.9f, 0.8f, 0.1f),
  151. patches[7].normalized_image_rect);
  152. // Right.
  153. EXPECT_EQ(gfx::RectF(9, 1, 1, 8), patches[6].image_rect);
  154. EXPECT_EQ(gfx::RectF(19, 1, 1, 13), patches[6].output_rect);
  155. EXPECT_EQ(gfx::RectF(0.9f, 0.1f, 0.1f, 0.8f),
  156. patches[6].normalized_image_rect);
  157. // Left.
  158. EXPECT_EQ(gfx::RectF(0, 1, 1, 8), patches[5].image_rect);
  159. EXPECT_EQ(gfx::RectF(0, 1, 1, 13), patches[5].output_rect);
  160. EXPECT_EQ(gfx::RectF(0.f, 0.1f, 0.1f, 0.8f),
  161. patches[5].normalized_image_rect);
  162. // Top.
  163. EXPECT_EQ(gfx::RectF(1, 0, 8, 1), patches[4].image_rect);
  164. EXPECT_EQ(gfx::RectF(1, 0, 18, 1), patches[4].output_rect);
  165. EXPECT_EQ(gfx::RectF(0.1f, 0.f, 0.8f, 0.1f),
  166. patches[4].normalized_image_rect);
  167. // Bottom-right
  168. EXPECT_EQ(gfx::RectF(9, 9, 1, 1), patches[3].image_rect);
  169. EXPECT_EQ(gfx::RectF(19, 14, 1, 1), patches[3].output_rect);
  170. EXPECT_EQ(gfx::RectF(0.9f, 0.9f, 0.1f, 0.1f),
  171. patches[3].normalized_image_rect);
  172. // Bottom-left
  173. EXPECT_EQ(gfx::RectF(0, 9, 1, 1), patches[2].image_rect);
  174. EXPECT_EQ(gfx::RectF(0, 14, 1, 1), patches[2].output_rect);
  175. EXPECT_EQ(gfx::RectF(0.f, 0.9f, 0.1f, 0.1f),
  176. patches[2].normalized_image_rect);
  177. // Top-right
  178. EXPECT_EQ(gfx::RectF(9, 0, 1, 1), patches[1].image_rect);
  179. EXPECT_EQ(gfx::RectF(19, 0, 1, 1), patches[1].output_rect);
  180. EXPECT_EQ(gfx::RectF(0.9f, 0.f, 0.1f, 0.1f),
  181. patches[1].normalized_image_rect);
  182. // Top-left
  183. EXPECT_EQ(gfx::RectF(0, 0, 1, 1), patches[0].image_rect);
  184. EXPECT_EQ(gfx::RectF(0, 0, 1, 1), patches[0].output_rect);
  185. EXPECT_EQ(gfx::RectF(0.f, 0.f, 0.1f, 0.1f), patches[0].normalized_image_rect);
  186. }
  187. } // namespace
  188. } // namespace cc