172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file.
4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/ui/gtk/gtk_chrome_shrinkable_hbox.h"
6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
7c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <vector>
8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "testing/gtest/include/gtest/gtest.h"
10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace {
12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst int kSpacing = 3;
14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst int kBorderWidth = 5;
15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}  // namespace
17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass GtkChromeShrinkableHBoxTest : public testing::Test {
19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch protected:
20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  GtkChromeShrinkableHBoxTest()
21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      : window_(gtk_window_new(GTK_WINDOW_TOPLEVEL)),
22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch        box_(gtk_chrome_shrinkable_hbox_new(FALSE, FALSE, kSpacing)) {
23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    gtk_widget_set_direction(box_, GTK_TEXT_DIR_LTR);
24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    gtk_window_set_default_size(GTK_WINDOW(window_), 200, 200);
25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    gtk_container_add(GTK_CONTAINER(window_), box_);
26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    gtk_container_set_border_width(GTK_CONTAINER(box_), kBorderWidth);
27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ~GtkChromeShrinkableHBoxTest() {
30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    gtk_widget_destroy(window_);
31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Add some children widgets with arbitrary width and padding.
34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void AddChildren(bool pack_start) {
35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    static struct {
36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      int width;
37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      int padding;
38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    } kChildrenData[] = {
39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      { 60, 2 },
40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      { 70, 3 },
41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      { 80, 5 },
42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      { 50, 7 },
43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      { 40, 11 },
44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      { 60, 0 },
45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      { 0, 0 }
46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    };
47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    for (size_t i = 0; kChildrenData[i].width; ++i) {
49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      GtkWidget* child = gtk_fixed_new();
50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      gtk_widget_set_size_request(child, kChildrenData[i].width, -1);
51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      if (pack_start) {
52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch        gtk_chrome_shrinkable_hbox_pack_start(
53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch            GTK_CHROME_SHRINKABLE_HBOX(box_), child, kChildrenData[i].padding);
54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      } else {
55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch        gtk_chrome_shrinkable_hbox_pack_end(
56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch            GTK_CHROME_SHRINKABLE_HBOX(box_), child, kChildrenData[i].padding);
57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      }
58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    }
59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Check if all children's size allocation are inside the |box_|'s boundary.
62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void Validate(bool pack_start) {
63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    std::vector<ChildData> children_data;
64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    gtk_container_foreach(GTK_CONTAINER(box_), CollectChildData,
65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          &children_data);
66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    size_t children_count = children_data.size();
68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    size_t visible_children_count = 0;
69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    for (size_t i = 0; i < children_count; ++i) {
70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      if (children_data[i].visible)
71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch        ++visible_children_count;
72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    }
73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    if (visible_children_count == 0)
75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      return;
76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    int border_width = gtk_container_get_border_width(GTK_CONTAINER(box_));
78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    int x = box_->allocation.x + border_width;
79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    int width = box_->allocation.width - border_width * 2;
80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    int spacing = gtk_box_get_spacing(GTK_BOX(box_));
81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    bool homogeneous = gtk_box_get_homogeneous(GTK_BOX(box_));
82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    if (homogeneous) {
84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      // If the |box_| is in homogeneous mode, then check if the visible
85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      // children are not overlapped with each other.
86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      int homogeneous_child_width =
87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (width - (visible_children_count - 1) * spacing) /
88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          visible_children_count;
89c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
90c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      for (size_t i = 0; i < children_count; ++i) {
91c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch        SCOPED_TRACE(testing::Message() << "Validate homogeneous child " << i
92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                     << " visible: " << children_data[i].visible
93c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                     << " padding: " << children_data[i].padding
94c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                     << " x: " << children_data[i].x
95c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                     << " width: " << children_data[i].width);
96c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
97c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch        if (children_data[i].visible)
98c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          ASSERT_LE(children_data[i].width, homogeneous_child_width);
99c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      }
100c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    } else {
101c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      // If the |box_| is not in homogeneous mode, then just check if all
102c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      // visible children are inside the |box_|'s boundary. And for those
103c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      // hidden children which are out of the boundary, they should only
104c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      // be hidden one by one from the end of the |box_|.
105c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      bool last_visible = pack_start;
106c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      bool visibility_changed = false;
107c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      for (size_t i = 0; i < children_count; ++i) {
108c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch        SCOPED_TRACE(testing::Message() << "Validate child " << i
109c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                     << " visible: " << children_data[i].visible
110c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                     << " padding: " << children_data[i].padding
111c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                     << " x: " << children_data[i].x
112c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                     << " width: " << children_data[i].width);
113c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
114c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch        if (last_visible != children_data[i].visible) {
115c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          ASSERT_FALSE(visibility_changed);
116c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          visibility_changed = true;
117c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          last_visible = children_data[i].visible;
118c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch        }
119c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch        if (children_data[i].visible) {
120c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          ASSERT_GE(children_data[i].x,
121c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                    x + children_data[i].padding);
122c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          ASSERT_LE(children_data[i].x + children_data[i].width,
123c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                    x + width - children_data[i].padding);
124c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch        }
125c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      }
126c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    }
127c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
128c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
129c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void Test(bool pack_start) {
130c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    gtk_widget_show_all(window_);
131c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    GtkAllocation allocation = { 0, 0, 0, 200 };
132c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    gtk_chrome_shrinkable_hbox_set_hide_child_directly(
133c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch        GTK_CHROME_SHRINKABLE_HBOX(box_), FALSE);
134c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    for (int width = 500; width > kBorderWidth * 2; --width) {
135c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      SCOPED_TRACE(testing::Message() << "Shrink hide_child_directly = FALSE,"
136c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                   << " width = " << width);
137c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
138c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      allocation.width = width;
139c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      // Reducing the width may cause some children to be hidden, which will
140c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      // cause queue resize, so it's necessary to do another size allocation to
141c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      // emulate the queue resize.
142c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      gtk_widget_size_allocate(box_, &allocation);
143c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      gtk_widget_size_allocate(box_, &allocation);
144c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      ASSERT_NO_FATAL_FAILURE(Validate(pack_start)) << "width = " << width;
145c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    }
146c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
147c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    for (int width = kBorderWidth * 2; width <= 500; ++width) {
148c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      SCOPED_TRACE(testing::Message() << "Expand hide_child_directly = FALSE,"
149c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                   << " width = " << width);
150c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
151c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      allocation.width = width;
152c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      // Expanding the width may cause some invisible children to be shown,
153c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      // which will cause queue resize, so it's necessary to do another size
154c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      // allocation to emulate the queue resize.
155c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      gtk_widget_size_allocate(box_, &allocation);
156c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      gtk_widget_size_allocate(box_, &allocation);
157c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      ASSERT_NO_FATAL_FAILURE(Validate(pack_start));
158c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    }
159c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
160c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    gtk_chrome_shrinkable_hbox_set_hide_child_directly(
161c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch        GTK_CHROME_SHRINKABLE_HBOX(box_), TRUE);
162c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    for (int width = 500; width > kBorderWidth * 2; --width) {
163c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      SCOPED_TRACE(testing::Message() << "Shrink hide_child_directly = TRUE,"
164c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                   << " width = " << width);
165c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
166c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      allocation.width = width;
167c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      gtk_widget_size_allocate(box_, &allocation);
168c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      gtk_widget_size_allocate(box_, &allocation);
169c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      ASSERT_NO_FATAL_FAILURE(Validate(pack_start));
170c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    }
171c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
172c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    for (int width = kBorderWidth * 2; width <= 500; ++width) {
173c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      SCOPED_TRACE(testing::Message() << "Expand hide_child_directly = TRUE,"
174c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                   << " width = " << width);
175c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
176c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      allocation.width = width;
177c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      gtk_widget_size_allocate(box_, &allocation);
178c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      gtk_widget_size_allocate(box_, &allocation);
179c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      ASSERT_NO_FATAL_FAILURE(Validate(pack_start));
180c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    }
181c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
182c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
183c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch protected:
184c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  GtkWidget* window_;
185c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  GtkWidget* box_;
186c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
187c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private:
188c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  struct ChildData {
189c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    bool visible;
190c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    int padding;
191c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    int x;
192c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    int width;
193c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  };
194c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
195c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  static void CollectChildData(GtkWidget* child, gpointer userdata) {
196c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    guint padding;
197c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    gtk_box_query_child_packing(GTK_BOX(gtk_widget_get_parent(child)), child,
198c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                NULL, NULL, &padding, NULL);
199c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
200c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    ChildData data;
201c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    data.visible = GTK_WIDGET_VISIBLE(child);
202c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    data.padding = padding;
203c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    data.x = child->allocation.x;
204c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    data.width = child->allocation.width;
205c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
206c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    reinterpret_cast<std::vector<ChildData>*>(userdata)->push_back(data);
207c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
208c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
209c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
210c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(GtkChromeShrinkableHBoxTest, PackStart) {
211c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  AddChildren(true);
212c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
213c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  {
214c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    SCOPED_TRACE("Test LTR");
215c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    gtk_widget_set_direction(box_, GTK_TEXT_DIR_LTR);
216c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_NO_FATAL_FAILURE(Test(true));
217c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
218c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  {
219c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    SCOPED_TRACE("Test RTL");
220c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    gtk_widget_set_direction(box_, GTK_TEXT_DIR_RTL);
221c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_NO_FATAL_FAILURE(Test(true));
222c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
223c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
224c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
225c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(GtkChromeShrinkableHBoxTest, PackEnd) {
226c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  AddChildren(false);
227c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
228c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  {
229c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    SCOPED_TRACE("Test LTR");
230c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    gtk_widget_set_direction(box_, GTK_TEXT_DIR_LTR);
231c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_NO_FATAL_FAILURE(Test(false));
232c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
233c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  {
234c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    SCOPED_TRACE("Test RTL");
235c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    gtk_widget_set_direction(box_, GTK_TEXT_DIR_RTL);
236c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_NO_FATAL_FAILURE(Test(false));
237c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
238c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
239c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
240c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(GtkChromeShrinkableHBoxTest, Homogeneous) {
241c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  AddChildren(true);
242c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  gtk_box_set_homogeneous(GTK_BOX(box_), true);
243c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
244c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  {
245c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    SCOPED_TRACE("Test LTR");
246c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    gtk_widget_set_direction(box_, GTK_TEXT_DIR_LTR);
247c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_NO_FATAL_FAILURE(Test(true));
248c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
249c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  {
250c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    SCOPED_TRACE("Test RTL");
251c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    gtk_widget_set_direction(box_, GTK_TEXT_DIR_RTL);
252c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_NO_FATAL_FAILURE(Test(true));
253c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
254c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
255