hb-test.h revision dfec67f958482e5c3bb01e06b08694cd4ded6f66
12409d5f8d7dd8b535ce5ea29e933f7db27d33793Behdad Esfahbod/* 22409d5f8d7dd8b535ce5ea29e933f7db27d33793Behdad Esfahbod * Copyright © 2011 Google, Inc. 32409d5f8d7dd8b535ce5ea29e933f7db27d33793Behdad Esfahbod * 42409d5f8d7dd8b535ce5ea29e933f7db27d33793Behdad Esfahbod * This is part of HarfBuzz, a text shaping library. 52409d5f8d7dd8b535ce5ea29e933f7db27d33793Behdad Esfahbod * 62409d5f8d7dd8b535ce5ea29e933f7db27d33793Behdad Esfahbod * Permission is hereby granted, without written agreement and without 72409d5f8d7dd8b535ce5ea29e933f7db27d33793Behdad Esfahbod * license or royalty fees, to use, copy, modify, and distribute this 82409d5f8d7dd8b535ce5ea29e933f7db27d33793Behdad Esfahbod * software and its documentation for any purpose, provided that the 92409d5f8d7dd8b535ce5ea29e933f7db27d33793Behdad Esfahbod * above copyright notice and the following two paragraphs appear in 102409d5f8d7dd8b535ce5ea29e933f7db27d33793Behdad Esfahbod * all copies of this software. 112409d5f8d7dd8b535ce5ea29e933f7db27d33793Behdad Esfahbod * 122409d5f8d7dd8b535ce5ea29e933f7db27d33793Behdad Esfahbod * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR 132409d5f8d7dd8b535ce5ea29e933f7db27d33793Behdad Esfahbod * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES 142409d5f8d7dd8b535ce5ea29e933f7db27d33793Behdad Esfahbod * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN 152409d5f8d7dd8b535ce5ea29e933f7db27d33793Behdad Esfahbod * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH 162409d5f8d7dd8b535ce5ea29e933f7db27d33793Behdad Esfahbod * DAMAGE. 179faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod * 189faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, 199faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 209faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS 219faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO 229faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. 239faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod * 249faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod * Google Author(s): Behdad Esfahbod 259faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod */ 269faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod 279faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod#ifndef HB_TEST_H 289faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod#define HB_TEST_H 299faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod 309faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod#include <hb-glib.h> 319faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod 329faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod#include <stdlib.h> 33aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod#include <string.h> 349faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod 359faa980067f802f712c2adf8263152ed40c98088Behdad EsfahbodHB_BEGIN_DECLS 369faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod 379faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod/* Just in case */ 389faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod#undef G_DISABLE_ASSERT 399faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod 409faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod 41aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod/* Misc */ 42aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod 43aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod/* This is too ugly to be public API, but quite handy. */ 44aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod#define HB_TAG_CHAR4(s) (HB_TAG(((const char *) s)[0], \ 45aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod ((const char *) s)[1], \ 46aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod ((const char *) s)[2], \ 47aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod ((const char *) s)[3])) 48aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod 49aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod 50aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod/* Helpers */ 51aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod 52aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbodstatic inline void 53aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbodhb_test_init (int *argc, char ***argv) 54aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod{ 55aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod g_test_init (argc, argv, NULL); 56aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod} 57aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod 58aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbodstatic inline int 59aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbodhb_test_run (void) 60aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod{ 61aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod return g_test_run (); 62aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod} 63aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod 64aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod 659faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod/* Bugzilla helpers */ 669faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod 679faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbodstatic inline void 689faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbodhb_test_bug (const char *uri_base, unsigned int number) 699faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod{ 709faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod char *s = g_strdup_printf ("%u", number); 719faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod 729faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod g_test_bug_base (uri_base); 739faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod g_test_bug (s); 749faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod 759faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod g_free (s); 769faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod} 779faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod 789faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbodstatic inline void 799faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbodhb_test_bug_freedesktop (unsigned int number) 809faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod{ 819faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod hb_test_bug ("http://bugs.freedesktop.org/", number); 829faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod} 839faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod 849faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbodstatic inline void 859faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbodhb_test_bug_gnome (unsigned int number) 869faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod{ 879faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod hb_test_bug ("http://bugzilla.gnome.org/", number); 889faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod} 899faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod 909faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbodstatic inline void 919faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbodhb_test_bug_mozilla (unsigned int number) 929faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod{ 939faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod hb_test_bug ("http://bugzilla.mozilla.org/", number); 949faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod} 959faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod 969faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbodstatic inline void 979faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbodhb_test_bug_redhat (unsigned int number) 989faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod{ 999faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod hb_test_bug ("http://bugzilla.redhat.com/", number); 1009faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod} 1019faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod 102db60c96f20426111ffa71e9802ef6e248f8b28d0Behdad Esfahbod 103aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod/* Wrap glib test functions to simplify. Should have been in glib already. */ 104aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod 105aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod/* Drops the "test_" prefix and converts '_' to '/'. 106aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod * Essentially builds test path from function name. */ 107aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbodstatic inline char * 108aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbodhb_test_normalize_path (const char *path) 109aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod{ 110aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod char *s, *p; 111aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod 112aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod g_assert (0 == strncmp (path, "test_", 5)); 113aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod path += 4; 114aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod 115aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod s = g_strdup (path); 116aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod for (p = s; *p; p++) 117aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod if (*p == '_') 118aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod *p = '/'; 119aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod 120aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod return s; 121aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod} 122aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod 123aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod 124aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbodstatic inline void 125aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbodhb_test_add_func (const char *test_path, 126aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod GTestFunc test_func) 127aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod{ 128aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod char *normal_path = hb_test_normalize_path (test_path); 129aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod g_test_add_func (normal_path, test_func); 130aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod g_free (normal_path); 131aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod} 132aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod#define hb_test_add(Func) hb_test_add_func (#Func, Func) 133aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod 134aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbodstatic inline void 135aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbodhb_test_add_func_flavor (const char *test_path, 136aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod const char *flavor, 137aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod GTestFunc test_func) 138aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod{ 139aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod char *path = g_strdup_printf ("%s/%s", test_path, flavor); 140aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod hb_test_add_func (path, test_func); 141aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod g_free (path); 142aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod} 143dfec67f958482e5c3bb01e06b08694cd4ded6f66Behdad Esfahbod#define hb_test_add_flavor(Flavor, Func) hb_test_add_func (#Func, Flavor, Func) 144dfec67f958482e5c3bb01e06b08694cd4ded6f66Behdad Esfahbod 145dfec67f958482e5c3bb01e06b08694cd4ded6f66Behdad Esfahbodstatic inline void 146dfec67f958482e5c3bb01e06b08694cd4ded6f66Behdad Esfahbodhb_test_add_data_func (const char *test_path, 147dfec67f958482e5c3bb01e06b08694cd4ded6f66Behdad Esfahbod gconstpointer test_data, 148dfec67f958482e5c3bb01e06b08694cd4ded6f66Behdad Esfahbod GTestDataFunc test_func) 149dfec67f958482e5c3bb01e06b08694cd4ded6f66Behdad Esfahbod{ 150dfec67f958482e5c3bb01e06b08694cd4ded6f66Behdad Esfahbod char *normal_path = hb_test_normalize_path (test_path); 151dfec67f958482e5c3bb01e06b08694cd4ded6f66Behdad Esfahbod g_test_add_data_func (normal_path, test_data, test_func); 152dfec67f958482e5c3bb01e06b08694cd4ded6f66Behdad Esfahbod g_free (normal_path); 153dfec67f958482e5c3bb01e06b08694cd4ded6f66Behdad Esfahbod} 154dfec67f958482e5c3bb01e06b08694cd4ded6f66Behdad Esfahbod#define hb_test_add_data(Func, UserData) hb_test_add_data_func (#Func, UserData, Func) 155dfec67f958482e5c3bb01e06b08694cd4ded6f66Behdad Esfahbod 156dfec67f958482e5c3bb01e06b08694cd4ded6f66Behdad Esfahbodstatic inline void 157dfec67f958482e5c3bb01e06b08694cd4ded6f66Behdad Esfahbodhb_test_add_data_func_flavor (const char *test_path, 158dfec67f958482e5c3bb01e06b08694cd4ded6f66Behdad Esfahbod const char *flavor, 159dfec67f958482e5c3bb01e06b08694cd4ded6f66Behdad Esfahbod gconstpointer test_data, 160dfec67f958482e5c3bb01e06b08694cd4ded6f66Behdad Esfahbod GTestDataFunc test_func) 161dfec67f958482e5c3bb01e06b08694cd4ded6f66Behdad Esfahbod{ 162dfec67f958482e5c3bb01e06b08694cd4ded6f66Behdad Esfahbod char *path = g_strdup_printf ("%s/%s", test_path, flavor); 163dfec67f958482e5c3bb01e06b08694cd4ded6f66Behdad Esfahbod hb_test_add_data_func (path, test_data, test_func); 164dfec67f958482e5c3bb01e06b08694cd4ded6f66Behdad Esfahbod g_free (path); 165dfec67f958482e5c3bb01e06b08694cd4ded6f66Behdad Esfahbod} 166dfec67f958482e5c3bb01e06b08694cd4ded6f66Behdad Esfahbod#define hb_test_add_data_flavor(UserData, Flavor, Func) hb_test_add_data_func_flavor (#Func, Flavor, UserData, Func) 167aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod 168aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod 169aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbodstatic inline void 170aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbodhb_test_add_vtable (const char *test_path, 171aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod gsize data_size, 172aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod gconstpointer test_data, 173aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod GTestFixtureFunc data_setup, 174aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod GTestFixtureFunc data_test, 175aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod GTestFixtureFunc data_teardown) 176aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod{ 177aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod char *normal_path = hb_test_normalize_path (test_path); 178aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod g_test_add_vtable (normal_path, data_size, test_data, data_setup, data_test, data_teardown); 179aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod g_free (normal_path); 180aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod} 181aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod#define hb_test_add_fixture(FixturePrefix, UserData, Func) \ 182aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad EsfahbodG_STMT_START { \ 183aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod typedef G_PASTE (FixturePrefix, _t) Fixture; \ 184aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod void (*add_vtable) (const char*, gsize, gconstpointer, \ 185aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod void (*) (Fixture*, gconstpointer), \ 186aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod void (*) (Fixture*, gconstpointer), \ 187aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod void (*) (Fixture*, gconstpointer)) \ 188aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod = (void (*) (const gchar *, gsize, gconstpointer, \ 189aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod void (*) (Fixture*, gconstpointer), \ 190aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod void (*) (Fixture*, gconstpointer), \ 191aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod void (*) (Fixture*, gconstpointer))) hb_test_add_vtable; \ 192aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod add_vtable (#Func, sizeof (G_PASTE (FixturePrefix, _t)), UserData, \ 193aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod G_PASTE (FixturePrefix, _init), Func, G_PASTE (FixturePrefix, _finish)); \ 194aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod} G_STMT_END 195aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod 196aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbodstatic inline void 197aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbodhb_test_add_vtable_flavor (const char *test_path, 198aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod const char *flavor, 199aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod gsize data_size, 200aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod gconstpointer test_data, 201aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod GTestFixtureFunc data_setup, 202aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod GTestFixtureFunc data_test, 203aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod GTestFixtureFunc data_teardown) 204aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod{ 205aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod char *path = g_strdup_printf ("%s/%s", test_path, flavor); 206aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod hb_test_add_vtable (path, data_size, test_data, data_setup, data_test, data_teardown); 207aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod g_free (path); 208aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod} 209aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod#define hb_test_add_fixture_flavor(FixturePrefix, UserData, Flavor, Func) \ 210aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad EsfahbodG_STMT_START { \ 211aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod typedef G_PASTE (FixturePrefix, _t) Fixture; \ 212aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod void (*add_vtable) (const char*, const char *, gsize, gconstpointer, \ 213aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod void (*) (Fixture*, gconstpointer), \ 214aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod void (*) (Fixture*, gconstpointer), \ 215aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod void (*) (Fixture*, gconstpointer)) \ 216aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod = (void (*) (const gchar *, const char *, gsize, gconstpointer, \ 217aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod void (*) (Fixture*, gconstpointer), \ 218aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod void (*) (Fixture*, gconstpointer), \ 219aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod void (*) (Fixture*, gconstpointer))) hb_test_add_vtable_flavor; \ 220aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod add_vtable (#Func, Flavor, sizeof (G_PASTE (FixturePrefix, _t)), UserData, \ 221aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod G_PASTE (FixturePrefix, _init), Func, G_PASTE (FixturePrefix, _finish)); \ 222aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod} G_STMT_END 223aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod 224db60c96f20426111ffa71e9802ef6e248f8b28d0Behdad Esfahbod 2259faa980067f802f712c2adf8263152ed40c98088Behdad EsfahbodHB_END_DECLS 2269faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod 2279faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod#endif /* HB_TEST_H */ 228