This adds tests for the network panel based on the test service found in NetworkManager. Another possible solution may be to use the one from dbusmock, however NetworkManager already has readily available code to write tests in C which makes checking the widget hierarchy easier.
203 lines
5.5 KiB
C
203 lines
5.5 KiB
C
/*
|
|
* Copyright (c) 2009, 2010 Intel, Inc.
|
|
* Copyright (c) 2010, 2018 Red Hat, Inc.
|
|
* Copyright (c) 2016 Endless, Inc.
|
|
*
|
|
* The Control Center is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by the
|
|
* Free Software Foundation; either version 2 of the License, or (at your
|
|
* option) any later version.
|
|
*
|
|
* The Control Center is distributed in the hope that it will be useful, but
|
|
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
|
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
|
* for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License along
|
|
* with the Control Center; if not, write to the Free Software Foundation,
|
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
*
|
|
* Author: Benjamin Berg <bberg@redhat.com>
|
|
*/
|
|
|
|
#define G_LOG_DOMAIN "cc-test-window"
|
|
|
|
#include <config.h>
|
|
|
|
#include "cc-test-window.h"
|
|
|
|
#include <gio/gio.h>
|
|
#include <gtk/gtk.h>
|
|
#include <gdk/gdkkeysyms.h>
|
|
#include <gdk/gdkx.h>
|
|
#include <string.h>
|
|
|
|
#include "shell/cc-panel.h"
|
|
#include "shell/cc-shell.h"
|
|
#include "cc-util.h"
|
|
|
|
|
|
struct _CcTestWindow
|
|
{
|
|
GtkWindow parent;
|
|
|
|
GtkWidget *main_box;
|
|
|
|
GtkWidget *header;
|
|
CcPanel *active_panel;
|
|
};
|
|
|
|
static void cc_shell_iface_init (CcShellInterface *iface);
|
|
|
|
G_DEFINE_TYPE_WITH_CODE (CcTestWindow, cc_test_window, GTK_TYPE_WINDOW,
|
|
G_IMPLEMENT_INTERFACE (CC_TYPE_SHELL, cc_shell_iface_init))
|
|
|
|
enum
|
|
{
|
|
PROP_0,
|
|
PROP_ACTIVE_PANEL
|
|
};
|
|
|
|
|
|
|
|
static void
|
|
set_active_panel (CcTestWindow *shell,
|
|
CcPanel *panel)
|
|
{
|
|
g_assert (CC_IS_SHELL (shell));
|
|
g_assert (CC_IS_PANEL (panel));
|
|
|
|
/* Only allow setting to a non NULL value once. */
|
|
g_assert (shell->active_panel == NULL);
|
|
|
|
if (panel)
|
|
{
|
|
shell->active_panel = g_object_ref (panel);
|
|
gtk_container_add_with_properties (GTK_CONTAINER (shell->main_box), GTK_WIDGET (panel),
|
|
"pack-type", GTK_PACK_END,
|
|
"expand", TRUE,
|
|
"fill", TRUE,
|
|
NULL);
|
|
}
|
|
}
|
|
|
|
/* CcShell implementation */
|
|
static gboolean
|
|
cc_test_window_set_active_panel_from_id (CcShell *shell,
|
|
const gchar *start_id,
|
|
GVariant *parameters,
|
|
GError **error)
|
|
{
|
|
/* Not implemented */
|
|
g_assert_not_reached ();
|
|
}
|
|
|
|
static void
|
|
cc_test_window_embed_widget_in_header (CcShell *shell,
|
|
GtkWidget *widget)
|
|
{
|
|
CcTestWindow *self = CC_TEST_WINDOW (shell);
|
|
|
|
/* add to main box */
|
|
gtk_container_add_with_properties (GTK_CONTAINER (self->main_box), GTK_WIDGET (widget),
|
|
"pack-type", GTK_PACK_START,
|
|
"expand", FALSE,
|
|
"fill", TRUE,
|
|
NULL);
|
|
gtk_widget_show (widget);
|
|
}
|
|
|
|
static GtkWidget *
|
|
cc_test_window_get_toplevel (CcShell *shell)
|
|
{
|
|
return GTK_WIDGET (shell);
|
|
}
|
|
|
|
static void
|
|
cc_shell_iface_init (CcShellInterface *iface)
|
|
{
|
|
iface->set_active_panel_from_id = cc_test_window_set_active_panel_from_id;
|
|
iface->embed_widget_in_header = cc_test_window_embed_widget_in_header;
|
|
iface->get_toplevel = cc_test_window_get_toplevel;
|
|
}
|
|
|
|
/* GObject Implementation */
|
|
static void
|
|
cc_test_window_get_property (GObject *object,
|
|
guint property_id,
|
|
GValue *value,
|
|
GParamSpec *pspec)
|
|
{
|
|
CcTestWindow *self = CC_TEST_WINDOW (object);
|
|
|
|
switch (property_id)
|
|
{
|
|
case PROP_ACTIVE_PANEL:
|
|
g_value_set_object (value, self->active_panel);
|
|
break;
|
|
|
|
default:
|
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
|
|
}
|
|
}
|
|
|
|
static void
|
|
cc_test_window_set_property (GObject *object,
|
|
guint property_id,
|
|
const GValue *value,
|
|
GParamSpec *pspec)
|
|
{
|
|
CcTestWindow *shell = CC_TEST_WINDOW (object);
|
|
|
|
switch (property_id)
|
|
{
|
|
case PROP_ACTIVE_PANEL:
|
|
set_active_panel (shell, g_value_get_object (value));
|
|
break;
|
|
|
|
default:
|
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
|
|
}
|
|
}
|
|
|
|
static void
|
|
cc_test_window_dispose (GObject *object)
|
|
{
|
|
CcTestWindow *self = CC_TEST_WINDOW (object);
|
|
|
|
g_clear_object (&self->active_panel);
|
|
|
|
G_OBJECT_CLASS (cc_test_window_parent_class)->dispose (object);
|
|
}
|
|
|
|
static void
|
|
cc_test_window_class_init (CcTestWindowClass *klass)
|
|
{
|
|
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
|
|
|
object_class->get_property = cc_test_window_get_property;
|
|
object_class->set_property = cc_test_window_set_property;
|
|
object_class->dispose = cc_test_window_dispose;
|
|
|
|
g_object_class_override_property (object_class, PROP_ACTIVE_PANEL, "active-panel");
|
|
}
|
|
|
|
static void
|
|
cc_test_window_init (CcTestWindow *self)
|
|
{
|
|
gtk_widget_set_size_request (GTK_WIDGET (self), 500, 800);
|
|
|
|
self->main_box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 5);
|
|
|
|
gtk_container_add (GTK_CONTAINER (self), self->main_box);
|
|
}
|
|
|
|
CcTestWindow *
|
|
cc_test_window_new (void)
|
|
{
|
|
return g_object_new (CC_TYPE_TEST_WINDOW,
|
|
"resizable", TRUE,
|
|
"title", "Test Settings",
|
|
"window-position", GTK_WIN_POS_CENTER,
|
|
NULL);
|
|
}
|