15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/layout/box_layout.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 8c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ui/views/test/test_views.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/view.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace views { 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BoxLayoutTest : public testing::Test { 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUp() OVERRIDE { 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host_.reset(new View); 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<View> host_; 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<BoxLayout> layout_; 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BoxLayoutTest, Empty) { 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout_.reset(new BoxLayout(BoxLayout::kHorizontal, 10, 10, 20)); 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(gfx::Size(20, 20), layout_->GetPreferredSize(host_.get())); 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BoxLayoutTest, AlignmentHorizontal) { 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout_.reset(new BoxLayout(BoxLayout::kHorizontal, 0, 0, 0)); 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) View* v1 = new StaticSizedView(gfx::Size(10, 20)); 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host_->AddChildView(v1); 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) View* v2 = new StaticSizedView(gfx::Size(10, 10)); 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host_->AddChildView(v2); 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(gfx::Size(20, 20), layout_->GetPreferredSize(host_.get())); 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host_->SetBounds(0, 0, 20, 20); 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout_->Layout(host_.get()); 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(gfx::Rect(0, 0, 10, 20), v1->bounds()); 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(gfx::Rect(10, 0, 10, 20), v2->bounds()); 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BoxLayoutTest, AlignmentVertical) { 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout_.reset(new BoxLayout(BoxLayout::kVertical, 0, 0, 0)); 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) View* v1 = new StaticSizedView(gfx::Size(20, 10)); 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host_->AddChildView(v1); 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) View* v2 = new StaticSizedView(gfx::Size(10, 10)); 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host_->AddChildView(v2); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(gfx::Size(20, 20), layout_->GetPreferredSize(host_.get())); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host_->SetBounds(0, 0, 20, 20); 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout_->Layout(host_.get()); 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(gfx::Rect(0, 0, 20, 10), v1->bounds()); 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(gfx::Rect(0, 10, 20, 10), v2->bounds()); 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)TEST_F(BoxLayoutTest, SetInsideBorderInsets) { 5946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) layout_.reset(new BoxLayout(BoxLayout::kHorizontal, 10, 20, 0)); 6046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) View* v1 = new StaticSizedView(gfx::Size(10, 20)); 6146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) host_->AddChildView(v1); 6246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) View* v2 = new StaticSizedView(gfx::Size(10, 10)); 6346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) host_->AddChildView(v2); 6446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(gfx::Size(40, 60), layout_->GetPreferredSize(host_.get())); 6546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) host_->SetBounds(0, 0, 40, 60); 6646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) layout_->Layout(host_.get()); 6746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(gfx::Rect(10, 20, 10, 20), v1->bounds()); 6846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(gfx::Rect(20, 20, 10, 20), v2->bounds()); 6946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 7046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) layout_->set_inside_border_insets( 7146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) gfx::Insets(5, 10, 15, 20)); 7246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(gfx::Size(50, 40), layout_->GetPreferredSize(host_.get())); 7346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) host_->SetBounds(0, 0, 50, 40); 7446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) layout_->Layout(host_.get()); 7546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(gfx::Rect(10, 5, 10, 20), v1->bounds()); 7646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(gfx::Rect(20, 5, 10, 20), v2->bounds()); 7746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 7846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BoxLayoutTest, Spacing) { 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout_.reset(new BoxLayout(BoxLayout::kHorizontal, 7, 7, 8)); 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) View* v1 = new StaticSizedView(gfx::Size(10, 20)); 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host_->AddChildView(v1); 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) View* v2 = new StaticSizedView(gfx::Size(10, 20)); 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host_->AddChildView(v2); 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(gfx::Size(42, 34), layout_->GetPreferredSize(host_.get())); 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host_->SetBounds(0, 0, 100, 100); 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout_->Layout(host_.get()); 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(gfx::Rect(7, 7, 10, 86), v1->bounds()); 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(gfx::Rect(25, 7, 10, 86), v2->bounds()); 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BoxLayoutTest, Overflow) { 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout_.reset(new BoxLayout(BoxLayout::kHorizontal, 0, 0, 0)); 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) View* v1 = new StaticSizedView(gfx::Size(20, 20)); 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host_->AddChildView(v1); 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) View* v2 = new StaticSizedView(gfx::Size(10, 20)); 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host_->AddChildView(v2); 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host_->SetBounds(0, 0, 10, 10); 99cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 100cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Overflows by positioning views at the start and truncating anything that 101cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // doesn't fit. 102cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) layout_->Layout(host_.get()); 103cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(gfx::Rect(0, 0, 10, 10), v1->bounds()); 104cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(gfx::Rect(0, 0, 0, 0), v2->bounds()); 105cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 106cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // All values of main axis alignment should overflow in the same manner. 107cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) layout_->set_main_axis_alignment(BoxLayout::MAIN_AXIS_ALIGNMENT_START); 108cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) layout_->Layout(host_.get()); 109cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(gfx::Rect(0, 0, 10, 10), v1->bounds()); 110cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(gfx::Rect(0, 0, 0, 0), v2->bounds()); 111cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 112cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) layout_->set_main_axis_alignment(BoxLayout::MAIN_AXIS_ALIGNMENT_CENTER); 113cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) layout_->Layout(host_.get()); 114cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(gfx::Rect(0, 0, 10, 10), v1->bounds()); 115cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(gfx::Rect(0, 0, 0, 0), v2->bounds()); 116cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 117cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) layout_->set_main_axis_alignment(BoxLayout::MAIN_AXIS_ALIGNMENT_END); 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout_->Layout(host_.get()); 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(gfx::Rect(0, 0, 10, 10), v1->bounds()); 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(gfx::Rect(0, 0, 0, 0), v2->bounds()); 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BoxLayoutTest, NoSpace) { 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout_.reset(new BoxLayout(BoxLayout::kHorizontal, 10, 10, 10)); 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) View* childView = new StaticSizedView(gfx::Size(20, 20)); 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host_->AddChildView(childView); 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host_->SetBounds(0, 0, 10, 10); 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout_->Layout(host_.get()); 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(gfx::Rect(0, 0, 0, 0), childView->bounds()); 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BoxLayoutTest, InvisibleChild) { 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout_.reset(new BoxLayout(BoxLayout::kHorizontal, 10, 10, 10)); 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) View* v1 = new StaticSizedView(gfx::Size(20, 20)); 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) v1->SetVisible(false); 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host_->AddChildView(v1); 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) View* v2 = new StaticSizedView(gfx::Size(10, 10)); 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host_->AddChildView(v2); 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(gfx::Size(30, 30), layout_->GetPreferredSize(host_.get())); 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host_->SetBounds(0, 0, 30, 30); 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout_->Layout(host_.get()); 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(gfx::Rect(10, 10, 10, 10), v2->bounds()); 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 145cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)TEST_F(BoxLayoutTest, MainAxisAlignmentFill) { 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout_.reset(new BoxLayout(BoxLayout::kHorizontal, 10, 10, 10)); 147cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) layout_->set_main_axis_alignment(BoxLayout::MAIN_AXIS_ALIGNMENT_FILL); 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) View* v1 = new StaticSizedView(gfx::Size(20, 20)); 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host_->AddChildView(v1); 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) View* v2 = new StaticSizedView(gfx::Size(10, 10)); 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host_->AddChildView(v2); 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(gfx::Size(60, 40), layout_->GetPreferredSize(host_.get())); 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host_->SetBounds(0, 0, 100, 40); 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout_->Layout(host_.get()); 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(gfx::Rect(10, 10, 40, 20).ToString(), v1->bounds().ToString()); 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(gfx::Rect(60, 10, 30, 20).ToString(), v2->bounds().ToString()); 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(BoxLayoutTest, UseHeightForWidth) { 1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layout_.reset(new BoxLayout(BoxLayout::kVertical, 0, 0, 0)); 1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) View* v1 = new StaticSizedView(gfx::Size(20, 10)); 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) host_->AddChildView(v1); 1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) View* v2 = new ProportionallySizedView(2); 1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) host_->AddChildView(v2); 1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(gfx::Size(20, 50), layout_->GetPreferredSize(host_.get())); 1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) host_->SetBounds(0, 0, 20, 50); 1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layout_->Layout(host_.get()); 1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(gfx::Rect(0, 0, 20, 10), v1->bounds()); 1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(gfx::Rect(0, 10, 20, 40), v2->bounds()); 1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(110, layout_->GetPreferredHeightForWidth(host_.get(), 50)); 1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 17790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)TEST_F(BoxLayoutTest, EmptyPreferredSize) { 17890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) for (size_t i = 0; i < 2; i++) { 17990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) BoxLayout::Orientation orientation = i == 0 ? BoxLayout::kHorizontal : 18090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) BoxLayout::kVertical; 18190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) host_->RemoveAllChildViews(true); 18290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) host_->SetLayoutManager(new BoxLayout(orientation, 0, 0, 5)); 18390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) View* v1 = new StaticSizedView(gfx::Size()); 18490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) host_->AddChildView(v1); 18590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) View* v2 = new StaticSizedView(gfx::Size(10, 10)); 18690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) host_->AddChildView(v2); 18790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) host_->SizeToPreferredSize(); 18890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) host_->Layout(); 18990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 19090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(v2->GetPreferredSize().width(), host_->bounds().width()) << i; 19190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(v2->GetPreferredSize().height(), host_->bounds().height()) << i; 19290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(v1->GetPreferredSize().width(), v1->bounds().width()) << i; 19390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(v1->GetPreferredSize().height(), v1->bounds().height()) << i; 19490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(v2->GetPreferredSize().width(), v2->bounds().width()) << i; 19590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(v2->GetPreferredSize().height(), v2->bounds().height()) << i; 19690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) } 19790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 19890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 199cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)TEST_F(BoxLayoutTest, MainAxisAlignmentHorizontal) { 200cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) layout_.reset(new BoxLayout(BoxLayout::kHorizontal, 10, 10, 10)); 201cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 202cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) View* v1 = new StaticSizedView(gfx::Size(20, 20)); 203cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) host_->AddChildView(v1); 204cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) View* v2 = new StaticSizedView(gfx::Size(10, 10)); 205cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) host_->AddChildView(v2); 206cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 207cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) host_->SetBounds(0, 0, 100, 40); 208cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 209cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Align children to the horizontal start by default. 210cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) layout_->Layout(host_.get()); 211cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(gfx::Rect(10, 10, 20, 20).ToString(), v1->bounds().ToString()); 212cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(gfx::Rect(40, 10, 10, 20).ToString(), v2->bounds().ToString()); 213cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 214cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Ensure same results for MAIN_AXIS_ALIGNMENT_START. 215cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) layout_->set_main_axis_alignment(BoxLayout::MAIN_AXIS_ALIGNMENT_START); 216cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) layout_->Layout(host_.get()); 217cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(gfx::Rect(10, 10, 20, 20).ToString(), v1->bounds().ToString()); 218cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(gfx::Rect(40, 10, 10, 20).ToString(), v2->bounds().ToString()); 219cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 220cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Aligns children to the center horizontally. 221cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) layout_->set_main_axis_alignment(BoxLayout::MAIN_AXIS_ALIGNMENT_CENTER); 222cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) layout_->Layout(host_.get()); 223cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(gfx::Rect(30, 10, 20, 20).ToString(), v1->bounds().ToString()); 224cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(gfx::Rect(60, 10, 10, 20).ToString(), v2->bounds().ToString()); 225cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 226cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Aligns children to the end of the host horizontally, accounting for the 227cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // inside border spacing. 228cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) layout_->set_main_axis_alignment(BoxLayout::MAIN_AXIS_ALIGNMENT_END); 229cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) layout_->Layout(host_.get()); 230cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(gfx::Rect(50, 10, 20, 20).ToString(), v1->bounds().ToString()); 231cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(gfx::Rect(80, 10, 10, 20).ToString(), v2->bounds().ToString()); 232cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 233cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 234cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)TEST_F(BoxLayoutTest, MainAxisAlignmentVertical) { 235cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) layout_.reset(new BoxLayout(BoxLayout::kVertical, 10, 10, 10)); 236cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 237cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) View* v1 = new StaticSizedView(gfx::Size(20, 20)); 238cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) host_->AddChildView(v1); 239cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) View* v2 = new StaticSizedView(gfx::Size(10, 10)); 240cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) host_->AddChildView(v2); 241cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 242cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) host_->SetBounds(0, 0, 40, 100); 243cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 244cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Align children to the vertical start by default. 245cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) layout_->Layout(host_.get()); 246cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(gfx::Rect(10, 10, 20, 20).ToString(), v1->bounds().ToString()); 247cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(gfx::Rect(10, 40, 20, 10).ToString(), v2->bounds().ToString()); 248cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 249cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Ensure same results for MAIN_AXIS_ALIGNMENT_START. 250cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) layout_->set_main_axis_alignment(BoxLayout::MAIN_AXIS_ALIGNMENT_START); 251cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) layout_->Layout(host_.get()); 252cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(gfx::Rect(10, 10, 20, 20).ToString(), v1->bounds().ToString()); 253cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(gfx::Rect(10, 40, 20, 10).ToString(), v2->bounds().ToString()); 254cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 255cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Aligns children to the center vertically. 256cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) layout_->set_main_axis_alignment(BoxLayout::MAIN_AXIS_ALIGNMENT_CENTER); 257cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) layout_->Layout(host_.get()); 258cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(gfx::Rect(10, 30, 20, 20).ToString(), v1->bounds().ToString()); 259cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(gfx::Rect(10, 60, 20, 10).ToString(), v2->bounds().ToString()); 260cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 261cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Aligns children to the end of the host vertically, accounting for the 262cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // inside border spacing. 263cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) layout_->set_main_axis_alignment(BoxLayout::MAIN_AXIS_ALIGNMENT_END); 264cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) layout_->Layout(host_.get()); 265cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(gfx::Rect(10, 50, 20, 20).ToString(), v1->bounds().ToString()); 266cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(gfx::Rect(10, 80, 20, 10).ToString(), v2->bounds().ToString()); 267cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 268cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace views 270