[PATCH v2 wfits] gtk: Add test_button.cpp and gtk/ButtonClickTest

Brian Lovin brian.j.lovin at intel.com
Thu May 30 16:16:36 PDT 2013


Added test_button.cpp and the gtk+ test case
ButtonClickTest

Signed-off-by: Brian Lovin <brian.j.lovin at intel.com>
---
 src/test/gtk+/Makefile.am     |   3 +-
 src/test/gtk+/test_button.cpp | 138 ++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 140 insertions(+), 1 deletion(-)
 create mode 100644 src/test/gtk+/test_button.cpp

diff --git a/src/test/gtk+/Makefile.am b/src/test/gtk+/Makefile.am
index dbdf065..33260f3 100644
--- a/src/test/gtk+/Makefile.am
+++ b/src/test/gtk+/Makefile.am
@@ -7,7 +7,8 @@ noinst_LTLIBRARIES = libwfits-gtk.la
 libwfits_gtk_la_SOURCES =		\
 	testharness.cpp			\
 	test_window_geometry.cpp	\
-	test_window_fullscreen.cpp
+	test_window_fullscreen.cpp	\
+	test_button.cpp
 
 AM_CXXFLAGS =				\
 	$(WAYLAND_CFLAGS)		\
diff --git a/src/test/gtk+/test_button.cpp b/src/test/gtk+/test_button.cpp
new file mode 100644
index 0000000..ae6803d
--- /dev/null
+++ b/src/test/gtk+/test_button.cpp
@@ -0,0 +1,138 @@
+/*
+ * Copyright © 2013 Intel Corporation
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and
+ * its documentation for any purpose is hereby granted without fee, provided
+ * that the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of the copyright holders not be used in
+ * advertising or publicity pertaining to distribution of the software
+ * without specific, written prior permission.  The copyright holders make
+ * no representations about the suitability of this software for any
+ * purpose.  It is provided "as is" without express or implied warranty.
+ *
+ * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
+ * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
+ * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
+ * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include "testharness.h"
+
+namespace wfits {
+namespace test {
+namespace gtk {
+
+class ButtonClickTest :  public GtkTestHarness
+{
+public:
+	ButtonClickTest()
+		: GtkTestHarness::GtkTestHarness()
+		, win_(gtk_window_new(GTK_WINDOW_TOPLEVEL))
+		, button_(gtk_button_new_with_label("Test Button!"))
+		, clicked_(false)
+		, pressed_(false)
+		, released_(false)
+	{
+		return;
+	}
+
+	~ButtonClickTest()
+	{
+		gtk_widget_destroy(win_);
+	}
+
+	void setup()
+	{
+		gtk_container_add (GTK_CONTAINER(win_), button_);
+
+		g_signal_connect(button_, "button-press-event", G_CALLBACK(onPressed), this);
+		g_signal_connect(button_, "button-release-event", G_CALLBACK(onReleased), this);
+		g_signal_connect(button_, "clicked", G_CALLBACK(onClicked), this);
+		gtk_widget_show(button_);
+
+		gtk_window_set_title(GTK_WINDOW(win_), fullname(*this).c_str());
+		gtk_window_resize(GTK_WINDOW(win_), 360, 225);
+		gtk_widget_show(win_);
+
+		gdk_window_set_events(
+			gtk_widget_get_window(win_),
+			static_cast<GdkEventMask>(GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK)
+		);
+
+		queueStep(boost::bind(&ButtonClickTest::test, boost::ref(*this)));
+	}
+
+	void test()
+	{
+		wl_surface *surface = gdk_wayland_window_get_wl_surface(
+			gtk_widget_get_window(win_)
+		);
+		ASSERT(surface != NULL);
+
+		const Geometry geometry(getSurfaceGeometry(surface));
+		GtkAllocation allocation;
+
+		gtk_widget_get_allocation(button_, &allocation);
+
+		//Place pointer in center of button
+		setGlobalPointerPosition(
+			geometry.x + allocation.x + allocation.width / 2,
+			geometry.y + allocation.y + allocation.height / 2
+		);
+
+		ASSERT(not pressed_);
+
+		inputKeySend(BTN_LEFT, 1);
+
+		YIELD_UNTIL(pressed_)
+
+		ASSERT(not released_);
+		ASSERT(not clicked_);
+
+		inputKeySend(BTN_LEFT, 0);
+
+		YIELD_UNTIL(released_ and clicked_)
+	}
+
+	static void onClicked(GtkWidget *widget, gpointer data)
+	{
+		ButtonClickTest *test = static_cast<ButtonClickTest*>(data);
+		test->clicked_ = true;
+		std::cout << "...received click event" << std::endl;
+	}
+
+	static gboolean onPressed(GtkWidget *widget, GdkEvent *event, gpointer data)
+	{
+		ButtonClickTest *test = static_cast<ButtonClickTest*>(data);
+		test->pressed_ = true;
+		std::cout << "...received press event" << std::endl;
+
+		return gtk_false();
+	}
+
+	static gboolean onReleased(GtkWidget *widget, GdkEvent *event, gpointer data)
+	{
+		ButtonClickTest *test = static_cast<ButtonClickTest*>(data);
+		test->released_ = true;
+		std::cout << "...received release event" << std::endl;
+
+		return gtk_false();
+	}
+
+private:
+	GtkWidget	*win_;
+	GtkWidget	*button_;
+	bool		clicked_;
+	bool		pressed_;
+	bool		released_;
+};
+
+WFITS_GTK_HARNESS_TEST_CASE(ButtonClickTest);
+
+} // namespace gtk
+} // namespace test
+} // namespace wfits
-- 
1.8.1.2



More information about the wayland-devel mailing list