diff options
author | Ted Gould <ted@gould.cx> | 2015-02-12 16:09:13 -0600 |
---|---|---|
committer | Ted Gould <ted@gould.cx> | 2015-02-12 16:09:13 -0600 |
commit | a5037dcedc828117f2a81e56c71913a5c7ef9b46 (patch) | |
tree | 088263dfd3681284edc1fe7ccae99c8fc257e55e /tests/gtest-gvariant.h | |
parent | 5c18f8dea27c1d9df3afba0afc40fff9568bc3e5 (diff) | |
download | ayatana-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/gtest-gvariant.h')
-rw-r--r-- | tests/gtest-gvariant.h | 95 |
1 files changed, 95 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) |