Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5255)

Unified Diff: chrome/browser/gtk/gtk_expanded_container_unittest.cc

Issue 507022: Fix issue 11258: Linux: gracefully handle small browser window... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 11 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/gtk/gtk_expanded_container.cc ('k') | chrome/browser/gtk/infobar_gtk.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/gtk/gtk_expanded_container_unittest.cc
===================================================================
--- chrome/browser/gtk/gtk_expanded_container_unittest.cc (revision 0)
+++ chrome/browser/gtk/gtk_expanded_container_unittest.cc (revision 0)
@@ -0,0 +1,159 @@
+// Copyright (c) 2009 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.
+
+#include "chrome/browser/gtk/gtk_expanded_container.h"
+
+#include "testing/gtest/include/gtest/gtest.h"
+
+class GtkExpandedContainerTest : public testing::Test {
+ protected:
+ GtkExpandedContainerTest()
+ : window_(gtk_window_new(GTK_WINDOW_TOPLEVEL)),
+ expanded_(gtk_expanded_container_new()) {
+ gtk_window_set_default_size(GTK_WINDOW(window_), 200, 200);
+ gtk_container_add(GTK_CONTAINER(window_), expanded_);
+ }
+ ~GtkExpandedContainerTest() {
+ gtk_widget_destroy(window_);
+ }
+
+ bool FindChild(GtkWidget* widget) {
+ GList* children = gtk_container_get_children(GTK_CONTAINER(expanded_));
+ for (GList* child = children; child; child = child->next) {
+ if (GTK_WIDGET(child->data) == widget) {
+ g_list_free(children);
+ return true;
+ }
+ }
+ g_list_free(children);
+ return false;
+ }
+
+ int GetChildX(GtkWidget* widget) {
+ GValue x = { 0 };
+ g_value_init(&x, G_TYPE_INT);
+ gtk_container_child_get_property(GTK_CONTAINER(expanded_), widget, "x", &x);
+ return g_value_get_int(&x);
+ }
+
+ int GetChildY(GtkWidget* widget) {
+ GValue y = { 0 };
+ g_value_init(&y, G_TYPE_INT);
+ gtk_container_child_get_property(GTK_CONTAINER(expanded_), widget, "y", &y);
+ return g_value_get_int(&y);
+ }
+
+ protected:
+ GtkWidget* window_;
+ GtkWidget* expanded_;
+};
+
+TEST_F(GtkExpandedContainerTest, AddRemove) {
+ GtkWidget* child1 = gtk_fixed_new();
+ GtkWidget* child2 = gtk_fixed_new();
+ gtk_container_add(GTK_CONTAINER(expanded_), child1);
+ ASSERT_TRUE(FindChild(child1));
+
+ gtk_container_add(GTK_CONTAINER(expanded_), child2);
+ ASSERT_TRUE(FindChild(child2));
+ ASSERT_TRUE(FindChild(child1));
+
+ gtk_container_remove(GTK_CONTAINER(expanded_), child1);
+ ASSERT_FALSE(FindChild(child1));
+ ASSERT_TRUE(FindChild(child2));
+
+ gtk_container_remove(GTK_CONTAINER(expanded_), child2);
+ ASSERT_FALSE(FindChild(child2));
+}
+
+TEST_F(GtkExpandedContainerTest, Expand) {
+ GtkWidget* child1 = gtk_fixed_new();
+ GtkWidget* child2 = gtk_fixed_new();
+ gtk_container_add(GTK_CONTAINER(expanded_), child1);
+ gtk_expanded_container_put(GTK_EXPANDED_CONTAINER(expanded_),
+ child2, 10, 20);
+ gtk_widget_show_all(window_);
+
+ GtkAllocation allocation = { 0, 0, 50, 100 };
+ gtk_widget_size_allocate(expanded_, &allocation);
+
+ EXPECT_EQ(0, child1->allocation.x);
+ EXPECT_EQ(0, child1->allocation.y);
+ EXPECT_EQ(50, child1->allocation.width);
+ EXPECT_EQ(100, child1->allocation.height);
+
+ EXPECT_EQ(10, child2->allocation.x);
+ EXPECT_EQ(20, child2->allocation.y);
+ EXPECT_EQ(50, child2->allocation.width);
+ EXPECT_EQ(100, child2->allocation.height);
+
+ allocation.x = 10;
+ allocation.y = 20;
+ gtk_widget_size_allocate(expanded_, &allocation);
+
+ EXPECT_EQ(10, child1->allocation.x);
+ EXPECT_EQ(20, child1->allocation.y);
+ EXPECT_EQ(20, child2->allocation.x);
+ EXPECT_EQ(40, child2->allocation.y);
+}
+
+// Test if the size allocation for children still works when using own
+// GdkWindow. In this case, the children's origin starts from (0, 0) rather
+// than the container's origin.
+TEST_F(GtkExpandedContainerTest, HasWindow) {
+ GtkWidget* child = gtk_fixed_new();
+ gtk_container_add(GTK_CONTAINER(expanded_), child);
+ gtk_expanded_container_set_has_window(GTK_EXPANDED_CONTAINER(expanded_),
+ TRUE);
+ gtk_widget_show_all(window_);
+
+ GtkAllocation allocation = { 10, 10, 50, 100 };
+ gtk_widget_size_allocate(expanded_, &allocation);
+
+ EXPECT_EQ(0, child->allocation.x);
+ EXPECT_EQ(0, child->allocation.y);
+ EXPECT_EQ(50, child->allocation.width);
+ EXPECT_EQ(100, child->allocation.height);
+}
+
+static void OnChildSizeRequest(GtkExpandedContainer* container,
+ GtkWidget* child,
+ GtkRequisition* requisition,
+ gpointer userdata) {
+ ASSERT_EQ(child, GTK_WIDGET(userdata));
+ requisition->width = 250;
+ requisition->height = -1;
+}
+
+TEST_F(GtkExpandedContainerTest, ChildSizeRequest) {
+ GtkWidget* child = gtk_fixed_new();
+ gtk_widget_set_size_request(child, 10, 25);
+ g_signal_connect(expanded_, "child-size-request",
+ G_CALLBACK(OnChildSizeRequest), child);
+ gtk_container_add(GTK_CONTAINER(expanded_), child);
+ gtk_widget_show_all(window_);
+
+ GtkAllocation allocation = { 0, 0, 300, 100 };
+ gtk_widget_size_allocate(expanded_, &allocation);
+
+ EXPECT_EQ(0, child->allocation.x);
+ EXPECT_EQ(0, child->allocation.y);
+ EXPECT_EQ(250, child->allocation.width);
+ EXPECT_EQ(25, child->allocation.height);
+}
+
+TEST_F(GtkExpandedContainerTest, ChildPosition) {
+ GtkWidget* child = gtk_fixed_new();
+ gtk_expanded_container_put(GTK_EXPANDED_CONTAINER(expanded_),
+ child, 10, 20);
+ gtk_widget_show_all(window_);
+
+ EXPECT_EQ(10, GetChildX(child));
+ EXPECT_EQ(20, GetChildY(child));
+
+ gtk_expanded_container_move(GTK_EXPANDED_CONTAINER(expanded_),
+ child, 40, 50);
+ EXPECT_EQ(40, GetChildX(child));
+ EXPECT_EQ(50, GetChildY(child));
+}
Property changes on: chrome/browser/gtk/gtk_expanded_container_unittest.cc
___________________________________________________________________
Added: svn:eol-style
+ LF
« no previous file with comments | « chrome/browser/gtk/gtk_expanded_container.cc ('k') | chrome/browser/gtk/infobar_gtk.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698