From bef4229b70139014df071ecba3742e99639dac42 Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Mon, 17 Jun 2013 18:01:51 -0500 Subject: get test-devices building and passing again. --- tests/Makefile.am | 65 +++++----- tests/test-device.cc | 20 +-- tests/test-indicator.cc | 325 ------------------------------------------------ tests/test-service.cc | 324 +++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 369 insertions(+), 365 deletions(-) delete mode 100644 tests/test-indicator.cc create mode 100644 tests/test-service.cc (limited to 'tests') diff --git a/tests/Makefile.am b/tests/Makefile.am index d8e329e..5c7d802 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -4,56 +4,61 @@ BUILT_SOURCES = check_PROGRAMS = ### -### +### tests: stock tests on user-visible strings ### -# stock UMB tests on user-visible strings include $(srcdir)/Makefile.am.strings +### +### gtest library +### + check_LIBRARIES = libgtest.a nodist_libgtest_a_SOURCES = \ - $(GTEST_SOURCE)/gtest-all.cc \ - $(GTEST_SOURCE)/gtest_main.cc + $(GTEST_SOURCE)/src/gtest-all.cc \ + $(GTEST_SOURCE)/src/gtest_main.cc AM_CPPFLAGS = $(GTEST_CPPFLAGS) -I${top_srcdir}/src -Wall -Werror AM_CXXFLAGS = $(GTEST_CXXFLAGS) ### +### tests: indicator-power-device ### -### - -TEST_LIBS = \ - $(COVERAGE_LDFLAGS) \ - $(XORG_GTEST_LDFLAGS) \ - libgtest.a -TEST_CPPFLAGS = \ - $(AM_CPPFLAGS) \ - $(SERVICE_DEPS_CFLAGS) - -BUILT_SOURCES += gschemas.compiled -CLEANFILES += gschemas.compiled -gschemas.compiled: Makefile - @glib-compile-schemas --targetdir=$(abs_builddir) $(top_builddir)/data +TEST_LIBS = $(COVERAGE_LDFLAGS) libgtest.a -lpthread +TEST_CPPFLAGS = $(SERVICE_DEPS_CFLAGS) $(AM_CPPFLAGS) TESTS += test-device check_PROGRAMS += test-device test_device_SOURCES = test-device.cc -test_device_LDADD = $(TEST_LIBS) -test_device_CPPFLAGS = $(TEST_CPPFLAGS) +test_device_CPPFLAGS = $(TEST_CPPFLAGS) -Wall -Werror -Wextra +test_device_LDADD = \ + $(top_builddir)/src/libindicatorpower-service.a \ + $(SERVICE_DEPS_LIBS) \ + $(TEST_LIBS) + +# (FIXME: incomplete) +# +### +### tests: indicator-power-service +### +# +# build a local copy of the GSettings schemas +#BUILT_SOURCES += gschemas.compiled +#CLEANFILES += gschemas.compiled +#gschemas.compiled: Makefile +# @glib-compile-schemas --targetdir=$(abs_builddir) $(top_builddir)/data +# +#TESTS += test-service +#check_PROGRAMS += test-service +#test_service_SOURCES = test-service.cc +#test_service_LDADD = $(TEST_LIBS) +#test_service_CPPFLAGS = $(TEST_CPPFLAGS) -DSCHEMA_DIR="\"$(top_builddir)/tests/\"" +# #TESTS += test-dbus-listener #check_PROGRAMS += test-dbus-listener #test_dbus_listener_SOURCES = test-dbus-listener.cc #test_dbus_listener_LDADD = $(TEST_LIBS) #test_dbus_listener_CPPFLAGS = $(TEST_CPPFLAGS) - -TESTS += test-indicator -check_PROGRAMS += test-indicator -test_indicator_SOURCES = test-indicator.cc -test_indicator_LDADD = $(TEST_LIBS) -test_indicator_CPPFLAGS = $(TEST_CPPFLAGS) -DSCHEMA_DIR="\"$(top_builddir)/tests/\"" - -### -### -### +# diff --git a/tests/test-device.cc b/tests/test-device.cc index 9c48699..987b201 100644 --- a/tests/test-device.cc +++ b/tests/test-device.cc @@ -30,12 +30,12 @@ class DeviceTest : public ::testing::Test int log_count_ipower_actual; - static void log_count_func (const gchar *log_domain, - GLogLevelFlags log_level, - const gchar *message, - gpointer user_data) + static void log_count_func (const gchar * log_domain G_GNUC_UNUSED, + GLogLevelFlags log_level G_GNUC_UNUSED, + const gchar * message G_GNUC_UNUSED, + gpointer gself) { - reinterpret_cast(user_data)->log_count_ipower_actual++; + reinterpret_cast(gself)->log_count_ipower_actual++; } protected: @@ -543,7 +543,7 @@ TEST_F(DeviceTest, Labels) device will take longest to charge (and optionally how long it will take). */ TEST_F(DeviceTest, ChoosePrimary) { - GSList * device_list; + GList * device_list; IndicatorPowerDevice * a; IndicatorPowerDevice * b; @@ -581,8 +581,8 @@ TEST_F(DeviceTest, ChoosePrimary) }; device_list = NULL; - device_list = g_slist_append (device_list, a); - device_list = g_slist_append (device_list, b); + device_list = g_list_append (device_list, a); + device_list = g_list_append (device_list, b); for (int i=0, n=G_N_ELEMENTS(tests); i - -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 "dbus-listener.h" -#include "device.h" -#include "indicator-power.h" - -/*** -**** -***/ - -namespace -{ - void quiet_log_func (const gchar *log_domain, - GLogLevelFlags log_level, - const gchar *message, - gpointer user_data) - { - // instantiating an indicator w/o a window causes lots - // of glib/gtk warnings... silence them so that they don't - // obscure any other warnings generated by the tests. - } - - void ensure_glib_initialized () - { - static bool initialized = false; - - if (G_UNLIKELY(!initialized)) - { - initialized = true; - g_log_set_handler ("Gtk", (GLogLevelFlags)(G_LOG_LEVEL_CRITICAL|G_LOG_LEVEL_WARNING), quiet_log_func, NULL); - g_log_set_handler ("GLib-GObject", (GLogLevelFlags)(G_LOG_LEVEL_CRITICAL|G_LOG_LEVEL_WARNING), quiet_log_func, NULL); - } - } -} - -/*** -**** -***/ - -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); - - ac_device = indicator_power_device_new ( - "/org/freedesktop/UPower/devices/line_power_AC", - UP_DEVICE_KIND_LINE_POWER, - 0.0, UP_DEVICE_STATE_UNKNOWN, 0); - - battery_device = indicator_power_device_new ( - "/org/freedesktop/UPower/devices/battery_BAT0", - UP_DEVICE_KIND_BATTERY, - 52.871712, UP_DEVICE_STATE_DISCHARGING, 8834); - } - - virtual void TearDown() - { - ASSERT_EQ (1, G_OBJECT(battery_device)->ref_count); - ASSERT_EQ (1, G_OBJECT(ac_device)->ref_count); - 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; - } -}; - -/*** -**** -***/ - -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); -} - -TEST_F(IndicatorTest, SetDevices) -{ - GSList * devices; - IndicatorPower * power = INDICATOR_POWER(g_object_new (INDICATOR_POWER_TYPE, NULL)); - - 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, - 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, devices); - 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, - INDICATOR_POWER_DEVICE_PERCENTAGE, 50.0, - INDICATOR_POWER_DEVICE_TIME, guint64(60*60), - NULL); - 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 - 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, 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, 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, devices); - ASSERT_STREQ (GetAccessibleDesc(power), "Battery (Unknown time left (100%))"); - - // 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, devices); - ASSERT_STREQ (GetAccessibleDesc(power), "Battery (50%)"); - - // 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, 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, - 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, 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, 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, - 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, devices); - ASSERT_STREQ (GetAccessibleDesc(power), "Battery (charged)"); - - // cleanup - g_slist_free (devices); - 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, - 53, UP_DEVICE_STATE_CHARGING, 0); - - 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, 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, - 0, UP_DEVICE_STATE_UNKNOWN, 0)); - devices = g_slist_append (devices, indicator_power_device_new ( - "/org/freedesktop/UPower/devices/ups", UP_DEVICE_KIND_UPS, - 0, UP_DEVICE_STATE_UNKNOWN, 0)); - devices = g_slist_append (devices, indicator_power_device_new ( - "/org/freedesktop/UPower/devices/keyboard", UP_DEVICE_KIND_KEYBOARD, - 0, UP_DEVICE_STATE_UNKNOWN, 0)); - devices = g_slist_append (devices, indicator_power_device_new ( - "/org/freedesktop/UPower/devices/pda", UP_DEVICE_KIND_PDA, - 0, UP_DEVICE_STATE_UNKNOWN, 0)); - devices = g_slist_append (devices, indicator_power_device_new ( - "/org/freedesktop/UPower/devices/phone", UP_DEVICE_KIND_PHONE, - 0, UP_DEVICE_STATE_UNKNOWN, 0)); - devices = g_slist_append (devices, indicator_power_device_new ( - "/org/freedesktop/UPower/devices/monitor", UP_DEVICE_KIND_MONITOR, - 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, - 0, UP_DEVICE_STATE_UNKNOWN, 0)); - devices = g_slist_append (devices, indicator_power_device_new ( - "/org/freedesktop/UPower/devices/tablet", UP_DEVICE_KIND_TABLET, - 0, UP_DEVICE_STATE_UNKNOWN, 0)); - devices = g_slist_append (devices, indicator_power_device_new ( - "/org/freedesktop/UPower/devices/computer", UP_DEVICE_KIND_COMPUTER, - 0, UP_DEVICE_STATE_UNKNOWN, 0)); - devices = g_slist_append (devices, indicator_power_device_new ( - "/org/freedesktop/UPower/devices/unknown", UP_DEVICE_KIND_UNKNOWN, - 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); -} diff --git a/tests/test-service.cc b/tests/test-service.cc new file mode 100644 index 0000000..cae3021 --- /dev/null +++ b/tests/test-service.cc @@ -0,0 +1,324 @@ +/* + * Copyright 2013 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 "service.h" + +/*** +**** +***/ + +namespace +{ + void quiet_log_func (const gchar *log_domain, + GLogLevelFlags log_level, + const gchar *message, + gpointer user_data) + { + // instantiating an indicator w/o a window causes lots + // of glib/gtk warnings... silence them so that they don't + // obscure any other warnings generated by the tests. + } + + void ensure_glib_initialized () + { + static bool initialized = false; + + if (G_UNLIKELY(!initialized)) + { + initialized = true; + g_log_set_handler ("Gtk", (GLogLevelFlags)(G_LOG_LEVEL_CRITICAL|G_LOG_LEVEL_WARNING), quiet_log_func, NULL); + g_log_set_handler ("GLib-GObject", (GLogLevelFlags)(G_LOG_LEVEL_CRITICAL|G_LOG_LEVEL_WARNING), quiet_log_func, NULL); + } + } +} + +/*** +**** +***/ + +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); + + ac_device = indicator_power_device_new ( + "/org/freedesktop/UPower/devices/line_power_AC", + UP_DEVICE_KIND_LINE_POWER, + 0.0, UP_DEVICE_STATE_UNKNOWN, 0); + + battery_device = indicator_power_device_new ( + "/org/freedesktop/UPower/devices/battery_BAT0", + UP_DEVICE_KIND_BATTERY, + 52.871712, UP_DEVICE_STATE_DISCHARGING, 8834); + } + + virtual void TearDown() + { + ASSERT_EQ (1, G_OBJECT(battery_device)->ref_count); + ASSERT_EQ (1, G_OBJECT(ac_device)->ref_count); + 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; + } +}; + +/*** +**** +***/ + +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); +} + +TEST_F(IndicatorTest, SetDevices) +{ + GSList * devices; + IndicatorPower * power = INDICATOR_POWER(g_object_new (INDICATOR_POWER_TYPE, NULL)); + + 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, + 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, devices); + 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, + INDICATOR_POWER_DEVICE_PERCENTAGE, 50.0, + INDICATOR_POWER_DEVICE_TIME, guint64(60*60), + NULL); + 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 + 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, 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, 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, devices); + ASSERT_STREQ (GetAccessibleDesc(power), "Battery (Unknown time left (100%))"); + + // 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, devices); + ASSERT_STREQ (GetAccessibleDesc(power), "Battery (50%)"); + + // 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, 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, + 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, 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, 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, + 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, devices); + ASSERT_STREQ (GetAccessibleDesc(power), "Battery (charged)"); + + // cleanup + g_slist_free (devices); + 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, + 53, UP_DEVICE_STATE_CHARGING, 0); + + 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, 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, + 0, UP_DEVICE_STATE_UNKNOWN, 0)); + devices = g_slist_append (devices, indicator_power_device_new ( + "/org/freedesktop/UPower/devices/ups", UP_DEVICE_KIND_UPS, + 0, UP_DEVICE_STATE_UNKNOWN, 0)); + devices = g_slist_append (devices, indicator_power_device_new ( + "/org/freedesktop/UPower/devices/keyboard", UP_DEVICE_KIND_KEYBOARD, + 0, UP_DEVICE_STATE_UNKNOWN, 0)); + devices = g_slist_append (devices, indicator_power_device_new ( + "/org/freedesktop/UPower/devices/pda", UP_DEVICE_KIND_PDA, + 0, UP_DEVICE_STATE_UNKNOWN, 0)); + devices = g_slist_append (devices, indicator_power_device_new ( + "/org/freedesktop/UPower/devices/phone", UP_DEVICE_KIND_PHONE, + 0, UP_DEVICE_STATE_UNKNOWN, 0)); + devices = g_slist_append (devices, indicator_power_device_new ( + "/org/freedesktop/UPower/devices/monitor", UP_DEVICE_KIND_MONITOR, + 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, + 0, UP_DEVICE_STATE_UNKNOWN, 0)); + devices = g_slist_append (devices, indicator_power_device_new ( + "/org/freedesktop/UPower/devices/tablet", UP_DEVICE_KIND_TABLET, + 0, UP_DEVICE_STATE_UNKNOWN, 0)); + devices = g_slist_append (devices, indicator_power_device_new ( + "/org/freedesktop/UPower/devices/computer", UP_DEVICE_KIND_COMPUTER, + 0, UP_DEVICE_STATE_UNKNOWN, 0)); + devices = g_slist_append (devices, indicator_power_device_new ( + "/org/freedesktop/UPower/devices/unknown", UP_DEVICE_KIND_UNKNOWN, + 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