[PATCH v2 wfits] gtk: Add test_button.cpp and gtk/ButtonClickTest
Eoff, Ullysses A
ullysses.a.eoff at intel.com
Thu May 30 17:38:58 PDT 2013
Thanks Brian... committed.
U. Artie
> -----Original Message-----
> From: wayland-devel-bounces+ullysses.a.eoff=intel.com at lists.freedesktop.org [mailto:wayland-devel-
> bounces+ullysses.a.eoff=intel.com at lists.freedesktop.org] On Behalf Of Brian Lovin
> Sent: Thursday, May 30, 2013 4:17 PM
> To: wayland-devel at lists.freedesktop.org
> Cc: Lovin, Brian J
> Subject: [PATCH v2 wfits] gtk: Add test_button.cpp and gtk/ButtonClickTest
>
> 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
>
> _______________________________________________
> wayland-devel mailing list
> wayland-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/wayland-devel
More information about the wayland-devel
mailing list