| OLD | NEW |
| (Empty) | |
| 1 // Copyright (c) 2013 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 |
| 5 #include "chrome/browser/ui/cocoa/simple_grid_layout.h" |
| 6 |
| 7 #include "base/logging.h" |
| 8 #include "base/memory/scoped_nsobject.h" |
| 9 #include "testing/gtest/include/gtest/gtest.h" |
| 10 |
| 11 namespace { |
| 12 |
| 13 // Layout objects as multiple columns in a single row. |
| 14 class ColumnLayout : public SimpleGridLayout { |
| 15 public: |
| 16 ColumnLayout(NSView* host) : SimpleGridLayout(host) { AddRow(); } |
| 17 ~ColumnLayout() {} |
| 18 }; |
| 19 |
| 20 class LayoutTest : public testing::Test { |
| 21 public: |
| 22 scoped_nsobject<NSView> CreateViewWithWidth(float width) { |
| 23 NSRect frame = NSMakeRect(0, 0, width, 0); |
| 24 scoped_nsobject<NSView> view([[NSView alloc] initWithFrame:frame]); |
| 25 return view; |
| 26 } |
| 27 |
| 28 scoped_nsobject<NSView> CreateViewWithHeight(float height) { |
| 29 NSRect frame = NSMakeRect(0, 0, 0, height); |
| 30 scoped_nsobject<NSView> view([[NSView alloc] initWithFrame:frame]); |
| 31 return view; |
| 32 } |
| 33 }; |
| 34 |
| 35 TEST_F(LayoutTest, GridLayoutAddGetColumnSet) { |
| 36 SimpleGridLayout layout(NULL); |
| 37 |
| 38 // Non-existing id's are not found. |
| 39 EXPECT_EQ(0L, layout.GetColumnSet(1)); |
| 40 |
| 41 // Created ColumnSets can be retrieved. |
| 42 ColumnSet* set1 = layout.AddColumnSet(10); |
| 43 ColumnSet* set2 = layout.AddColumnSet(11); |
| 44 ColumnSet* set3 = layout.AddColumnSet(12); |
| 45 EXPECT_EQ(set2, layout.GetColumnSet(11)); |
| 46 EXPECT_EQ(set1, layout.GetColumnSet(10)); |
| 47 EXPECT_EQ(set3, layout.GetColumnSet(12)); |
| 48 } |
| 49 |
| 50 TEST_F(LayoutTest, AddRowAutogeneratesColumnSetId) { |
| 51 SimpleGridLayout layout(NULL); |
| 52 |
| 53 ColumnSet* set1 = layout.AddRow(); |
| 54 EXPECT_NE(0, set1->id()); |
| 55 |
| 56 ColumnSet* set2 = layout.AddRow(); |
| 57 EXPECT_NE(set1->id(), set2->id()); |
| 58 } |
| 59 |
| 60 TEST_F(LayoutTest, AddRowResetsNextColumn) { |
| 61 SimpleGridLayout layout(NULL); |
| 62 layout.AddRow(); |
| 63 layout.GetLastValidColumnSet()->AddColumn(0.6f); |
| 64 layout.GetLastValidColumnSet()->AddColumn(0.6f); |
| 65 layout.AddView(nil); |
| 66 EXPECT_EQ(1, layout.next_column()); |
| 67 |
| 68 layout.AddRow(); |
| 69 EXPECT_EQ(0, layout.next_column()); |
| 70 } |
| 71 |
| 72 TEST_F(LayoutTest, GetLastValidColumnSet) { |
| 73 SimpleGridLayout layout(NULL); |
| 74 |
| 75 EXPECT_EQ(NULL, layout.GetLastValidColumnSet()); |
| 76 |
| 77 ColumnSet* cs1 = layout.AddColumnSet(1); |
| 78 ColumnSet* cs2 = layout.AddColumnSet(2); |
| 79 layout.StartRow(0.0, 2); |
| 80 EXPECT_EQ(cs2, layout.GetLastValidColumnSet()); |
| 81 |
| 82 layout.AddPaddingRow(10); |
| 83 EXPECT_EQ(cs2, layout.GetLastValidColumnSet()); |
| 84 |
| 85 layout.StartRow(0.0, 1); |
| 86 EXPECT_EQ(cs1, layout.GetLastValidColumnSet()); |
| 87 } |
| 88 |
| 89 |
| 90 TEST_F(LayoutTest, AddRowCreatesNewColumnSet) { |
| 91 SimpleGridLayout layout(NULL); |
| 92 |
| 93 EXPECT_EQ(NULL, layout.GetLastValidColumnSet()); |
| 94 |
| 95 ColumnSet* old_column_set = layout.AddRow(); |
| 96 EXPECT_TRUE(old_column_set != NULL); |
| 97 EXPECT_EQ(old_column_set, layout.GetLastValidColumnSet()); |
| 98 |
| 99 ColumnSet* new_column_set = layout.AddRow(); |
| 100 EXPECT_TRUE(new_column_set != NULL); |
| 101 EXPECT_EQ(new_column_set, layout.GetLastValidColumnSet()); |
| 102 } |
| 103 |
| 104 TEST_F(LayoutTest, AddPaddingRow) { |
| 105 SimpleGridLayout layout(NULL); |
| 106 |
| 107 ColumnSet* cs; |
| 108 cs = layout.AddRow(); |
| 109 cs->AddColumn(1.0f); |
| 110 scoped_nsobject<NSView> view1 = CreateViewWithHeight(30.0f); |
| 111 layout.AddView(view1); |
| 112 |
| 113 layout.AddPaddingRow(20); |
| 114 |
| 115 cs = layout.AddRow(); |
| 116 cs->AddColumn(1.0f); |
| 117 EXPECT_EQ(3, layout.num_rows()); |
| 118 scoped_nsobject<NSView> view2 = CreateViewWithHeight(10.0f); |
| 119 layout.AddView(view2); |
| 120 |
| 121 layout.SizeRowsAndColumns(0.0f); |
| 122 EXPECT_FLOAT_EQ(30.0f, layout.GetRowHeight(0)); |
| 123 EXPECT_FLOAT_EQ(20.0f, layout.GetRowHeight(1)); |
| 124 EXPECT_FLOAT_EQ(10.0f, layout.GetRowHeight(2)); |
| 125 } |
| 126 |
| 127 TEST_F(LayoutTest, RowsAccomodateHeightOfAllElements) { |
| 128 SimpleGridLayout layout(NULL); |
| 129 |
| 130 layout.AddRow(); |
| 131 layout.GetLastValidColumnSet()->AddColumn(0.6f); |
| 132 layout.GetLastValidColumnSet()->AddColumn(0.6f); |
| 133 layout.GetLastValidColumnSet()->AddColumn(0.6f); |
| 134 |
| 135 scoped_nsobject<NSView> view1 = CreateViewWithHeight(37.0f); |
| 136 layout.AddView(view1); |
| 137 layout.SizeRowsAndColumns(0.0f); |
| 138 EXPECT_FLOAT_EQ(37.0f, layout.GetRowHeight(0)); |
| 139 |
| 140 scoped_nsobject<NSView> view2 = CreateViewWithHeight(26.0f); |
| 141 layout.AddView(view2); |
| 142 layout.SizeRowsAndColumns(0.0f); |
| 143 EXPECT_FLOAT_EQ(37.0f, layout.GetRowHeight(0)); |
| 144 |
| 145 scoped_nsobject<NSView> view3 = CreateViewWithHeight(42.0f); |
| 146 layout.AddView(view3); |
| 147 layout.SizeRowsAndColumns(0.0f); |
| 148 EXPECT_FLOAT_EQ(42.0f, layout.GetRowHeight(0)); |
| 149 } |
| 150 |
| 151 TEST_F(LayoutTest, SizeRowsAdjustsRowLocations) { |
| 152 SimpleGridLayout layout(NULL); |
| 153 |
| 154 layout.AddRow(); |
| 155 layout.GetLastValidColumnSet()->AddColumn(0.6f); |
| 156 scoped_nsobject<NSView> view1 = CreateViewWithHeight(30.0f); |
| 157 layout.AddView(view1); |
| 158 |
| 159 layout.AddRow(); |
| 160 layout.GetLastValidColumnSet()->AddColumn(0.6f); |
| 161 scoped_nsobject<NSView> view2 = CreateViewWithHeight(40.0f); |
| 162 layout.AddView(view2); |
| 163 |
| 164 layout.SizeRowsAndColumns(0.0f); |
| 165 EXPECT_FLOAT_EQ(0.0f, layout.GetRowLocation(0)); |
| 166 EXPECT_FLOAT_EQ(30.0f, layout.GetRowLocation(1)); |
| 167 } |
| 168 |
| 169 TEST_F(LayoutTest, SimpleGridLayoutAdjustsViews) { |
| 170 SimpleGridLayout layout(NULL); |
| 171 |
| 172 layout.AddRow(); |
| 173 layout.GetLastValidColumnSet()->AddColumn(0.6f); |
| 174 layout.GetLastValidColumnSet()->AddPaddingColumn(30); |
| 175 layout.GetLastValidColumnSet()->AddColumn(0.4f); |
| 176 |
| 177 scoped_nsobject<NSView> view1 = CreateViewWithHeight(22.0f); |
| 178 scoped_nsobject<NSView> view2 = CreateViewWithHeight(20.0f); |
| 179 layout.AddView(view1); |
| 180 layout.AddView(view2); |
| 181 |
| 182 layout.AddRow(); |
| 183 layout.GetLastValidColumnSet()->AddColumn(0.6f); |
| 184 scoped_nsobject<NSView> view3 = CreateViewWithHeight(18.0f); |
| 185 layout.AddView(view3); |
| 186 |
| 187 scoped_nsobject<NSView> host_view = CreateViewWithWidth(150.0f); |
| 188 layout.Layout(host_view); |
| 189 |
| 190 EXPECT_FLOAT_EQ(72.0f, NSWidth([view1 frame])); |
| 191 EXPECT_FLOAT_EQ(22.0f, NSHeight([view1 frame])); |
| 192 EXPECT_FLOAT_EQ(0.0f, NSMinX([view1 frame])); |
| 193 EXPECT_FLOAT_EQ(0.0f, NSMinY([view1 frame])); |
| 194 |
| 195 EXPECT_FLOAT_EQ(48.0f, NSWidth([view2 frame])); |
| 196 EXPECT_FLOAT_EQ(22.0f, NSHeight([view2 frame])); |
| 197 EXPECT_FLOAT_EQ(102.0f, NSMinX([view2 frame])); |
| 198 EXPECT_FLOAT_EQ(0.0f, NSMinY([view2 frame])); |
| 199 |
| 200 EXPECT_FLOAT_EQ(150.0f, NSWidth([view3 frame])); |
| 201 EXPECT_FLOAT_EQ(18.0f, NSHeight([view3 frame])); |
| 202 EXPECT_FLOAT_EQ(0.0f, NSMinX([view3 frame])); |
| 203 EXPECT_FLOAT_EQ(22.0f, NSMinY([view3 frame])); |
| 204 } |
| 205 |
| 206 TEST_F(LayoutTest, PreferredHeightForEmptyLayout) { |
| 207 SimpleGridLayout layout(NULL); |
| 208 EXPECT_FLOAT_EQ(0.0f, layout.GetPreferredHeightForWidth(100.0)); |
| 209 } |
| 210 |
| 211 TEST_F(LayoutTest, SimpleGridLayoutHeightForWidth) |
| 212 { |
| 213 SimpleGridLayout layout(NULL); |
| 214 layout.AddRow(); |
| 215 layout.GetLastValidColumnSet()->AddColumn(0.6f); |
| 216 |
| 217 scoped_nsobject<NSView> view1 = CreateViewWithHeight(22.0f); |
| 218 layout.AddView(view1); |
| 219 EXPECT_FLOAT_EQ(22.0f, layout.GetPreferredHeightForWidth(100.0)); |
| 220 |
| 221 layout.AddPaddingRow(12); |
| 222 EXPECT_FLOAT_EQ(34.0f, layout.GetPreferredHeightForWidth(100.0)); |
| 223 |
| 224 layout.AddRow(); |
| 225 layout.GetLastValidColumnSet()->AddColumn(0.6f); |
| 226 scoped_nsobject<NSView> view2 = CreateViewWithHeight(13.0f); |
| 227 layout.AddView(view2); |
| 228 EXPECT_FLOAT_EQ(47.0f, layout.GetPreferredHeightForWidth(100.0)); |
| 229 } |
| 230 |
| 231 TEST_F(LayoutTest, SkipColumns) { |
| 232 ColumnLayout layout(NULL); |
| 233 |
| 234 ASSERT_TRUE(layout.GetLastValidColumnSet() != NULL); |
| 235 layout.GetLastValidColumnSet()->AddColumn(0.6f); |
| 236 layout.GetLastValidColumnSet()->AddColumn(0.6f); |
| 237 layout.GetLastValidColumnSet()->AddColumn(0.4f); |
| 238 layout.GetLastValidColumnSet()->AddColumn(0.6f); |
| 239 layout.GetLastValidColumnSet()->AddPaddingColumn(30); |
| 240 layout.GetLastValidColumnSet()->AddColumn(0.6f); |
| 241 |
| 242 // Skip a single column |
| 243 EXPECT_EQ(0, layout.next_column()); |
| 244 layout.SkipColumns(1); |
| 245 EXPECT_EQ(1, layout.next_column()); |
| 246 |
| 247 // Skip multiple columns |
| 248 layout.SkipColumns(2); |
| 249 EXPECT_EQ(3, layout.next_column()); |
| 250 |
| 251 // SkipColumns skips padding, too |
| 252 layout.SkipColumns(1); |
| 253 EXPECT_EQ(5, layout.next_column()); |
| 254 } |
| 255 |
| 256 TEST_F(LayoutTest, SkipPaddingColumns) { |
| 257 ColumnLayout layout(NULL); |
| 258 |
| 259 ASSERT_TRUE(layout.GetLastValidColumnSet() != NULL); |
| 260 layout.GetLastValidColumnSet()->AddColumn(0.6f); |
| 261 layout.GetLastValidColumnSet()->AddPaddingColumn(30); |
| 262 layout.GetLastValidColumnSet()->AddColumn(0.4f); |
| 263 layout.GetLastValidColumnSet()->AddPaddingColumn(30); |
| 264 layout.GetLastValidColumnSet()->AddPaddingColumn(30); |
| 265 layout.GetLastValidColumnSet()->AddColumn(0.4f); |
| 266 |
| 267 // Don't skip over non-padding columns. |
| 268 EXPECT_EQ(0, layout.next_column()); |
| 269 layout.SkipPaddingColumns(); |
| 270 EXPECT_EQ(0, layout.next_column()); |
| 271 |
| 272 // Skip a single padding column. |
| 273 layout.AdvanceColumn(); |
| 274 EXPECT_EQ(1, layout.next_column()); |
| 275 layout.SkipPaddingColumns(); |
| 276 EXPECT_EQ(2, layout.next_column()); |
| 277 |
| 278 // Skip multiple padding columns. |
| 279 layout.AdvanceColumn(); |
| 280 EXPECT_EQ(3, layout.next_column()); |
| 281 layout.SkipPaddingColumns(); |
| 282 EXPECT_EQ(5, layout.next_column()); |
| 283 } |
| 284 |
| 285 TEST_F(LayoutTest, SizeColumnsAdjustLocationAndSize) { |
| 286 ColumnLayout layout(NULL); |
| 287 |
| 288 ASSERT_TRUE(layout.GetLastValidColumnSet() != NULL); |
| 289 layout.GetLastValidColumnSet()->AddColumn(0.6f); |
| 290 layout.GetLastValidColumnSet()->AddPaddingColumn(30); |
| 291 layout.GetLastValidColumnSet()->AddColumn(0.4f); |
| 292 |
| 293 layout.SizeRowsAndColumns(130.0f); |
| 294 EXPECT_FLOAT_EQ(0.0f, layout.GetLastValidColumnSet()->ColumnLocation(0)); |
| 295 EXPECT_FLOAT_EQ(60.0f, layout.GetLastValidColumnSet()->GetColumnWidth(0)); |
| 296 EXPECT_FLOAT_EQ(60.0f, layout.GetLastValidColumnSet()->ColumnLocation(1)); |
| 297 EXPECT_FLOAT_EQ(30.0f, layout.GetLastValidColumnSet()->GetColumnWidth(1)); |
| 298 EXPECT_FLOAT_EQ(90.0f, layout.GetLastValidColumnSet()->ColumnLocation(2)); |
| 299 EXPECT_FLOAT_EQ(40.0f, layout.GetLastValidColumnSet()->GetColumnWidth(2)); |
| 300 } |
| 301 |
| 302 TEST_F(LayoutTest, AddViewSkipsPaddingColumns) { |
| 303 ColumnLayout layout(NULL); |
| 304 |
| 305 ASSERT_TRUE(layout.GetLastValidColumnSet() != NULL); |
| 306 layout.GetLastValidColumnSet()->AddColumn(0.6f); |
| 307 layout.GetLastValidColumnSet()->AddPaddingColumn(30); |
| 308 layout.GetLastValidColumnSet()->AddColumn(0.4f); |
| 309 |
| 310 EXPECT_EQ(0, layout.next_column()); |
| 311 scoped_nsobject<NSView> view1 = CreateViewWithWidth(37.0f); |
| 312 layout.AddView(view1); |
| 313 EXPECT_EQ(2, layout.next_column()); |
| 314 } |
| 315 |
| 316 TEST_F(LayoutTest, ColumnLayoutAdjustsViews) { |
| 317 ColumnLayout layout(NULL); |
| 318 |
| 319 ASSERT_TRUE(layout.GetLastValidColumnSet() != NULL); |
| 320 layout.GetLastValidColumnSet()->AddColumn(0.6f); |
| 321 layout.GetLastValidColumnSet()->AddPaddingColumn(30); |
| 322 layout.GetLastValidColumnSet()->AddColumn(0.4f); |
| 323 |
| 324 scoped_nsobject<NSView> view1 = CreateViewWithWidth(37.0f); |
| 325 scoped_nsobject<NSView> view2 = CreateViewWithWidth(42.0f); |
| 326 layout.AddView(view1); |
| 327 layout.AddView(view2); |
| 328 |
| 329 scoped_nsobject<NSView> host_view = CreateViewWithWidth(150.0f); |
| 330 layout.Layout(host_view); |
| 331 |
| 332 EXPECT_FLOAT_EQ(72.0f, NSWidth([view1 frame])); |
| 333 EXPECT_FLOAT_EQ(48.0f, NSWidth([view2 frame])); |
| 334 } |
| 335 |
| 336 TEST_F(LayoutTest, ColumnSetAddPadding) { |
| 337 ColumnSet columns(0); |
| 338 |
| 339 columns.AddPaddingColumn(20); |
| 340 EXPECT_EQ(1, columns.num_columns()); |
| 341 |
| 342 columns.CalculateSize(20.0f); |
| 343 EXPECT_FLOAT_EQ(20.0f, columns.GetColumnWidth(0)); |
| 344 |
| 345 columns.CalculateSize(120.0f); |
| 346 EXPECT_FLOAT_EQ(20.0f, columns.GetColumnWidth(0)); |
| 347 } |
| 348 |
| 349 TEST_F(LayoutTest, ColumnSetOneFlexibleColumn) { |
| 350 ColumnSet columns(0); |
| 351 |
| 352 columns.AddColumn(1.0f); |
| 353 EXPECT_EQ(1, columns.num_columns()); |
| 354 |
| 355 columns.CalculateSize(20.0f); |
| 356 EXPECT_FLOAT_EQ(20.0f, columns.GetColumnWidth(0)); |
| 357 |
| 358 columns.CalculateSize(120.0f); |
| 359 EXPECT_FLOAT_EQ(120.0f, columns.GetColumnWidth(0)); |
| 360 } |
| 361 |
| 362 TEST_F(LayoutTest, ColumnSetTwoFlexibleColumns) { |
| 363 ColumnSet columns(0); |
| 364 |
| 365 columns.AddColumn(0.6f); |
| 366 columns.AddColumn(0.4f); |
| 367 EXPECT_EQ(2, columns.num_columns()); |
| 368 |
| 369 columns.CalculateSize(100.0f); |
| 370 EXPECT_FLOAT_EQ(60.0f, columns.GetColumnWidth(0)); |
| 371 EXPECT_FLOAT_EQ(40.0f, columns.GetColumnWidth(1)); |
| 372 |
| 373 columns.CalculateSize(150.0f); |
| 374 EXPECT_FLOAT_EQ(90.0f, columns.GetColumnWidth(0)); |
| 375 EXPECT_FLOAT_EQ(60.0f, columns.GetColumnWidth(1)); |
| 376 } |
| 377 |
| 378 TEST_F(LayoutTest, ColumnSetMixedColumns) { |
| 379 ColumnSet columns(0); |
| 380 |
| 381 columns.AddColumn(0.6f); |
| 382 columns.AddPaddingColumn(20); |
| 383 columns.AddColumn(0.4f); |
| 384 EXPECT_EQ(3, columns.num_columns()); |
| 385 |
| 386 columns.CalculateSize(100.0f); |
| 387 EXPECT_FLOAT_EQ(48.0f, columns.GetColumnWidth(0)); |
| 388 EXPECT_FLOAT_EQ(20.0f, columns.GetColumnWidth(1)); |
| 389 EXPECT_FLOAT_EQ(32.0f, columns.GetColumnWidth(2)); |
| 390 |
| 391 columns.CalculateSize(200.0f); |
| 392 EXPECT_FLOAT_EQ(108.0f, columns.GetColumnWidth(0)); |
| 393 EXPECT_FLOAT_EQ(20.0f, columns.GetColumnWidth(1)); |
| 394 EXPECT_FLOAT_EQ(72.0f, columns.GetColumnWidth(2)); |
| 395 } |
| 396 |
| 397 } // namespace |
| OLD | NEW |