From a5037dcedc828117f2a81e56c71913a5c7ef9b46 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 12 Feb 2015 16:09:13 -0600 Subject: Add in ability to easily check GVariants --- tests/gtest-gvariant.h | 95 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 tests/gtest-gvariant.h (limited to 'tests/gtest-gvariant.h') 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 . + * + * Authors: + * Ted Gould + */ + +#include +#include + +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 expect, std::shared_ptr have) +{ + return expectVariantEqual(expectStr, haveStr, expect.get(), have.get()); +} + +testing::AssertionResult expectVariantEqual (const gchar * expectStr, const gchar * haveStr, const char * expect, std::shared_ptr have) +{ + auto expectv = std::shared_ptr([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) -- cgit v1.2.3