From 4f74252ce9a8ae3e651cc9e61dc280da82f12d9b Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Thu, 24 May 2012 10:15:28 -0500 Subject: add test-indicator.cc --- tests/test-indicator.cc | 52 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 tests/test-indicator.cc (limited to 'tests/test-indicator.cc') diff --git a/tests/test-indicator.cc b/tests/test-indicator.cc new file mode 100644 index 0000000..2f16176 --- /dev/null +++ b/tests/test-indicator.cc @@ -0,0 +1,52 @@ +/* +Copyright 2012 Canonical Ltd. + +Authors: + Charles Kerr + +This program is free software: you can redistribute it and/or modify it +under the terms of the GNU General Public License version 3, as published +by the Free Software Foundation. + +This program is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranties of +MERCHANTABILITY, SATISFACTORY QUALITY, 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 this program. If not, see . +*/ + +#include + +#include "device.h" +#include "indicator-power.h" + +namespace +{ + void ensure_glib_initialized () + { + static bool initialized = false; + + if (G_UNLIKELY(!initialized)) + { + initialized = true; + g_type_init(); + } + } +} + +/*** +**** +***/ + +TEST(IndicatorTest, GObjectNew) +{ + ensure_glib_initialized (); + + GObject * o = G_OBJECT (g_object_new (INDICATOR_POWER_TYPE, NULL)); + ASSERT_TRUE (o != NULL); + ASSERT_TRUE (IS_INDICATOR_POWER(o)); + g_clear_pointer (&o, g_object_unref); +} + -- cgit v1.2.3 From f18b60b0ce389bee7fc4784b6714f28567397b42 Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Thu, 24 May 2012 11:32:16 -0500 Subject: remove the g_clear_pointer() calls s.t. things will build and run on alesage's Jenkins setup running Precise --- tests/test-device.cc | 8 ++++---- tests/test-indicator.cc | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) (limited to 'tests/test-indicator.cc') diff --git a/tests/test-device.cc b/tests/test-device.cc index 02516f4..4dde4af 100644 --- a/tests/test-device.cc +++ b/tests/test-device.cc @@ -45,7 +45,7 @@ TEST(DeviceTest, GObjectNew) GObject * o = G_OBJECT (g_object_new (INDICATOR_POWER_DEVICE_TYPE, NULL)); ASSERT_TRUE (o != NULL); ASSERT_TRUE (INDICATOR_IS_POWER_DEVICE(o)); - g_clear_pointer (&o, g_object_unref); + g_object_unref (o); } TEST(DeviceTest, New) @@ -68,7 +68,7 @@ TEST(DeviceTest, New) ASSERT_EQ (indicator_power_device_get_time(device), 30); /* cleanup */ - g_clear_pointer (&device, g_object_unref); + g_object_unref (device); } TEST(DeviceTest, NewFromVariant) @@ -94,6 +94,6 @@ TEST(DeviceTest, NewFromVariant) ASSERT_EQ (indicator_power_device_get_time(device), 30); /* cleanup */ - g_clear_pointer (&device, g_object_unref); - g_clear_pointer (&variant, g_variant_unref); + g_object_unref (device); + g_variant_unref (variant); } diff --git a/tests/test-indicator.cc b/tests/test-indicator.cc index 2f16176..e3533e9 100644 --- a/tests/test-indicator.cc +++ b/tests/test-indicator.cc @@ -47,6 +47,6 @@ TEST(IndicatorTest, GObjectNew) GObject * o = G_OBJECT (g_object_new (INDICATOR_POWER_TYPE, NULL)); ASSERT_TRUE (o != NULL); ASSERT_TRUE (IS_INDICATOR_POWER(o)); - g_clear_pointer (&o, g_object_unref); + g_object_unref (o); } -- cgit v1.2.3 From d8484ce5caf9fd5f4efb30368ccc9b70b1f38710 Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Thu, 24 May 2012 16:50:58 -0500 Subject: first draft of getting GSettings working in the unit tests before the schema is installed. --- tests/Makefile.am | 10 ++++++++-- tests/test-indicator.cc | 27 +++++++++++++++++++++++++-- 2 files changed, 33 insertions(+), 4 deletions(-) (limited to 'tests/test-indicator.cc') diff --git a/tests/Makefile.am b/tests/Makefile.am index 341abdd..8169e3a 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -1,5 +1,6 @@ TESTS = -CLEANFILES = +CLEANFILES = +BUILT_SOURCES = check_PROGRAMS = ### @@ -34,6 +35,11 @@ TEST_CPPFLAGS = \ $(INDICATOR_CFLAGS) \ $(COVERAGE_CFLAGS) +BUILT_SOURCES += gschemas.compiled +CLEANFILES += gschemas.compiled +gschemas.compiled: Makefile + @glib-compile-schemas --targetdir=$(abs_builddir) $(top_builddir)/data + TESTS += test-device check_PROGRAMS += test-device test_device_SOURCES = test-device.cc @@ -44,7 +50,7 @@ TESTS += test-indicator check_PROGRAMS += test-indicator test_indicator_SOURCES = test-indicator.cc test_indicator_LDADD = $(TEST_LIBS) -test_indicator_CPPFLAGS = $(TEST_CPPFLAGS) +test_indicator_CPPFLAGS = $(TEST_CPPFLAGS) -DSCHEMA_DIR="\"$(top_builddir)/tests/\"" ### ### diff --git a/tests/test-indicator.cc b/tests/test-indicator.cc index e3533e9..af494ee 100644 --- a/tests/test-indicator.cc +++ b/tests/test-indicator.cc @@ -22,6 +22,10 @@ with this program. If not, see . #include "device.h" #include "indicator-power.h" +/*** +**** +***/ + namespace { void ensure_glib_initialized () @@ -40,7 +44,27 @@ namespace **** ***/ -TEST(IndicatorTest, GObjectNew) +class IndicatorTest : public ::testing::Test +{ + protected: + + virtual void SetUp() + { + ensure_glib_initialized (); + g_setenv( "GSETTINGS_SCHEMA_DIR", SCHEMA_DIR, TRUE); + g_message ("GSETTINGS_SCHEMA_DIR is %s", g_getenv("GSETTINGS_SCHEMA_DIR")); + } + + virtual void TearDown() + { + } +}; + +/*** +**** +***/ + +TEST_F(IndicatorTest, GObjectNew) { ensure_glib_initialized (); @@ -49,4 +73,3 @@ TEST(IndicatorTest, GObjectNew) ASSERT_TRUE (IS_INDICATOR_POWER(o)); g_object_unref (o); } - -- cgit v1.2.3 From 34c756aa7a894ee9c12f3dce0b4ae6e4ac6a30a8 Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Fri, 25 May 2012 14:58:56 -0500 Subject: modify IndicatorPower to use IndicatorPowerDevices internally --- src/indicator-power.c | 344 ++++++++++++++++++++++-------------------------- src/indicator-power.h | 6 + tests/test-indicator.cc | 31 ++++- 3 files changed, 193 insertions(+), 188 deletions(-) (limited to 'tests/test-indicator.cc') diff --git a/src/indicator-power.c b/src/indicator-power.c index dc1c512..c2ace80 100644 --- a/src/indicator-power.c +++ b/src/indicator-power.c @@ -31,6 +31,7 @@ with this program. If not, see . /* upower */ #include +#include "device.h" #include "indicator-power.h" #define ICON_POLICY_KEY "icon-policy" @@ -60,8 +61,8 @@ struct _IndicatorPowerPrivate GDBusProxy *proxy; guint watcher_id; - GVariant *devices; - GVariant *device; + GSList * devices; + IndicatorPowerDevice * device; GSettings *settings; }; @@ -139,21 +140,22 @@ indicator_power_init (IndicatorPower *self) self->priv = priv; } +static void +dispose_devices (IndicatorPower * self) +{ + IndicatorPowerPrivate * priv = self->priv; + + g_slist_free_full (priv->devices, g_object_unref); + priv->devices = NULL; + g_clear_object (&priv->device); +} static void indicator_power_dispose (GObject *object) { IndicatorPower *self = INDICATOR_POWER(object); IndicatorPowerPrivate * priv = self->priv; - if (priv->devices != NULL) { - g_variant_unref (priv->devices); - priv->devices = NULL; - } - - if (priv->device != NULL) { - g_variant_unref (priv->device); - priv->device = NULL; - } + dispose_devices (self); g_clear_object (&priv->proxy); g_clear_object (&priv->proxy_cancel); @@ -533,99 +535,78 @@ get_device_icon (UpDeviceKind kind, } -static void -menu_add_device (GtkMenu *menu, - GVariant *device) +static gboolean +menu_add_device (GtkMenu * menu, const IndicatorPowerDevice * device) { - UpDeviceKind kind; - UpDeviceState state; - GtkWidget *icon; - GtkWidget *item; - GtkWidget *details_label; - GtkWidget *grid; - GIcon *device_gicons; - const gchar *device_icon = NULL; - const gchar *object_path = NULL; - gdouble percentage; - guint64 time; - const gchar *device_name; - gchar *short_details = NULL; - gchar *details = NULL; - gchar *accessible_name = NULL; - AtkObject *atk_object; - - if (device == NULL) - return; - - g_variant_get (device, - "(&su&sdut)", - &object_path, - &kind, - &device_icon, - &percentage, - &state, - &time); - - g_debug ("%s: got data from object %s", G_STRFUNC, object_path); + gboolean added = FALSE; + const UpDeviceKind kind = indicator_power_device_get_kind (device); if (kind == UP_DEVICE_KIND_LINE_POWER) - return; - - /* Process the data */ - device_gicons = get_device_icon (kind, state, time, device_icon); - icon = gtk_image_new_from_gicon (device_gicons, - GTK_ICON_SIZE_SMALL_TOOLBAR); - g_clear_object (&device_gicons); - - device_name = device_kind_to_localised_string (kind); - - build_device_time_details (device_name, time, state, percentage, &short_details, &details, &accessible_name); - - /* Create menu item */ - item = gtk_image_menu_item_new (); - atk_object = gtk_widget_get_accessible(item); - if (atk_object != NULL) - atk_object_set_name (atk_object, accessible_name); - - grid = gtk_grid_new (); - gtk_grid_set_column_spacing (GTK_GRID (grid), 6); - gtk_grid_attach (GTK_GRID (grid), icon, 0, 0, 1, 1); - details_label = gtk_label_new (details); - gtk_grid_attach_next_to (GTK_GRID (grid), details_label, icon, GTK_POS_RIGHT, 1, 1); - gtk_container_add (GTK_CONTAINER (item), grid); - gtk_widget_show (grid); + { + GtkWidget *icon; + GtkWidget *item; + GtkWidget *details_label; + GtkWidget *grid; + GIcon *device_gicons; + const gchar *device_name; + gchar *short_details = NULL; + gchar *details = NULL; + gchar *accessible_name = NULL; + AtkObject *atk_object; + const time_t time = indicator_power_device_get_time (device); + const UpDeviceState state = indicator_power_device_get_state (device); + const gchar * device_icon = indicator_power_device_get_icon (device); + const gdouble percentage = indicator_power_device_get_percentage (device); + + /* Process the data */ + device_gicons = get_device_icon (kind, state, time, device_icon); + icon = gtk_image_new_from_gicon (device_gicons, + GTK_ICON_SIZE_SMALL_TOOLBAR); + g_clear_object (&device_gicons); + + device_name = device_kind_to_localised_string (kind); + + build_device_time_details (device_name, time, state, percentage, &short_details, &details, &accessible_name); + + /* Create menu item */ + item = gtk_image_menu_item_new (); + atk_object = gtk_widget_get_accessible(item); + if (atk_object != NULL) + atk_object_set_name (atk_object, accessible_name); + + grid = gtk_grid_new (); + gtk_grid_set_column_spacing (GTK_GRID (grid), 6); + gtk_grid_attach (GTK_GRID (grid), icon, 0, 0, 1, 1); + details_label = gtk_label_new (details); + gtk_grid_attach_next_to (GTK_GRID (grid), details_label, icon, GTK_POS_RIGHT, 1, 1); + gtk_container_add (GTK_CONTAINER (item), grid); + gtk_widget_show (grid); + + gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); + added = TRUE; - gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); + g_signal_connect (G_OBJECT (item), "activate", + G_CALLBACK (show_info_cb), NULL); - g_signal_connect (G_OBJECT (item), "activate", - G_CALLBACK (show_info_cb), NULL); + g_free (short_details); + g_free (details); + g_free (accessible_name); + } - g_free (short_details); - g_free (details); - g_free (accessible_name); + return added; } static gsize -menu_add_devices (GtkMenu *menu, - GVariant *devices) +menu_add_devices (GtkMenu * menu, GSList * devices) { - gsize n_devices; - guint i; - - if (devices == NULL) - return 0; + GSList * l; + gsize n_added = 0; - n_devices = g_variant_n_children (devices); - g_debug ("Num devices: '%" G_GSIZE_FORMAT "'\n", n_devices); + for (l=devices; l!=NULL; l=l->next) + if (menu_add_device (menu, l->data)) + ++n_added; - for (i = 0; i < n_devices; i++) - { - GVariant * device = g_variant_get_child_value (devices, i); - menu_add_device (menu, device); - g_variant_unref (device); - } - - return n_devices; + return n_added; } static gboolean @@ -680,39 +661,25 @@ build_menu (IndicatorPower *self) gtk_widget_show_all (GTK_WIDGET (priv->menu)); } -static GVariant * -get_primary_device (GVariant *devices) +static IndicatorPowerDevice* +get_primary_device (GSList * devices) { - gint primary_device_charging_index = -1; - gint primary_device_discharging_index = -1; - gint primary_device_index = -1; + IndicatorPowerDevice * primary_device = NULL; + IndicatorPowerDevice * primary_device_charging = NULL; + IndicatorPowerDevice * primary_device_discharging = NULL; gboolean charging = FALSE; gboolean discharging = FALSE; guint64 min_discharging_time = G_MAXUINT64; guint64 max_charging_time = 0; - guint i; + GSList * l; - const gsize n_devices = devices ? g_variant_n_children (devices) : 0; - g_debug ("Num devices: '%" G_GSIZE_FORMAT "'\n", n_devices); - - for (i = 0; i < n_devices; i++) + for (l=devices; l!=NULL; l=l->next) { - const gchar *object_path; - UpDeviceKind kind; - const gchar *device_icon; - gdouble percentage; - UpDeviceState state; - guint64 time = 0; - - g_variant_get_child (devices, i, "(&su&sdut)", - &object_path, - &kind, - &device_icon, - &percentage, - &state, - &time); - - g_debug ("%s: got data from object %s", G_STRFUNC, object_path); + IndicatorPowerDevice * device = INDICATOR_POWER_DEVICE(l->data); + const UpDeviceKind kind = indicator_power_device_get_kind (device); + const UpDeviceState state = indicator_power_device_get_state (device); + const gdouble percentage = indicator_power_device_get_percentage (device); + const time_t time = indicator_power_device_get_time (device); /* Try to fix the case when we get a empty battery bay as a real battery */ if (state == UP_DEVICE_STATE_UNKNOWN && @@ -729,7 +696,7 @@ get_primary_device (GVariant *devices) if (time < min_discharging_time) { min_discharging_time = time; - primary_device_discharging_index = i; + primary_device_discharging = device; } } else if (state == UP_DEVICE_STATE_CHARGING) @@ -737,64 +704,49 @@ get_primary_device (GVariant *devices) charging = TRUE; if (time == 0) /* Battery broken */ { - primary_device_charging_index = i; + primary_device_charging = device; } if (time > max_charging_time) { max_charging_time = time; - primary_device_charging_index = i; + primary_device_charging = device; } } else { - primary_device_index = i; + primary_device = device; } } if (discharging) { - primary_device_index = primary_device_discharging_index; + primary_device = primary_device_discharging; } else if (charging) { - primary_device_index = primary_device_charging_index; + primary_device = primary_device_charging; } - if (primary_device_index >= 0) - return g_variant_get_child_value (devices, primary_device_index); + if (primary_device != NULL) + g_object_ref (primary_device); - return NULL; + return primary_device; } static void -put_primary_device (IndicatorPower *self, - GVariant *device) +put_primary_device (IndicatorPower *self, IndicatorPowerDevice *device) { - UpDeviceKind kind; - UpDeviceState state; GIcon *device_gicons; gchar *short_details = NULL; gchar *details = NULL; gchar *accessible_name = NULL; - const gchar *device_icon = NULL; - const gchar *object_path = NULL; - gdouble percentage; - guint64 time; const gchar *device_name; IndicatorPowerPrivate * priv = self->priv; - - /* set the icon and text */ - g_variant_get (device, - "(&su&sdut)", - &object_path, - &kind, - &device_icon, - &percentage, - &state, - &time); - - g_debug ("%s: got data from object %s", G_STRFUNC, object_path); - + const time_t time = indicator_power_device_get_time (device); + const UpDeviceKind kind = indicator_power_device_get_kind (device); + const UpDeviceState state = indicator_power_device_get_state (device); + const gchar * device_icon = indicator_power_device_get_icon (device); + const gdouble percentage = indicator_power_device_get_percentage (device); /* set icon */ device_gicons = get_device_icon (kind, state, time, device_icon); gtk_image_set_from_gicon (priv->status_image, @@ -819,47 +771,75 @@ put_primary_device (IndicatorPower *self, g_free (accessible_name); } +void +indicator_power_set_devices (IndicatorPower * self, + IndicatorPowerDevice ** devices, + gsize device_count) +{ + gsize i; + IndicatorPowerPrivate * priv; + + g_return_if_fail (IS_INDICATOR_POWER(self)); + priv = self->priv; + + /* clear out the previous values */ + dispose_devices (self); + + /* get the new devices */ + for (i=0; idevices = g_slist_prepend (priv->devices, g_object_ref(devices[i])); + priv->devices = g_slist_reverse (priv->devices); + + /* get the new primary device */ + priv->device = get_primary_device (priv->devices); + if (priv->device) + put_primary_device (self, priv->device); + else + g_message ("Couldn't find primary device"); + + build_menu (self); + update_visibility (self); +} + static void -get_devices_cb (GObject *source_object, - GAsyncResult *res, - gpointer user_data) +get_devices_cb (GObject * source_object, + GAsyncResult * res, + gpointer user_data) { + GError *error; + int device_count; + IndicatorPowerDevice ** devices; + GVariant * devices_container; IndicatorPower *self = INDICATOR_POWER (user_data); - IndicatorPowerPrivate * priv = self->priv; - GVariant *devices_container; - GError *error = NULL; + /* build an array of IndicatorPowerDevices from the DBus response */ + error = NULL; devices_container = g_dbus_proxy_call_finish (G_DBUS_PROXY (source_object), res, &error); if (devices_container == NULL) { g_message ("Couldn't get devices: %s\n", error->message); g_error_free (error); } - else /* update 'devices' */ + else { - if (priv->devices != NULL) - g_variant_unref (priv->devices); - priv->devices = g_variant_get_child_value (devices_container, 0); + gsize i; + GVariant * devices_variant = g_variant_get_child_value (devices_container, 0); + device_count = devices_variant ? g_variant_n_children (devices_variant) : 0; + devices = g_new0 (IndicatorPowerDevice*, device_count); - g_variant_unref (devices_container); - - if (priv->device != NULL) - g_variant_unref (priv->device); - priv->device = get_primary_device (priv->devices); - - if (priv->device == NULL) + for (i=0; idevice); - } - } - build_menu (self); + g_variant_unref (devices_variant); + g_variant_unref (devices_container); + } - update_visibility (self); + indicator_power_set_devices (self, devices, device_count); + g_free (devices); } static void @@ -1017,28 +997,22 @@ get_name_hint (IndicatorObject *io) ***/ static void -count_batteries(GVariant *devices, int *total, int *inuse) +count_batteries (GSList * devices, int *total, int *inuse) { - const int n_devices = devices ? g_variant_n_children (devices) : 0; + GSList * l; - int i; - for (i=0; inext) { - GVariant * device = g_variant_get_child_value (devices, i); + const IndicatorPowerDevice * device = INDICATOR_POWER_DEVICE(l->data); - UpDeviceKind kind; - g_variant_get_child (device, 1, "u", &kind); - if (kind == UP_DEVICE_KIND_BATTERY) + if (indicator_power_device_get_kind(device) == UP_DEVICE_KIND_BATTERY) { ++*total; - UpDeviceState state; - g_variant_get_child (device, 4, "u", &state); + const UpDeviceState state = indicator_power_device_get_state (device); if ((state == UP_DEVICE_STATE_CHARGING) || (state == UP_DEVICE_STATE_DISCHARGING)) ++*inuse; } - - g_variant_unref (device); } g_debug("count_batteries found %d batteries (%d are charging/discharging)", *total, *inuse); diff --git a/src/indicator-power.h b/src/indicator-power.h index 39ac0ca..bd47535 100644 --- a/src/indicator-power.h +++ b/src/indicator-power.h @@ -26,6 +26,8 @@ with this program. If not, see . #include #include +#include "device.h" + G_BEGIN_DECLS #define INDICATOR_POWER_TYPE (indicator_power_get_type ()) @@ -52,4 +54,8 @@ struct _IndicatorPower GType indicator_power_get_type (void) G_GNUC_CONST; +void indicator_power_set_devices (IndicatorPower * power, + IndicatorPowerDevice ** devices, + gsize deviceCount); + G_END_DECLS diff --git a/tests/test-indicator.cc b/tests/test-indicator.cc index af494ee..3e9d97b 100644 --- a/tests/test-indicator.cc +++ b/tests/test-indicator.cc @@ -48,15 +48,32 @@ class IndicatorTest : public ::testing::Test { protected: + IndicatorPowerDevice * ac_device; + IndicatorPowerDevice * battery_device; + virtual void SetUp() { ensure_glib_initialized (); + g_setenv( "GSETTINGS_SCHEMA_DIR", SCHEMA_DIR, TRUE); - g_message ("GSETTINGS_SCHEMA_DIR is %s", g_getenv("GSETTINGS_SCHEMA_DIR")); + + ac_device = indicator_power_device_new ( + "/org/freedesktop/UPower/devices/line_power_AC", + UP_DEVICE_KIND_LINE_POWER, + ". GThemedIcon ac-adapter-symbolic ac-adapter ", + 0.0, UP_DEVICE_STATE_UNKNOWN, 0); + + battery_device = indicator_power_device_new ( + "/org/freedesktop/UPower/devices/battery_BAT0", + UP_DEVICE_KIND_BATTERY, + ". GThemedIcon battery-good-symbolic gpm-battery-060 battery-good ", + 52.871712, UP_DEVICE_STATE_DISCHARGING, 8834); } virtual void TearDown() { + g_clear_object (&battery_device); + g_clear_object (&ac_device); } }; @@ -66,10 +83,18 @@ class IndicatorTest : public ::testing::Test TEST_F(IndicatorTest, GObjectNew) { - ensure_glib_initialized (); - GObject * o = G_OBJECT (g_object_new (INDICATOR_POWER_TYPE, NULL)); ASSERT_TRUE (o != NULL); ASSERT_TRUE (IS_INDICATOR_POWER(o)); g_object_unref (o); } + +TEST_F(IndicatorTest, SetDevices) +{ + IndicatorPower * power = INDICATOR_POWER(g_object_new (INDICATOR_POWER_TYPE, NULL)); + IndicatorPowerDevice * devices[] = { ac_device, battery_device }; + + indicator_power_set_devices (power, devices, G_N_ELEMENTS(devices)); + + g_object_unref (power); +} -- cgit v1.2.3 From 6bbfe3a79da52a5d03224bdb66faf0d41385158d Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Fri, 25 May 2012 15:02:03 -0500 Subject: make Jenkins happy --- tests/test-indicator.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'tests/test-indicator.cc') diff --git a/tests/test-indicator.cc b/tests/test-indicator.cc index 3e9d97b..c3f502a 100644 --- a/tests/test-indicator.cc +++ b/tests/test-indicator.cc @@ -72,8 +72,8 @@ class IndicatorTest : public ::testing::Test virtual void TearDown() { - g_clear_object (&battery_device); - g_clear_object (&ac_device); + g_object_unref (battery_device); + g_object_unref (ac_device); } }; -- cgit v1.2.3 From 676aef0608d08a7d2086742e0dbd6b05e2d548bd Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Sat, 26 May 2012 14:16:26 -0500 Subject: first draft of adding tests for a discharging battery --- tests/test-indicator.cc | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) (limited to 'tests/test-indicator.cc') diff --git a/tests/test-indicator.cc b/tests/test-indicator.cc index c3f502a..4b39579 100644 --- a/tests/test-indicator.cc +++ b/tests/test-indicator.cc @@ -98,3 +98,38 @@ TEST_F(IndicatorTest, SetDevices) g_object_unref (power); } + +TEST_F(IndicatorTest, DischargingStrings) +{ + IndicatorPower * power = INDICATOR_POWER(g_object_new (INDICATOR_POWER_TYPE, NULL)); + + // give the indicator a discharging battery with 1 hour of life left + g_object_set (battery_device, + INDICATOR_POWER_DEVICE_STATE, UP_DEVICE_STATE_DISCHARGING, + INDICATOR_POWER_DEVICE_PERCENTAGE, 50.0, + INDICATOR_POWER_DEVICE_TIME, guint64(60*60), + NULL); + indicator_power_set_devices (power, &battery_device, 1); + + GList * entries = indicator_object_get_entries (INDICATOR_OBJECT(power)); + ASSERT_EQ (g_list_length(entries), 1); + IndicatorObjectEntry * entry = static_cast(entries->data); + ASSERT_STREQ(entry->accessible_desc, "Battery (1 hour left (50%))"); + ASSERT_STREQ(entry->name_hint, "indicator-power"); + g_list_free (entries); + + // give the indicator a discharging battery with over 12 hours of life left + g_object_set (battery_device, + INDICATOR_POWER_DEVICE_STATE, UP_DEVICE_STATE_DISCHARGING, + INDICATOR_POWER_DEVICE_PERCENTAGE, 50.0, + INDICATOR_POWER_DEVICE_TIME, guint64(60*60*12 + 1), + NULL); + indicator_power_set_devices (power, &battery_device, 1); + entries = indicator_object_get_entries (INDICATOR_OBJECT(power)); + ASSERT_EQ (g_list_length(entries), 1); + entry = static_cast(entries->data); + g_list_free (entries); + + // cleanup + g_object_unref (power); +} -- cgit v1.2.3 From e0d1b3299edde62797fe6fa08be3740f24c7d38e Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Sat, 26 May 2012 14:35:22 -0500 Subject: add coverage for various charging/discharging/charged states --- tests/test-indicator.cc | 104 ++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 101 insertions(+), 3 deletions(-) (limited to 'tests/test-indicator.cc') diff --git a/tests/test-indicator.cc b/tests/test-indicator.cc index 4b39579..ad619e2 100644 --- a/tests/test-indicator.cc +++ b/tests/test-indicator.cc @@ -110,7 +110,6 @@ TEST_F(IndicatorTest, DischargingStrings) INDICATOR_POWER_DEVICE_TIME, guint64(60*60), NULL); indicator_power_set_devices (power, &battery_device, 1); - GList * entries = indicator_object_get_entries (INDICATOR_OBJECT(power)); ASSERT_EQ (g_list_length(entries), 1); IndicatorObjectEntry * entry = static_cast(entries->data); @@ -118,16 +117,115 @@ TEST_F(IndicatorTest, DischargingStrings) ASSERT_STREQ(entry->name_hint, "indicator-power"); g_list_free (entries); + // give the indicator a discharging battery with 2 hours of life left + g_object_set (battery_device, + INDICATOR_POWER_DEVICE_PERCENTAGE, 100.0, + INDICATOR_POWER_DEVICE_TIME, guint64(60*60*2), + NULL); + indicator_power_set_devices (power, &battery_device, 1); + entries = indicator_object_get_entries (INDICATOR_OBJECT(power)); + ASSERT_EQ (g_list_length(entries), 1); + entry = static_cast(entries->data); + ASSERT_STREQ (entry->accessible_desc, "Battery (2 hours left (100%))"); + g_list_free (entries); + // give the indicator a discharging battery with over 12 hours of life left g_object_set (battery_device, - INDICATOR_POWER_DEVICE_STATE, UP_DEVICE_STATE_DISCHARGING, - INDICATOR_POWER_DEVICE_PERCENTAGE, 50.0, INDICATOR_POWER_DEVICE_TIME, guint64(60*60*12 + 1), NULL); indicator_power_set_devices (power, &battery_device, 1); entries = indicator_object_get_entries (INDICATOR_OBJECT(power)); ASSERT_EQ (g_list_length(entries), 1); entry = static_cast(entries->data); + ASSERT_STREQ (entry->accessible_desc, "Battery"); + g_list_free (entries); + + // give the indicator a discharging battery with 29 seconds left + g_object_set (battery_device, + INDICATOR_POWER_DEVICE_TIME, guint64(29), + NULL); + indicator_power_set_devices (power, &battery_device, 1); + entries = indicator_object_get_entries (INDICATOR_OBJECT(power)); + ASSERT_EQ (g_list_length(entries), 1); + entry = static_cast(entries->data); + ASSERT_STREQ (entry->accessible_desc, "Battery (Unknown time left (100%))"); + g_list_free (entries); + + // what happens if the time estimate isn't available + g_object_set (battery_device, + INDICATOR_POWER_DEVICE_TIME, guint64(0), + INDICATOR_POWER_DEVICE_PERCENTAGE, 50.0, + NULL); + indicator_power_set_devices (power, &battery_device, 1); + entries = indicator_object_get_entries (INDICATOR_OBJECT(power)); + ASSERT_EQ (g_list_length(entries), 1); + entry = static_cast(entries->data); + ASSERT_STREQ (entry->accessible_desc, "Battery (50%)"); + g_list_free (entries); + + // what happens if the time estimate AND percentage isn't available + g_object_set (battery_device, + INDICATOR_POWER_DEVICE_TIME, guint64(0), + INDICATOR_POWER_DEVICE_PERCENTAGE, 0.0, + NULL); + indicator_power_set_devices (power, &battery_device, 1); + entries = indicator_object_get_entries (INDICATOR_OBJECT(power)); + ASSERT_EQ (g_list_length(entries), 1); + entry = static_cast(entries->data); + ASSERT_STREQ (entry->accessible_desc, "Battery (not present)"); + g_list_free (entries); + + // cleanup + g_object_unref (power); +} + +TEST_F(IndicatorTest, ChargingStrings) +{ + IndicatorPower * power = INDICATOR_POWER(g_object_new (INDICATOR_POWER_TYPE, NULL)); + + // give the indicator a discharging battery with 1 hour of life left + g_object_set (battery_device, + INDICATOR_POWER_DEVICE_STATE, UP_DEVICE_STATE_CHARGING, + INDICATOR_POWER_DEVICE_PERCENTAGE, 50.0, + INDICATOR_POWER_DEVICE_TIME, guint64(60*60), + NULL); + indicator_power_set_devices (power, &battery_device, 1); + GList * entries = indicator_object_get_entries (INDICATOR_OBJECT(power)); + ASSERT_EQ (g_list_length(entries), 1); + IndicatorObjectEntry * entry = static_cast(entries->data); + ASSERT_STREQ(entry->accessible_desc, "Battery (1 hour to charge (50%))"); + g_list_free (entries); + + // give the indicator a discharging battery with 2 hours of life left + g_object_set (battery_device, + INDICATOR_POWER_DEVICE_TIME, guint64(60*60*2), + NULL); + indicator_power_set_devices (power, &battery_device, 1); + entries = indicator_object_get_entries (INDICATOR_OBJECT(power)); + ASSERT_EQ (g_list_length(entries), 1); + entry = static_cast(entries->data); + ASSERT_STREQ (entry->accessible_desc, "Battery (2 hours to charge (50%))"); + g_list_free (entries); + + // cleanup + g_object_unref (power); +} + +TEST_F(IndicatorTest, ChargedStrings) +{ + IndicatorPower * power = INDICATOR_POWER(g_object_new (INDICATOR_POWER_TYPE, NULL)); + + // give the indicator a discharging battery with 1 hour of life left + g_object_set (battery_device, + INDICATOR_POWER_DEVICE_STATE, UP_DEVICE_STATE_FULLY_CHARGED, + INDICATOR_POWER_DEVICE_PERCENTAGE, 100.0, + INDICATOR_POWER_DEVICE_TIME, guint64(0), + NULL); + indicator_power_set_devices (power, &battery_device, 1); + GList * entries = indicator_object_get_entries (INDICATOR_OBJECT(power)); + ASSERT_EQ (g_list_length(entries), 1); + IndicatorObjectEntry * entry = static_cast(entries->data); + ASSERT_STREQ(entry->accessible_desc, "Battery (charged)"); g_list_free (entries); // cleanup -- cgit v1.2.3 From 29ec6d23c13cbe7487232b79700c5d5406c26014 Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Sat, 26 May 2012 15:42:58 -0500 Subject: extract-method to simplify testing the accessible text --- tests/test-indicator.cc | 92 ++++++++++++++++++++++++------------------------- 1 file changed, 45 insertions(+), 47 deletions(-) (limited to 'tests/test-indicator.cc') diff --git a/tests/test-indicator.cc b/tests/test-indicator.cc index ad619e2..52e319f 100644 --- a/tests/test-indicator.cc +++ b/tests/test-indicator.cc @@ -75,6 +75,16 @@ class IndicatorTest : public ::testing::Test g_object_unref (battery_device); g_object_unref (ac_device); } + + const char* GetAccessibleDesc (IndicatorPower * power) const + { + GList * entries = indicator_object_get_entries (INDICATOR_OBJECT(power)); + g_assert (g_list_length(entries) == 1); + IndicatorObjectEntry * entry = static_cast(entries->data); + const char * ret = entry->accessible_desc; + g_list_free (entries); + return ret; + } }; /*** @@ -109,13 +119,8 @@ TEST_F(IndicatorTest, DischargingStrings) INDICATOR_POWER_DEVICE_PERCENTAGE, 50.0, INDICATOR_POWER_DEVICE_TIME, guint64(60*60), NULL); - indicator_power_set_devices (power, &battery_device, 1); - GList * entries = indicator_object_get_entries (INDICATOR_OBJECT(power)); - ASSERT_EQ (g_list_length(entries), 1); - IndicatorObjectEntry * entry = static_cast(entries->data); - ASSERT_STREQ(entry->accessible_desc, "Battery (1 hour left (50%))"); - ASSERT_STREQ(entry->name_hint, "indicator-power"); - g_list_free (entries); + indicator_power_set_devices (power, &battery_device, 1); + ASSERT_STREQ (GetAccessibleDesc(power), "Battery (1 hour left (50%))"); // give the indicator a discharging battery with 2 hours of life left g_object_set (battery_device, @@ -123,33 +128,21 @@ TEST_F(IndicatorTest, DischargingStrings) INDICATOR_POWER_DEVICE_TIME, guint64(60*60*2), NULL); indicator_power_set_devices (power, &battery_device, 1); - entries = indicator_object_get_entries (INDICATOR_OBJECT(power)); - ASSERT_EQ (g_list_length(entries), 1); - entry = static_cast(entries->data); - ASSERT_STREQ (entry->accessible_desc, "Battery (2 hours left (100%))"); - g_list_free (entries); + ASSERT_STREQ (GetAccessibleDesc(power), "Battery (2 hours left (100%))"); // give the indicator a discharging battery with over 12 hours of life left g_object_set (battery_device, INDICATOR_POWER_DEVICE_TIME, guint64(60*60*12 + 1), NULL); indicator_power_set_devices (power, &battery_device, 1); - entries = indicator_object_get_entries (INDICATOR_OBJECT(power)); - ASSERT_EQ (g_list_length(entries), 1); - entry = static_cast(entries->data); - ASSERT_STREQ (entry->accessible_desc, "Battery"); - g_list_free (entries); + ASSERT_STREQ (GetAccessibleDesc(power), "Battery"); // give the indicator a discharging battery with 29 seconds left g_object_set (battery_device, INDICATOR_POWER_DEVICE_TIME, guint64(29), NULL); indicator_power_set_devices (power, &battery_device, 1); - entries = indicator_object_get_entries (INDICATOR_OBJECT(power)); - ASSERT_EQ (g_list_length(entries), 1); - entry = static_cast(entries->data); - ASSERT_STREQ (entry->accessible_desc, "Battery (Unknown time left (100%))"); - g_list_free (entries); + ASSERT_STREQ (GetAccessibleDesc(power), "Battery (Unknown time left (100%))"); // what happens if the time estimate isn't available g_object_set (battery_device, @@ -157,11 +150,7 @@ TEST_F(IndicatorTest, DischargingStrings) INDICATOR_POWER_DEVICE_PERCENTAGE, 50.0, NULL); indicator_power_set_devices (power, &battery_device, 1); - entries = indicator_object_get_entries (INDICATOR_OBJECT(power)); - ASSERT_EQ (g_list_length(entries), 1); - entry = static_cast(entries->data); - ASSERT_STREQ (entry->accessible_desc, "Battery (50%)"); - g_list_free (entries); + ASSERT_STREQ (GetAccessibleDesc(power), "Battery (50%)"); // what happens if the time estimate AND percentage isn't available g_object_set (battery_device, @@ -169,11 +158,7 @@ TEST_F(IndicatorTest, DischargingStrings) INDICATOR_POWER_DEVICE_PERCENTAGE, 0.0, NULL); indicator_power_set_devices (power, &battery_device, 1); - entries = indicator_object_get_entries (INDICATOR_OBJECT(power)); - ASSERT_EQ (g_list_length(entries), 1); - entry = static_cast(entries->data); - ASSERT_STREQ (entry->accessible_desc, "Battery (not present)"); - g_list_free (entries); + ASSERT_STREQ (GetAccessibleDesc(power), "Battery (not present)"); // cleanup g_object_unref (power); @@ -190,22 +175,14 @@ TEST_F(IndicatorTest, ChargingStrings) INDICATOR_POWER_DEVICE_TIME, guint64(60*60), NULL); indicator_power_set_devices (power, &battery_device, 1); - GList * entries = indicator_object_get_entries (INDICATOR_OBJECT(power)); - ASSERT_EQ (g_list_length(entries), 1); - IndicatorObjectEntry * entry = static_cast(entries->data); - ASSERT_STREQ(entry->accessible_desc, "Battery (1 hour to charge (50%))"); - g_list_free (entries); + ASSERT_STREQ (GetAccessibleDesc(power), "Battery (1 hour to charge (50%))"); // give the indicator a discharging battery with 2 hours of life left g_object_set (battery_device, INDICATOR_POWER_DEVICE_TIME, guint64(60*60*2), NULL); indicator_power_set_devices (power, &battery_device, 1); - entries = indicator_object_get_entries (INDICATOR_OBJECT(power)); - ASSERT_EQ (g_list_length(entries), 1); - entry = static_cast(entries->data); - ASSERT_STREQ (entry->accessible_desc, "Battery (2 hours to charge (50%))"); - g_list_free (entries); + ASSERT_STREQ (GetAccessibleDesc(power), "Battery (2 hours to charge (50%))"); // cleanup g_object_unref (power); @@ -222,12 +199,33 @@ TEST_F(IndicatorTest, ChargedStrings) INDICATOR_POWER_DEVICE_TIME, guint64(0), NULL); indicator_power_set_devices (power, &battery_device, 1); - GList * entries = indicator_object_get_entries (INDICATOR_OBJECT(power)); - ASSERT_EQ (g_list_length(entries), 1); - IndicatorObjectEntry * entry = static_cast(entries->data); - ASSERT_STREQ(entry->accessible_desc, "Battery (charged)"); - g_list_free (entries); + ASSERT_STREQ (GetAccessibleDesc(power), "Battery (charged)"); + + // cleanup + g_object_unref (power); +} + +TEST_F(IndicatorTest, AvoidChargingBatteriesWithZeroSecondsLeft) +{ + IndicatorPower * power = INDICATOR_POWER(g_object_new (INDICATOR_POWER_TYPE, NULL)); + + g_object_set (battery_device, + INDICATOR_POWER_DEVICE_STATE, UP_DEVICE_STATE_FULLY_CHARGED, + INDICATOR_POWER_DEVICE_PERCENTAGE, 100.0, + INDICATOR_POWER_DEVICE_TIME, guint64(0), + NULL); + IndicatorPowerDevice * bad_battery_device = indicator_power_device_new ( + "/org/freedesktop/UPower/devices/battery_BAT0", + UP_DEVICE_KIND_BATTERY, + ". GThemedIcon battery-good-symbolic gpm-battery-060 battery-good ", + 53, UP_DEVICE_STATE_CHARGING, 0); + + IndicatorPowerDevice * devices[] = { battery_device, bad_battery_device }; + indicator_power_set_devices (power, devices, G_N_ELEMENTS(devices)); + ASSERT_STREQ (GetAccessibleDesc(power), "Battery (53%)"); // cleanup g_object_unref (power); + g_object_unref (bad_battery_device); } + -- cgit v1.2.3 From aeb6ab59af1f325261db754aade493a949d5a1e3 Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Sat, 26 May 2012 16:26:02 -0500 Subject: call g_object_run_dispose() in a standalone test to get coverage on the NULL / non-NULL branches of dispose()'s g_clear_pointer() calls --- tests/test-device.cc | 1 + tests/test-indicator.cc | 1 + 2 files changed, 2 insertions(+) (limited to 'tests/test-indicator.cc') diff --git a/tests/test-device.cc b/tests/test-device.cc index 388460e..132d762 100644 --- a/tests/test-device.cc +++ b/tests/test-device.cc @@ -45,6 +45,7 @@ TEST(DeviceTest, GObjectNew) GObject * o = G_OBJECT (g_object_new (INDICATOR_POWER_DEVICE_TYPE, NULL)); ASSERT_TRUE (o != NULL); ASSERT_TRUE (INDICATOR_IS_POWER_DEVICE(o)); + g_object_run_dispose (o); // used to get coverage of both branches in the object's dispose func's g_clear_*() calls g_object_unref (o); } diff --git a/tests/test-indicator.cc b/tests/test-indicator.cc index 52e319f..dedf54c 100644 --- a/tests/test-indicator.cc +++ b/tests/test-indicator.cc @@ -96,6 +96,7 @@ TEST_F(IndicatorTest, GObjectNew) GObject * o = G_OBJECT (g_object_new (INDICATOR_POWER_TYPE, NULL)); ASSERT_TRUE (o != NULL); ASSERT_TRUE (IS_INDICATOR_POWER(o)); + g_object_run_dispose (o); // used to get coverage of both branches in the object's dispose func's g_clear_*() calls g_object_unref (o); } -- cgit v1.2.3 From eda15ff15c3603deb748daaa59c9b28a576a9c4d Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Sat, 26 May 2012 17:10:48 -0500 Subject: add coverage for DBusListener get_property() --- tests/test-indicator.cc | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'tests/test-indicator.cc') diff --git a/tests/test-indicator.cc b/tests/test-indicator.cc index dedf54c..2229d77 100644 --- a/tests/test-indicator.cc +++ b/tests/test-indicator.cc @@ -19,6 +19,7 @@ with this program. If not, see . #include +#include "dbus-listener.h" #include "device.h" #include "indicator-power.h" @@ -230,3 +231,19 @@ TEST_F(IndicatorTest, AvoidChargingBatteriesWithZeroSecondsLeft) g_object_unref (bad_battery_device); } +TEST_F(IndicatorTest, DbusListenerGetProperty) +{ + IndicatorPower * power = INDICATOR_POWER(g_object_new (INDICATOR_POWER_TYPE, NULL)); + GObject * dbus_listener = G_OBJECT(g_object_new (INDICATOR_POWER_DBUS_LISTENER_TYPE, + INDICATOR_POWER_DBUS_LISTENER_INDICATOR, power, + NULL)); + GObject * indicator = NULL; + g_object_get (dbus_listener, + INDICATOR_POWER_DBUS_LISTENER_INDICATOR, &indicator, + NULL); + ASSERT_EQ(INDICATOR_POWER(indicator), power); + + // cleanup + g_object_unref (dbus_listener); + g_object_unref (power); +} -- cgit v1.2.3 From 2f1281d4faa6bed2a0be484bd722504df290880c Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Sat, 26 May 2012 17:49:13 -0500 Subject: add coverage for charging with >1 minute but <1 hour left --- tests/test-indicator.cc | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'tests/test-indicator.cc') diff --git a/tests/test-indicator.cc b/tests/test-indicator.cc index 2229d77..5875df6 100644 --- a/tests/test-indicator.cc +++ b/tests/test-indicator.cc @@ -115,6 +115,15 @@ TEST_F(IndicatorTest, DischargingStrings) { IndicatorPower * power = INDICATOR_POWER(g_object_new (INDICATOR_POWER_TYPE, NULL)); + // give the indicator a discharging battery with 30 minutes of life left + g_object_set (battery_device, + INDICATOR_POWER_DEVICE_STATE, UP_DEVICE_STATE_DISCHARGING, + INDICATOR_POWER_DEVICE_PERCENTAGE, 50.0, + INDICATOR_POWER_DEVICE_TIME, guint64(60*30), + NULL); + indicator_power_set_devices (power, &battery_device, 1); + ASSERT_STREQ (GetAccessibleDesc(power), "Battery (30 minutes left (50%))"); + // give the indicator a discharging battery with 1 hour of life left g_object_set (battery_device, INDICATOR_POWER_DEVICE_STATE, UP_DEVICE_STATE_DISCHARGING, -- cgit v1.2.3 From 23a2672a1a763cdef67ccc5cb9f8fec7daf021be Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Sun, 27 May 2012 09:22:28 -0500 Subject: use signals to decouple i-power and dbus-listener --- src/dbus-listener.c | 100 +++++++++++------------------------------------- src/dbus-listener.h | 5 ++- src/indicator-power.c | 32 ++++++---------- src/indicator-power.h | 3 +- tests/test-indicator.cc | 60 ++++++++++++++--------------- 5 files changed, 66 insertions(+), 134 deletions(-) (limited to 'tests/test-indicator.cc') diff --git a/src/dbus-listener.c b/src/dbus-listener.c index 5539098..6a85fd4 100644 --- a/src/dbus-listener.c +++ b/src/dbus-listener.c @@ -22,7 +22,7 @@ License along with this library. If not, see */ #include "dbus-listener.h" -#include "indicator-power.h" +#include "device.h" #define DBUS_SERVICE "org.gnome.SettingsDaemon" #define DBUS_PATH "/org/gnome/SettingsDaemon" @@ -31,8 +31,6 @@ License along with this library. If not, see struct _IndicatorPowerDbusListenerPrivate { - IndicatorPower * ipower; - GCancellable * cancellable; GDBusProxy * proxy; guint watcher_id; @@ -40,20 +38,19 @@ struct _IndicatorPowerDbusListenerPrivate #define INDICATOR_POWER_DBUS_LISTENER_GET_PRIVATE(o) (INDICATOR_POWER_DBUS_LISTENER(o)->priv) -/* Properties */ -/* Enum for the properties so that they can be quickly found and looked up. */ +/* Signals */ enum { - PROP_0, - PROP_INDICATOR + SIGNAL_DEVICES, + SIGNAL_LAST }; +static guint signals[SIGNAL_LAST] = { 0 }; + /* GObject stuff */ static void indicator_power_dbus_listener_class_init (IndicatorPowerDbusListenerClass *klass); static void indicator_power_dbus_listener_init (IndicatorPowerDbusListener *self); static void indicator_power_dbus_listener_dispose (GObject *object); static void indicator_power_dbus_listener_finalize (GObject *object); -static void set_property (GObject*, guint prop_id, const GValue*, GParamSpec* ); -static void get_property (GObject*, guint prop_id, GValue*, GParamSpec* ); static void gsd_appeared_callback (GDBusConnection *connection, const gchar *name, const gchar *name_owner, gpointer user_data); @@ -62,21 +59,21 @@ G_DEFINE_TYPE (IndicatorPowerDbusListener, indicator_power_dbus_listener, G_TYPE static void indicator_power_dbus_listener_class_init (IndicatorPowerDbusListenerClass *klass) { - GParamSpec * pspec; GObjectClass *object_class = G_OBJECT_CLASS (klass); g_type_class_add_private (klass, sizeof (IndicatorPowerDbusListenerPrivate)); + /* methods */ object_class->dispose = indicator_power_dbus_listener_dispose; object_class->finalize = indicator_power_dbus_listener_finalize; - object_class->set_property = set_property; - object_class->get_property = get_property; - - pspec = g_param_spec_object (INDICATOR_POWER_DBUS_LISTENER_INDICATOR, - "indicator", - "The IndicatorPower to notify when power changes are received", - INDICATOR_POWER_TYPE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); - g_object_class_install_property (object_class, PROP_INDICATOR, pspec); + + /* signals */ + signals[SIGNAL_DEVICES] = g_signal_new (INDICATOR_POWER_DBUS_LISTENER_DEVICES_ENUMERATED, + G_TYPE_FROM_CLASS(klass), 0, + G_STRUCT_OFFSET (IndicatorPowerDbusListenerClass, devices_enumerated), + NULL, NULL, + g_cclosure_marshal_VOID__POINTER, + G_TYPE_NONE, 1, G_TYPE_POINTER, G_TYPE_NONE); } /* Initialize an instance */ @@ -89,8 +86,6 @@ indicator_power_dbus_listener_init (IndicatorPowerDbusListener *self) INDICATOR_POWER_DBUS_LISTENER_TYPE, IndicatorPowerDbusListenerPrivate); - priv->ipower = NULL; - priv->cancellable = g_cancellable_new (); priv->watcher_id = g_bus_watch_name (G_BUS_TYPE_SESSION, @@ -104,20 +99,6 @@ indicator_power_dbus_listener_init (IndicatorPowerDbusListener *self) self->priv = priv; } -static void -set_indicator (IndicatorPowerDbusListener * self, GObject * ipower) -{ - IndicatorPowerDbusListenerPrivate * priv = self->priv; - - if (priv->ipower != NULL) - g_object_remove_weak_pointer (G_OBJECT(priv->ipower), (gpointer*)&priv->ipower); - - priv->ipower = INDICATOR_POWER(ipower); - - if (priv->ipower != NULL) - g_object_add_weak_pointer (G_OBJECT(priv->ipower), (gpointer*)&priv->ipower); -}; - static void indicator_power_dbus_listener_dispose (GObject *object) { @@ -127,8 +108,6 @@ indicator_power_dbus_listener_dispose (GObject *object) g_clear_object (&priv->proxy); g_clear_object (&priv->cancellable); - set_indicator (self, NULL); - G_OBJECT_CLASS (indicator_power_dbus_listener_parent_class)->dispose (object); } @@ -142,48 +121,15 @@ indicator_power_dbus_listener_finalize (GObject *object) **** ***/ -static void -get_property (GObject * o, guint prop_id, GValue * value, GParamSpec * pspec) -{ - IndicatorPowerDbusListener * self = INDICATOR_POWER_DBUS_LISTENER(o); - IndicatorPowerDbusListenerPrivate * priv = self->priv; - - switch (prop_id) - { - case PROP_INDICATOR: - g_value_set_object (value, priv->ipower); - break; - } -} - -static void -set_property (GObject * o, guint prop_id, const GValue * value, GParamSpec * pspec) -{ - IndicatorPowerDbusListener * self = INDICATOR_POWER_DBUS_LISTENER(o); - - switch (prop_id) - { - case PROP_INDICATOR: - set_indicator (self, g_value_get_object(value)); - break; - } -} - -/*** -**** -***/ - static void get_devices_cb (GObject * source_object, GAsyncResult * res, gpointer user_data) { GError *error; - int device_count = 0; + GSList * devices = NULL; GVariant * devices_container; - IndicatorPowerDevice ** devices = NULL; IndicatorPowerDbusListener * self = INDICATOR_POWER_DBUS_LISTENER (user_data); - IndicatorPowerDbusListenerPrivate * priv = self->priv; /* build an array of IndicatorPowerDevices from the DBus response */ error = NULL; @@ -197,26 +143,24 @@ get_devices_cb (GObject * source_object, { gsize i; GVariant * devices_variant = g_variant_get_child_value (devices_container, 0); - device_count = devices_variant ? g_variant_n_children (devices_variant) : 0; - devices = g_new0 (IndicatorPowerDevice*, device_count); + const int device_count = devices_variant ? g_variant_n_children (devices_variant) : 0; for (i=0; iipower != NULL) - { - indicator_power_set_devices (priv->ipower, devices, device_count); - } + g_signal_emit (self, signals[SIGNAL_DEVICES], (GQuark)0, devices); - g_free (devices); + g_slist_free_full (devices, g_object_unref); + } static void diff --git a/src/dbus-listener.h b/src/dbus-listener.h index 816ecc5..2dc0865 100644 --- a/src/dbus-listener.h +++ b/src/dbus-listener.h @@ -41,7 +41,8 @@ typedef struct _IndicatorPowerDbusListener IndicatorPowerDbusListener; typedef struct _IndicatorPowerDbusListenerClass IndicatorPowerDbusListenerClass; typedef struct _IndicatorPowerDbusListenerPrivate IndicatorPowerDbusListenerPrivate; -#define INDICATOR_POWER_DBUS_LISTENER_INDICATOR "indicator-power-dbus-listener-indicator" +/* signals */ +#define INDICATOR_POWER_DBUS_LISTENER_DEVICES_ENUMERATED "indicator-power-dbus-listener-devices-enumerated" /** * IndicatorPowerDbusListenerClass: @@ -50,6 +51,8 @@ typedef struct _IndicatorPowerDbusListenerPrivate IndicatorPowerDbusListenerPriv struct _IndicatorPowerDbusListenerClass { GObjectClass parent_class; + + void (* devices_enumerated) (IndicatorPowerDbusListener*, GSList * devices); }; /** diff --git a/src/indicator-power.c b/src/indicator-power.c index cf96619..6690f9b 100644 --- a/src/indicator-power.c +++ b/src/indicator-power.c @@ -116,9 +116,10 @@ indicator_power_init (IndicatorPower *self) priv->accessible_desc = NULL; - priv->dbus_listener = g_object_new (INDICATOR_POWER_DBUS_LISTENER_TYPE, - INDICATOR_POWER_DBUS_LISTENER_INDICATOR, self, - NULL); + priv->dbus_listener = g_object_new (INDICATOR_POWER_DBUS_LISTENER_TYPE, NULL); + g_signal_connect_swapped (priv->dbus_listener, INDICATOR_POWER_DBUS_LISTENER_DEVICES_ENUMERATED, + G_CALLBACK(indicator_power_set_devices), self); + priv->settings = g_settings_new ("com.canonical.indicator.power"); g_signal_connect_swapped (priv->settings, "changed::" ICON_POLICY_KEY, G_CALLBACK(update_visibility), self); @@ -763,33 +764,22 @@ put_primary_device (IndicatorPower *self, IndicatorPowerDevice *device) } void -indicator_power_set_devices (IndicatorPower * self, - IndicatorPowerDevice ** devices, - gsize device_count) +indicator_power_set_devices (IndicatorPower * self, GSList * devices) { - gsize i; - GSList * new_devices; IndicatorPowerPrivate * priv; -/* LCOV_EXCL_START */ + /* LCOV_EXCL_START */ g_return_if_fail (IS_INDICATOR_POWER(self)); -/* LCOV_EXCL_STOP */ + /* LCOV_EXCL_STOP */ priv = self->priv; - /* make a reff'ed list of the new devices */ - new_devices = NULL; - for (i=0; idevices = new_devices; + priv->devices = g_slist_copy (devices); priv->device = get_primary_device (priv->devices); - /* and update ourselves based on this new data */ + /* and our menus/visibility from the new device list */ if (priv->device != NULL) put_primary_device (self, priv->device); else diff --git a/src/indicator-power.h b/src/indicator-power.h index bd47535..69ed888 100644 --- a/src/indicator-power.h +++ b/src/indicator-power.h @@ -55,7 +55,6 @@ struct _IndicatorPower GType indicator_power_get_type (void) G_GNUC_CONST; void indicator_power_set_devices (IndicatorPower * power, - IndicatorPowerDevice ** devices, - gsize deviceCount); + GSList * devices); G_END_DECLS diff --git a/tests/test-indicator.cc b/tests/test-indicator.cc index 5875df6..50ae2c1 100644 --- a/tests/test-indicator.cc +++ b/tests/test-indicator.cc @@ -103,17 +103,22 @@ TEST_F(IndicatorTest, GObjectNew) TEST_F(IndicatorTest, SetDevices) { + GSList * devices; IndicatorPower * power = INDICATOR_POWER(g_object_new (INDICATOR_POWER_TYPE, NULL)); - IndicatorPowerDevice * devices[] = { ac_device, battery_device }; - indicator_power_set_devices (power, devices, G_N_ELEMENTS(devices)); - + devices = NULL; + devices = g_slist_append (devices, ac_device); + devices = g_slist_append (devices, battery_device); + indicator_power_set_devices (power, devices); + g_slist_free (devices); + g_object_unref (power); } TEST_F(IndicatorTest, DischargingStrings) { IndicatorPower * power = INDICATOR_POWER(g_object_new (INDICATOR_POWER_TYPE, NULL)); + GSList * devices = g_slist_append (NULL, battery_device); // give the indicator a discharging battery with 30 minutes of life left g_object_set (battery_device, @@ -121,7 +126,7 @@ TEST_F(IndicatorTest, DischargingStrings) INDICATOR_POWER_DEVICE_PERCENTAGE, 50.0, INDICATOR_POWER_DEVICE_TIME, guint64(60*30), NULL); - indicator_power_set_devices (power, &battery_device, 1); + indicator_power_set_devices (power, devices); ASSERT_STREQ (GetAccessibleDesc(power), "Battery (30 minutes left (50%))"); // give the indicator a discharging battery with 1 hour of life left @@ -130,7 +135,7 @@ TEST_F(IndicatorTest, DischargingStrings) INDICATOR_POWER_DEVICE_PERCENTAGE, 50.0, INDICATOR_POWER_DEVICE_TIME, guint64(60*60), NULL); - indicator_power_set_devices (power, &battery_device, 1); + indicator_power_set_devices (power, devices); ASSERT_STREQ (GetAccessibleDesc(power), "Battery (1 hour left (50%))"); // give the indicator a discharging battery with 2 hours of life left @@ -138,21 +143,21 @@ TEST_F(IndicatorTest, DischargingStrings) INDICATOR_POWER_DEVICE_PERCENTAGE, 100.0, INDICATOR_POWER_DEVICE_TIME, guint64(60*60*2), NULL); - indicator_power_set_devices (power, &battery_device, 1); + indicator_power_set_devices (power, devices); ASSERT_STREQ (GetAccessibleDesc(power), "Battery (2 hours left (100%))"); // give the indicator a discharging battery with over 12 hours of life left g_object_set (battery_device, INDICATOR_POWER_DEVICE_TIME, guint64(60*60*12 + 1), NULL); - indicator_power_set_devices (power, &battery_device, 1); + indicator_power_set_devices (power, devices); ASSERT_STREQ (GetAccessibleDesc(power), "Battery"); // give the indicator a discharging battery with 29 seconds left g_object_set (battery_device, INDICATOR_POWER_DEVICE_TIME, guint64(29), NULL); - indicator_power_set_devices (power, &battery_device, 1); + indicator_power_set_devices (power, devices); ASSERT_STREQ (GetAccessibleDesc(power), "Battery (Unknown time left (100%))"); // what happens if the time estimate isn't available @@ -160,7 +165,7 @@ TEST_F(IndicatorTest, DischargingStrings) INDICATOR_POWER_DEVICE_TIME, guint64(0), INDICATOR_POWER_DEVICE_PERCENTAGE, 50.0, NULL); - indicator_power_set_devices (power, &battery_device, 1); + indicator_power_set_devices (power, devices); ASSERT_STREQ (GetAccessibleDesc(power), "Battery (50%)"); // what happens if the time estimate AND percentage isn't available @@ -168,16 +173,18 @@ TEST_F(IndicatorTest, DischargingStrings) INDICATOR_POWER_DEVICE_TIME, guint64(0), INDICATOR_POWER_DEVICE_PERCENTAGE, 0.0, NULL); - indicator_power_set_devices (power, &battery_device, 1); + indicator_power_set_devices (power, devices); ASSERT_STREQ (GetAccessibleDesc(power), "Battery (not present)"); // cleanup + g_slist_free (devices); g_object_unref (power); } TEST_F(IndicatorTest, ChargingStrings) { IndicatorPower * power = INDICATOR_POWER(g_object_new (INDICATOR_POWER_TYPE, NULL)); + GSList * devices = g_slist_prepend (NULL, battery_device); // give the indicator a discharging battery with 1 hour of life left g_object_set (battery_device, @@ -185,23 +192,25 @@ TEST_F(IndicatorTest, ChargingStrings) INDICATOR_POWER_DEVICE_PERCENTAGE, 50.0, INDICATOR_POWER_DEVICE_TIME, guint64(60*60), NULL); - indicator_power_set_devices (power, &battery_device, 1); + indicator_power_set_devices (power, devices); ASSERT_STREQ (GetAccessibleDesc(power), "Battery (1 hour to charge (50%))"); // give the indicator a discharging battery with 2 hours of life left g_object_set (battery_device, INDICATOR_POWER_DEVICE_TIME, guint64(60*60*2), NULL); - indicator_power_set_devices (power, &battery_device, 1); + indicator_power_set_devices (power, devices); ASSERT_STREQ (GetAccessibleDesc(power), "Battery (2 hours to charge (50%))"); // cleanup + g_slist_free (devices); g_object_unref (power); } TEST_F(IndicatorTest, ChargedStrings) { IndicatorPower * power = INDICATOR_POWER(g_object_new (INDICATOR_POWER_TYPE, NULL)); + GSList * devices = g_slist_append (NULL, battery_device); // give the indicator a discharging battery with 1 hour of life left g_object_set (battery_device, @@ -209,10 +218,11 @@ TEST_F(IndicatorTest, ChargedStrings) INDICATOR_POWER_DEVICE_PERCENTAGE, 100.0, INDICATOR_POWER_DEVICE_TIME, guint64(0), NULL); - indicator_power_set_devices (power, &battery_device, 1); + indicator_power_set_devices (power, devices); ASSERT_STREQ (GetAccessibleDesc(power), "Battery (charged)"); // cleanup + g_slist_free (devices); g_object_unref (power); } @@ -231,28 +241,14 @@ TEST_F(IndicatorTest, AvoidChargingBatteriesWithZeroSecondsLeft) ". GThemedIcon battery-good-symbolic gpm-battery-060 battery-good ", 53, UP_DEVICE_STATE_CHARGING, 0); - IndicatorPowerDevice * devices[] = { battery_device, bad_battery_device }; - indicator_power_set_devices (power, devices, G_N_ELEMENTS(devices)); + GSList * devices = NULL; + devices = g_slist_append (devices, battery_device); + devices = g_slist_append (devices, bad_battery_device); + indicator_power_set_devices (power, devices); ASSERT_STREQ (GetAccessibleDesc(power), "Battery (53%)"); // cleanup + g_slist_free (devices); g_object_unref (power); g_object_unref (bad_battery_device); } - -TEST_F(IndicatorTest, DbusListenerGetProperty) -{ - IndicatorPower * power = INDICATOR_POWER(g_object_new (INDICATOR_POWER_TYPE, NULL)); - GObject * dbus_listener = G_OBJECT(g_object_new (INDICATOR_POWER_DBUS_LISTENER_TYPE, - INDICATOR_POWER_DBUS_LISTENER_INDICATOR, power, - NULL)); - GObject * indicator = NULL; - g_object_get (dbus_listener, - INDICATOR_POWER_DBUS_LISTENER_INDICATOR, &indicator, - NULL); - ASSERT_EQ(INDICATOR_POWER(indicator), power); - - // cleanup - g_object_unref (dbus_listener); - g_object_unref (power); -} -- cgit v1.2.3 From 7b8cd0982a266d589a7dcc0a76b04776d72e1bf4 Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Mon, 28 May 2012 19:37:43 -0500 Subject: add more tests to improve coverage: different device types, no primary device --- tests/test-dbus-listener.cc | 1 + tests/test-indicator.cc | 61 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 62 insertions(+) (limited to 'tests/test-indicator.cc') diff --git a/tests/test-dbus-listener.cc b/tests/test-dbus-listener.cc index 2cfe4a7..62caeb0 100644 --- a/tests/test-dbus-listener.cc +++ b/tests/test-dbus-listener.cc @@ -235,6 +235,7 @@ TEST_F(DbusListenerTest, GnomeSettingsDaemon) ASSERT_STREQ ("/org/freedesktop/UPower/devices/battery_BAT0", indicator_power_device_get_object_path(device)); // cleanup + g_object_run_dispose (o); // used to get coverage of both branches in the object's dispose func's g_clear_*() calls g_object_unref (o); g_dbus_connection_unregister_object (connection, registration_id); g_bus_unown_name (name_ownership_id); diff --git a/tests/test-indicator.cc b/tests/test-indicator.cc index 50ae2c1..32d6f4f 100644 --- a/tests/test-indicator.cc +++ b/tests/test-indicator.cc @@ -252,3 +252,64 @@ TEST_F(IndicatorTest, AvoidChargingBatteriesWithZeroSecondsLeft) g_object_unref (power); g_object_unref (bad_battery_device); } + +TEST_F(IndicatorTest, OtherDevices) +{ + IndicatorPower * power = INDICATOR_POWER(g_object_new (INDICATOR_POWER_TYPE, NULL)); + + g_object_ref (battery_device); + GSList * devices = g_slist_append (NULL, battery_device); + + devices = g_slist_append (devices, indicator_power_device_new ( + "/org/freedesktop/UPower/devices/mouse", UP_DEVICE_KIND_MOUSE, + "unused", 0, UP_DEVICE_STATE_UNKNOWN, 0)); + devices = g_slist_append (devices, indicator_power_device_new ( + "/org/freedesktop/UPower/devices/ups", UP_DEVICE_KIND_UPS, + "unused", 0, UP_DEVICE_STATE_UNKNOWN, 0)); + devices = g_slist_append (devices, indicator_power_device_new ( + "/org/freedesktop/UPower/devices/keyboard", UP_DEVICE_KIND_KEYBOARD, + "unused", 0, UP_DEVICE_STATE_UNKNOWN, 0)); + devices = g_slist_append (devices, indicator_power_device_new ( + "/org/freedesktop/UPower/devices/pda", UP_DEVICE_KIND_PDA, + "unused", 0, UP_DEVICE_STATE_UNKNOWN, 0)); + devices = g_slist_append (devices, indicator_power_device_new ( + "/org/freedesktop/UPower/devices/phone", UP_DEVICE_KIND_PHONE, + "unused", 0, UP_DEVICE_STATE_UNKNOWN, 0)); + devices = g_slist_append (devices, indicator_power_device_new ( + "/org/freedesktop/UPower/devices/monitor", UP_DEVICE_KIND_MONITOR, + "unused", 0, UP_DEVICE_STATE_UNKNOWN, 0)); + devices = g_slist_append (devices, indicator_power_device_new ( + "/org/freedesktop/UPower/devices/media_player", UP_DEVICE_KIND_MEDIA_PLAYER, + "unused", 0, UP_DEVICE_STATE_UNKNOWN, 0)); + devices = g_slist_append (devices, indicator_power_device_new ( + "/org/freedesktop/UPower/devices/tablet", UP_DEVICE_KIND_TABLET, + "unused", 0, UP_DEVICE_STATE_UNKNOWN, 0)); + devices = g_slist_append (devices, indicator_power_device_new ( + "/org/freedesktop/UPower/devices/computer", UP_DEVICE_KIND_COMPUTER, + "unused", 0, UP_DEVICE_STATE_UNKNOWN, 0)); + devices = g_slist_append (devices, indicator_power_device_new ( + "/org/freedesktop/UPower/devices/unknown", UP_DEVICE_KIND_UNKNOWN, + "unused", 0, UP_DEVICE_STATE_UNKNOWN, 0)); + + indicator_power_set_devices (power, devices); + + // FIXME: this tests to confirm the code doesn't crash, + // but further tests would be helpful + + // cleanup + g_slist_free_full (devices, g_object_unref); + g_object_unref (power); +} + +TEST_F(IndicatorTest, NoDevices) +{ + IndicatorPower * power = INDICATOR_POWER(g_object_new (INDICATOR_POWER_TYPE, NULL)); + + indicator_power_set_devices (power, NULL); + + // FIXME: this tests to confirm the code doesn't crash, + // but further tests would be helpful + + // cleanup + g_object_unref (power); +} -- cgit v1.2.3 From 97867c31fd3f4767fe891de31786b7b32d6dd35a Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Thu, 31 May 2012 13:08:27 -0500 Subject: remove IndicatorPowerDevice's now-unused device icon string. --- src/device.c | 126 ------------------------------------------------ src/device.h | 3 -- tests/test-device.cc | 12 ----- tests/test-indicator.cc | 23 ++++----- 4 files changed, 10 insertions(+), 154 deletions(-) (limited to 'tests/test-indicator.cc') diff --git a/src/device.c b/src/device.c index 3dbfd4e..cd35c9b 100644 --- a/src/device.c +++ b/src/device.c @@ -28,7 +28,6 @@ struct _IndicatorPowerDevicePrivate UpDeviceKind kind; UpDeviceState state; gchar * object_path; - gchar * icon; gdouble percentage; time_t time; }; @@ -86,10 +85,6 @@ indicator_power_device_class_init (IndicatorPowerDeviceClass *klass) G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_OBJECT_PATH, pspec); - pspec = g_param_spec_string (INDICATOR_POWER_DEVICE_ICON, "icon", "The device's icon", NULL, - G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); - g_object_class_install_property (object_class, PROP_ICON, pspec); - pspec = g_param_spec_double (INDICATOR_POWER_DEVICE_PERCENTAGE, "percentage", "percent charged", 0.0, 100.0, 0.0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); @@ -113,7 +108,6 @@ indicator_power_device_init (IndicatorPowerDevice *self) priv->kind = UP_DEVICE_KIND_UNKNOWN; priv->state = UP_DEVICE_STATE_UNKNOWN; priv->object_path = NULL; - priv->icon = NULL; priv->percentage = 0.0; priv->time = 0; @@ -133,7 +127,6 @@ indicator_power_device_finalize (GObject *object) IndicatorPowerDevicePrivate * priv = self->priv; g_clear_pointer (&priv->object_path, g_free); - g_clear_pointer (&priv->icon, g_free); } /*** @@ -160,10 +153,6 @@ get_property (GObject * o, guint prop_id, GValue * value, GParamSpec * pspec) g_value_set_string (value, priv->object_path); break; - case PROP_ICON: - g_value_set_string (value, priv->icon); - break; - case PROP_PERCENTAGE: g_value_set_double (value, priv->percentage); break; @@ -195,11 +184,6 @@ set_property (GObject * o, guint prop_id, const GValue * value, GParamSpec * psp priv->object_path = g_value_dup_string (value); break; - case PROP_ICON: - g_free (priv->icon); - priv->icon = g_value_dup_string (value); - break; - case PROP_PERCENTAGE: priv->percentage = g_value_get_double (value); break; @@ -244,16 +228,6 @@ indicator_power_device_get_object_path (const IndicatorPowerDevice * device) return device->priv->object_path; } -const gchar * -indicator_power_device_get_icon (const IndicatorPowerDevice * device) -{ - /* LCOV_EXCL_START */ - g_return_val_if_fail (INDICATOR_IS_POWER_DEVICE(device), UP_DEVICE_KIND_UNKNOWN); - /* LCOV_EXCL_STOP */ - - return device->priv->icon; -} - gdouble indicator_power_device_get_percentage (const IndicatorPowerDevice * device) { @@ -418,103 +392,6 @@ indicator_power_device_get_gicon (const IndicatorPowerDevice * device) } - -#if 0 -static const gchar * -get_icon_percentage_for_status (const gchar *status) -{ - - if (g_strcmp0 (status, "caution") == 0) - return "000"; - else if (g_strcmp0 (status, "low") == 0) - return "040"; - else if (g_strcmp0 (status, "good") == 0) - return "080"; - else - return "100"; -} - -static GIcon* -build_battery_icon (UpDeviceState state, - gchar *suffix_str) -{ - GIcon *gicon; - - GString *filename; - gchar **iconnames; - - filename = g_string_new (NULL); - - if (state == UP_DEVICE_STATE_FULLY_CHARGED) - { - g_string_append (filename, "battery-charged;"); - g_string_append (filename, "battery-full-charged-symbolic;"); - g_string_append (filename, "battery-full-charged;"); - g_string_append (filename, "gpm-battery-charged;"); - g_string_append (filename, "gpm-battery-100-charging;"); - } - else if (state == UP_DEVICE_STATE_CHARGING) - { - g_string_append (filename, "battery-000-charging;"); - g_string_append (filename, "battery-caution-charging-symbolic;"); - g_string_append (filename, "battery-caution-charging;"); - g_string_append (filename, "gpm-battery-000-charging;"); - } - else if (state == UP_DEVICE_STATE_DISCHARGING) - { - const gchar *percentage = get_icon_percentage_for_status (suffix_str); - g_string_append_printf (filename, "battery-%s;", suffix_str); - g_string_append_printf (filename, "battery-%s-symbolic;", suffix_str); - g_string_append_printf (filename, "battery-%s;", percentage); - g_string_append_printf (filename, "gpm-battery-%s;", percentage); - } - - iconnames = g_strsplit (filename->str, ";", -1); - gicon = g_themed_icon_new_from_names (iconnames, -1); - - g_strfreev (iconnames); - g_string_free (filename, TRUE); - - return gicon; -} - -static GIcon* -get_device_icon (UpDeviceKind kind, - UpDeviceState state, - guint64 time_sec, - const gchar *device_icon) -{ - GIcon *gicon = NULL; - - if (kind == UP_DEVICE_KIND_BATTERY && - (state == UP_DEVICE_STATE_FULLY_CHARGED || - state == UP_DEVICE_STATE_CHARGING || - state == UP_DEVICE_STATE_DISCHARGING)) - { - if (state == UP_DEVICE_STATE_FULLY_CHARGED || - state == UP_DEVICE_STATE_CHARGING) - { - gicon = build_battery_icon (state, NULL); - } - else if (state == UP_DEVICE_STATE_DISCHARGING) - { - if ((time_sec > 60 * 30) && /* more than 30 minutes left */ - (g_strrstr (device_icon, "000") || - g_strrstr (device_icon, "020") || - g_strrstr (device_icon, "caution"))) /* the icon is red */ - { - gicon = build_battery_icon (state, "low"); - } - } - } - - if (gicon == NULL) - gicon = g_icon_new_for_string (device_icon, NULL); - - return gicon; -} -#endif - /*** **** Instantiation ***/ @@ -522,7 +399,6 @@ get_device_icon (UpDeviceKind kind, IndicatorPowerDevice * indicator_power_device_new (const gchar * object_path, UpDeviceKind kind, - const gchar * icon_path, gdouble percentage, UpDeviceState state, time_t timestamp) @@ -531,7 +407,6 @@ indicator_power_device_new (const gchar * object_path, INDICATOR_POWER_DEVICE_KIND, kind, INDICATOR_POWER_DEVICE_STATE, state, INDICATOR_POWER_DEVICE_OBJECT_PATH, object_path, - INDICATOR_POWER_DEVICE_ICON, icon_path, INDICATOR_POWER_DEVICE_PERCENTAGE, percentage, INDICATOR_POWER_DEVICE_TIME, (guint64)timestamp, NULL); @@ -558,7 +433,6 @@ indicator_power_device_new_from_variant (GVariant * v) return indicator_power_device_new (object_path, kind, - icon, percentage, state, time); diff --git a/src/device.h b/src/device.h index 9b82830..11cd83b 100644 --- a/src/device.h +++ b/src/device.h @@ -43,7 +43,6 @@ typedef struct _IndicatorPowerDevicePrivate IndicatorPowerDevicePrivate; #define INDICATOR_POWER_DEVICE_KIND "indicator-power-device-kind" #define INDICATOR_POWER_DEVICE_STATE "indicator-power-device-state" #define INDICATOR_POWER_DEVICE_OBJECT_PATH "indicator-power-device-object-path" -#define INDICATOR_POWER_DEVICE_ICON "indicator-power-device-icon" #define INDICATOR_POWER_DEVICE_PERCENTAGE "indicator-power-device-percentage" #define INDICATOR_POWER_DEVICE_TIME "indicator-power-device-time" @@ -75,7 +74,6 @@ GType indicator_power_device_get_type (void); IndicatorPowerDevice* indicator_power_device_new (const gchar * object_path, UpDeviceKind kind, - const gchar * icon, gdouble percentage, UpDeviceState state, time_t time); @@ -90,7 +88,6 @@ IndicatorPowerDevice* indicator_power_device_new_from_variant (GVariant * varian UpDeviceKind indicator_power_device_get_kind (const IndicatorPowerDevice * device); UpDeviceState indicator_power_device_get_state (const IndicatorPowerDevice * device); const gchar * indicator_power_device_get_object_path (const IndicatorPowerDevice * device); -const gchar * indicator_power_device_get_icon (const IndicatorPowerDevice * device); gdouble indicator_power_device_get_percentage (const IndicatorPowerDevice * device); time_t indicator_power_device_get_time (const IndicatorPowerDevice * device); diff --git a/tests/test-device.cc b/tests/test-device.cc index b11188c..0ea7177 100644 --- a/tests/test-device.cc +++ b/tests/test-device.cc @@ -111,13 +111,6 @@ TEST_F(DeviceTest, Properties) ASSERT_STREQ (str, "/object/path"); g_free (str); - // ICON - key = INDICATOR_POWER_DEVICE_ICON; - g_object_set (o, key, "something", NULL); - g_object_get (o, key, &str, NULL); - ASSERT_STREQ (str, "something"); - g_free (str); - // PERCENTAGE key = INDICATOR_POWER_DEVICE_PERCENTAGE; g_object_set (o, key, 50.0, NULL); @@ -140,7 +133,6 @@ TEST_F(DeviceTest, New) IndicatorPowerDevice * device = indicator_power_device_new ("/object/path", UP_DEVICE_KIND_BATTERY, - "icon", 50.0, UP_DEVICE_STATE_CHARGING, 30); @@ -149,7 +141,6 @@ TEST_F(DeviceTest, New) ASSERT_EQ (indicator_power_device_get_kind(device), UP_DEVICE_KIND_BATTERY); ASSERT_EQ (indicator_power_device_get_state(device), UP_DEVICE_STATE_CHARGING); ASSERT_STREQ (indicator_power_device_get_object_path(device), "/object/path"); - ASSERT_STREQ (indicator_power_device_get_icon(device), "icon"); ASSERT_EQ ((int)indicator_power_device_get_percentage(device), 50); ASSERT_EQ (indicator_power_device_get_time(device), 30); @@ -175,7 +166,6 @@ TEST_F(DeviceTest, NewFromVariant) ASSERT_EQ (indicator_power_device_get_kind(device), UP_DEVICE_KIND_BATTERY); ASSERT_EQ (indicator_power_device_get_state(device), UP_DEVICE_STATE_CHARGING); ASSERT_STREQ (indicator_power_device_get_object_path(device), "/object/path"); - ASSERT_STREQ (indicator_power_device_get_icon(device), "icon"); ASSERT_EQ ((int)indicator_power_device_get_percentage(device), 50); ASSERT_EQ (indicator_power_device_get_time(device), 30); @@ -192,7 +182,6 @@ TEST_F(DeviceTest, BadAccessors) IndicatorPowerDevice * device = NULL; indicator_power_device_get_kind (device); indicator_power_device_get_time (device); - indicator_power_device_get_icon (device); indicator_power_device_get_state (device); indicator_power_device_get_percentage (device); indicator_power_device_get_object_path (device); @@ -201,7 +190,6 @@ TEST_F(DeviceTest, BadAccessors) device = reinterpret_cast(g_cancellable_new ()); indicator_power_device_get_kind (device); indicator_power_device_get_time (device); - indicator_power_device_get_icon (device); indicator_power_device_get_state (device); indicator_power_device_get_percentage (device); indicator_power_device_get_object_path (device); diff --git a/tests/test-indicator.cc b/tests/test-indicator.cc index 32d6f4f..b9f7321 100644 --- a/tests/test-indicator.cc +++ b/tests/test-indicator.cc @@ -61,13 +61,11 @@ class IndicatorTest : public ::testing::Test ac_device = indicator_power_device_new ( "/org/freedesktop/UPower/devices/line_power_AC", UP_DEVICE_KIND_LINE_POWER, - ". GThemedIcon ac-adapter-symbolic ac-adapter ", 0.0, UP_DEVICE_STATE_UNKNOWN, 0); battery_device = indicator_power_device_new ( "/org/freedesktop/UPower/devices/battery_BAT0", UP_DEVICE_KIND_BATTERY, - ". GThemedIcon battery-good-symbolic gpm-battery-060 battery-good ", 52.871712, UP_DEVICE_STATE_DISCHARGING, 8834); } @@ -238,7 +236,6 @@ TEST_F(IndicatorTest, AvoidChargingBatteriesWithZeroSecondsLeft) IndicatorPowerDevice * bad_battery_device = indicator_power_device_new ( "/org/freedesktop/UPower/devices/battery_BAT0", UP_DEVICE_KIND_BATTERY, - ". GThemedIcon battery-good-symbolic gpm-battery-060 battery-good ", 53, UP_DEVICE_STATE_CHARGING, 0); GSList * devices = NULL; @@ -262,34 +259,34 @@ TEST_F(IndicatorTest, OtherDevices) devices = g_slist_append (devices, indicator_power_device_new ( "/org/freedesktop/UPower/devices/mouse", UP_DEVICE_KIND_MOUSE, - "unused", 0, UP_DEVICE_STATE_UNKNOWN, 0)); + 0, UP_DEVICE_STATE_UNKNOWN, 0)); devices = g_slist_append (devices, indicator_power_device_new ( "/org/freedesktop/UPower/devices/ups", UP_DEVICE_KIND_UPS, - "unused", 0, UP_DEVICE_STATE_UNKNOWN, 0)); + 0, UP_DEVICE_STATE_UNKNOWN, 0)); devices = g_slist_append (devices, indicator_power_device_new ( "/org/freedesktop/UPower/devices/keyboard", UP_DEVICE_KIND_KEYBOARD, - "unused", 0, UP_DEVICE_STATE_UNKNOWN, 0)); + 0, UP_DEVICE_STATE_UNKNOWN, 0)); devices = g_slist_append (devices, indicator_power_device_new ( "/org/freedesktop/UPower/devices/pda", UP_DEVICE_KIND_PDA, - "unused", 0, UP_DEVICE_STATE_UNKNOWN, 0)); + 0, UP_DEVICE_STATE_UNKNOWN, 0)); devices = g_slist_append (devices, indicator_power_device_new ( "/org/freedesktop/UPower/devices/phone", UP_DEVICE_KIND_PHONE, - "unused", 0, UP_DEVICE_STATE_UNKNOWN, 0)); + 0, UP_DEVICE_STATE_UNKNOWN, 0)); devices = g_slist_append (devices, indicator_power_device_new ( "/org/freedesktop/UPower/devices/monitor", UP_DEVICE_KIND_MONITOR, - "unused", 0, UP_DEVICE_STATE_UNKNOWN, 0)); + 0, UP_DEVICE_STATE_UNKNOWN, 0)); devices = g_slist_append (devices, indicator_power_device_new ( "/org/freedesktop/UPower/devices/media_player", UP_DEVICE_KIND_MEDIA_PLAYER, - "unused", 0, UP_DEVICE_STATE_UNKNOWN, 0)); + 0, UP_DEVICE_STATE_UNKNOWN, 0)); devices = g_slist_append (devices, indicator_power_device_new ( "/org/freedesktop/UPower/devices/tablet", UP_DEVICE_KIND_TABLET, - "unused", 0, UP_DEVICE_STATE_UNKNOWN, 0)); + 0, UP_DEVICE_STATE_UNKNOWN, 0)); devices = g_slist_append (devices, indicator_power_device_new ( "/org/freedesktop/UPower/devices/computer", UP_DEVICE_KIND_COMPUTER, - "unused", 0, UP_DEVICE_STATE_UNKNOWN, 0)); + 0, UP_DEVICE_STATE_UNKNOWN, 0)); devices = g_slist_append (devices, indicator_power_device_new ( "/org/freedesktop/UPower/devices/unknown", UP_DEVICE_KIND_UNKNOWN, - "unused", 0, UP_DEVICE_STATE_UNKNOWN, 0)); + 0, UP_DEVICE_STATE_UNKNOWN, 0)); indicator_power_set_devices (power, devices); -- cgit v1.2.3