diff options
Diffstat (limited to 'Source/WebKit2/UIProcess/API/gtk/tests/TestMain.h')
-rw-r--r-- | Source/WebKit2/UIProcess/API/gtk/tests/TestMain.h | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/Source/WebKit2/UIProcess/API/gtk/tests/TestMain.h b/Source/WebKit2/UIProcess/API/gtk/tests/TestMain.h new file mode 100644 index 000000000..631096a76 --- /dev/null +++ b/Source/WebKit2/UIProcess/API/gtk/tests/TestMain.h @@ -0,0 +1,66 @@ +/* + * Copyright (C) 2011 Igalia S.L. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + +#ifndef TestMain_h +#define TestMain_h + +#include <glib-object.h> +#include <JavaScriptCore/GOwnPtr.h> +#include <JavaScriptCore/HashSet.h> + +#define MAKE_GLIB_TEST_FIXTURE(ClassName) \ + static void setUp(ClassName* fixture, gconstpointer data) \ + { \ + new (fixture) ClassName; \ + } \ + static void tearDown(ClassName* fixture, gconstpointer data) \ + { \ + fixture->~ClassName(); \ + } \ + static void add(const char* suiteName, const char* testName, void (*testFunc)(ClassName*, const void*)) \ + { \ + GOwnPtr<gchar> testPath(g_strdup_printf("/webkit2/%s/%s", suiteName, testName)); \ + g_test_add(testPath.get(), ClassName, 0, ClassName::setUp, testFunc, ClassName::tearDown); \ + } + +class Test +{ +public: + MAKE_GLIB_TEST_FIXTURE(Test); + + ~Test() + { + g_assert(m_watchedObjects.isEmpty()); + } + + static void objectFinalized(Test* test, GObject* finalizedObject) + { + test->m_watchedObjects.remove(finalizedObject); + } + + void assertObjectIsDeletedWhenTestFinishes(GObject* object) + { + m_watchedObjects.add(object); + g_object_weak_ref(object, reinterpret_cast<GWeakNotify>(objectFinalized), this); + } + + HashSet<GObject*> m_watchedObjects; +}; + +#endif // TestMain_h |