Index: views/grid_layout_unittest.cc |
diff --git a/views/grid_layout_unittest.cc b/views/grid_layout_unittest.cc |
index c5e56fd1f0744d44618401c0f1b1dfd00bbc02a3..a70ae5fee1c2f60a5ddcb8842d02861385ae9f26 100644 |
--- a/views/grid_layout_unittest.cc |
+++ b/views/grid_layout_unittest.cc |
@@ -1,4 +1,4 @@ |
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. |
+// Copyright (c) 2010 The Chromium Authors. All rights reserved. |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
@@ -32,6 +32,25 @@ class SettableSizeView : public View { |
gfx::Size pref_; |
}; |
+// A view with fixed circumference that trades height for width. |
+class FlexibleView : public View { |
+ public: |
+ explicit FlexibleView(int circumference) { |
+ circumference_ = circumference; |
+ } |
+ |
+ virtual gfx::Size GetPreferredSize() { |
+ return gfx::Size(0, circumference_ / 2); |
+ } |
+ |
+ virtual int GetHeightForWidth(int width) { |
+ return std::max(0, circumference_ / 2 - width); |
+ } |
+ |
+ private: |
+ int circumference_; |
+}; |
+ |
class GridLayoutTest : public testing::Test { |
public: |
virtual void SetUp() { |
@@ -548,3 +567,42 @@ TEST_F(GridLayoutTest, ColumnSpanResizing) { |
// 4 + (6 * 4 / 6). |
ExpectViewBoundsEquals(4, 40, 8, 40, view2); |
} |
+ |
+// Check that GetPreferredSize() takes resizing of columns into account when |
+// there is additional space in the case we have column sets of different |
+// preferred sizes. |
+TEST_F(GridLayoutTest, ColumnResizingOnGetPreferredSize) { |
+ views::ColumnSet* set = layout->AddColumnSet(0); |
+ set->AddColumn(views::GridLayout::FILL, views::GridLayout::CENTER, |
+ 1, views::GridLayout::USE_PREF, 0, 0); |
+ |
+ set = layout->AddColumnSet(1); |
+ set->AddColumn(views::GridLayout::FILL, views::GridLayout::CENTER, |
+ 1, views::GridLayout::USE_PREF, 0, 0); |
+ |
+ set = layout->AddColumnSet(2); |
+ set->AddColumn(views::GridLayout::FILL, views::GridLayout::CENTER, |
+ 1, views::GridLayout::USE_PREF, 0, 0); |
+ |
+ // Make a row containing a flexible view that trades width for height. |
+ layout->StartRow(0, 0); |
+ View* view1 = new FlexibleView(100); |
+ layout->AddView(view1, 1, 1, GridLayout::FILL, GridLayout::LEADING); |
+ |
+ // The second row contains a view of fixed size that will enforce a column |
+ // width of 20 pixels. |
+ layout->StartRow(0, 1); |
+ View* view2 = new SettableSizeView(gfx::Size(20, 20)); |
+ layout->AddView(view2, 1, 1, GridLayout::FILL, GridLayout::LEADING); |
+ |
+ // Add another flexible view in row three in order to ensure column set |
+ // ordering doesn't influence sizing behaviour. |
+ layout->StartRow(0, 2); |
+ View* view3 = new FlexibleView(40); |
+ layout->AddView(view3, 1, 1, GridLayout::FILL, GridLayout::LEADING); |
+ |
+ // We expect a height of 50: 30 from the variable width view in the first row |
+ // plus 20 from the statically sized view in the second row. The flexible |
+ // view in the third row should contribute no height. |
+ EXPECT_EQ(gfx::Size(20, 50), layout->GetPreferredSize(&host)); |
+} |