aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorTed Gould <ted@gould.cx>2015-02-12 16:09:13 -0600
committerTed Gould <ted@gould.cx>2015-02-12 16:09:13 -0600
commita5037dcedc828117f2a81e56c71913a5c7ef9b46 (patch)
tree088263dfd3681284edc1fe7ccae99c8fc257e55e /tests
parent5c18f8dea27c1d9df3afba0afc40fff9568bc3e5 (diff)
downloadayatana-indicator-sound-a5037dcedc828117f2a81e56c71913a5c7ef9b46.tar.gz
ayatana-indicator-sound-a5037dcedc828117f2a81e56c71913a5c7ef9b46.tar.bz2
ayatana-indicator-sound-a5037dcedc828117f2a81e56c71913a5c7ef9b46.zip
Add in ability to easily check GVariants
Diffstat (limited to 'tests')
-rw-r--r--tests/gtest-gvariant.h95
-rw-r--r--tests/notifications-test.cc6
2 files changed, 101 insertions, 0 deletions
diff --git a/tests/gtest-gvariant.h b/tests/gtest-gvariant.h
new file mode 100644
index 0000000..5a24dfa
--- /dev/null
+++ b/tests/gtest-gvariant.h
@@ -0,0 +1,95 @@
+/*
+ * Copyright © 2015 Canonical Ltd.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 3.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Authors:
+ * Ted Gould <ted@canonical.com>
+ */
+
+#include <gtest/gtest.h>
+#include <gio/gio.h>
+
+namespace GTestGVariant {
+
+testing::AssertionResult expectVariantEqual (const gchar * expectStr, const gchar * haveStr, GVariant * expect, GVariant * have)
+{
+ if (expect == nullptr && have == nullptr) {
+ auto result = testing::AssertionSuccess();
+ return result;
+ }
+
+ if (expect == nullptr || have == nullptr) {
+ gchar * havePrint;
+ if (have == nullptr) {
+ havePrint = g_strdup("(nullptr)");
+ } else {
+ havePrint = g_variant_print(have, TRUE);
+ }
+
+ auto result = testing::AssertionFailure();
+ result <<
+ " Result: " << haveStr << std::endl <<
+ " Value: " << havePrint << std::endl <<
+ " Expected: " << expectStr << std::endl;
+
+ g_free(havePrint);
+ return result;
+ }
+
+ if (g_variant_equal(expect, have)) {
+ auto result = testing::AssertionSuccess();
+ return result;
+ } else {
+ gchar * havePrint = g_variant_print(have, TRUE);
+ gchar * expectPrint = g_variant_print(expect, TRUE);
+
+ auto result = testing::AssertionFailure();
+ result <<
+ " Result: " << haveStr << std::endl <<
+ " Value: " << havePrint << std::endl <<
+ " Expected: " << expectStr << std::endl <<
+ " Expected: " << expectPrint << std::endl;
+
+ g_free(havePrint);
+ g_free(expectPrint);
+
+ return result;
+ }
+}
+
+testing::AssertionResult expectVariantEqual (const gchar * expectStr, const gchar * haveStr, std::shared_ptr<GVariant> expect, std::shared_ptr<GVariant> have)
+{
+ return expectVariantEqual(expectStr, haveStr, expect.get(), have.get());
+}
+
+testing::AssertionResult expectVariantEqual (const gchar * expectStr, const gchar * haveStr, const char * expect, std::shared_ptr<GVariant> have)
+{
+ auto expectv = std::shared_ptr<GVariant>([expect]() {
+ auto variant = g_variant_parse(nullptr, expect, nullptr, nullptr, nullptr);
+ if (variant != nullptr)
+ g_variant_ref_sink(variant);
+ return variant;
+ }(),
+ [](GVariant * variant) {
+ if (variant != nullptr)
+ g_variant_unref(variant);
+ });
+
+ return expectVariantEqual(expectStr, haveStr, expectv, have);
+}
+
+}; // ns GTestGVariant
+
+#define EXPECT_GVARIANT_EQ(expect, have) \
+ EXPECT_PRED_FORMAT2(GTestGVariant::expectVariantEqual, expect, have)
diff --git a/tests/notifications-test.cc b/tests/notifications-test.cc
index 06eac7a..1b101f5 100644
--- a/tests/notifications-test.cc
+++ b/tests/notifications-test.cc
@@ -25,6 +25,7 @@
#include <libnotify/notify.h>
#include "notifications-mock.h"
+#include "gtest-gvariant.h"
extern "C" {
#include "indicator-sound-service.h"
@@ -133,6 +134,10 @@ TEST_F(NotificationsTest, VolumeChanges) {
auto notev = notifications->getNotifications();
ASSERT_EQ(1, notev.size());
EXPECT_EQ("indicator-sound", notev[0].app_name);
+ EXPECT_EQ("Volume", notev[0].summary);
+ EXPECT_EQ(0, notev[0].actions.size());
+ EXPECT_GVARIANT_EQ("@s 'true'", notev[0].hints["x-canonical-private-synchronous"]);
+ EXPECT_GVARIANT_EQ("@i 5000", notev[0].hints["value"]);
/* Set a different volume */
notifications->clearNotifications();
@@ -140,6 +145,7 @@ TEST_F(NotificationsTest, VolumeChanges) {
loop(50);
notev = notifications->getNotifications();
ASSERT_EQ(1, notev.size());
+ EXPECT_GVARIANT_EQ("@i 6000", notev[0].hints["value"]);
/* Set the same volume */
notifications->clearNotifications();