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 3060833efaf1310c3f18e150b61daaeb0074ae3d91Behdad Esfahbod#include <config.h> 3160833efaf1310c3f18e150b61daaeb0074ae3d91Behdad Esfahbod 329faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod#include <hb-glib.h> 339faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod 349faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod#include <stdlib.h> 35aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod#include <string.h> 36378d279bbf692195c4654e312dae854ab3be04cfBehdad Esfahbod#include <stdio.h> 379faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod 389faa980067f802f712c2adf8263152ed40c98088Behdad EsfahbodHB_BEGIN_DECLS 399faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod 409faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod/* Just in case */ 419faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod#undef G_DISABLE_ASSERT 429faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod 439faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod 44aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod/* Misc */ 45aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod 46aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod/* This is too ugly to be public API, but quite handy. */ 47aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod#define HB_TAG_CHAR4(s) (HB_TAG(((const char *) s)[0], \ 48aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod ((const char *) s)[1], \ 49aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod ((const char *) s)[2], \ 50aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod ((const char *) s)[3])) 51aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod 52aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod 53a346e923a99f920bbebc25b335db51fdfb1429eaBehdad Esfahbodstatic inline const char * 54a346e923a99f920bbebc25b335db51fdfb1429eaBehdad Esfahbodsrcdir (void) 55a346e923a99f920bbebc25b335db51fdfb1429eaBehdad Esfahbod{ 56a346e923a99f920bbebc25b335db51fdfb1429eaBehdad Esfahbod static const char *s; 57a346e923a99f920bbebc25b335db51fdfb1429eaBehdad Esfahbod 58a346e923a99f920bbebc25b335db51fdfb1429eaBehdad Esfahbod if (!s) { 59a346e923a99f920bbebc25b335db51fdfb1429eaBehdad Esfahbod s = getenv ("srcdir"); 60a346e923a99f920bbebc25b335db51fdfb1429eaBehdad Esfahbod 61a346e923a99f920bbebc25b335db51fdfb1429eaBehdad Esfahbod#ifdef SRCDIR 62a346e923a99f920bbebc25b335db51fdfb1429eaBehdad Esfahbod if (!s || !s[0]) 63a346e923a99f920bbebc25b335db51fdfb1429eaBehdad Esfahbod s = SRCDIR; 64a346e923a99f920bbebc25b335db51fdfb1429eaBehdad Esfahbod#endif 65a346e923a99f920bbebc25b335db51fdfb1429eaBehdad Esfahbod 66a346e923a99f920bbebc25b335db51fdfb1429eaBehdad Esfahbod if (!s || !s[0]) 67a346e923a99f920bbebc25b335db51fdfb1429eaBehdad Esfahbod s = "."; 68a346e923a99f920bbebc25b335db51fdfb1429eaBehdad Esfahbod } 69a346e923a99f920bbebc25b335db51fdfb1429eaBehdad Esfahbod 70a346e923a99f920bbebc25b335db51fdfb1429eaBehdad Esfahbod return s; 71a346e923a99f920bbebc25b335db51fdfb1429eaBehdad Esfahbod} 72a346e923a99f920bbebc25b335db51fdfb1429eaBehdad Esfahbod 73a346e923a99f920bbebc25b335db51fdfb1429eaBehdad Esfahbod 74aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod/* Helpers */ 75aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod 76aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbodstatic inline void 77aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbodhb_test_init (int *argc, char ***argv) 78aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod{ 79aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod g_test_init (argc, argv, NULL); 80aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod} 81aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod 82aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbodstatic inline int 83aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbodhb_test_run (void) 84aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod{ 85aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod return g_test_run (); 86aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod} 87aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod 88aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod 899faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod/* Bugzilla helpers */ 909faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod 919faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbodstatic inline void 929faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbodhb_test_bug (const char *uri_base, unsigned int number) 939faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod{ 949faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod char *s = g_strdup_printf ("%u", number); 959faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod 969faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod g_test_bug_base (uri_base); 979faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod g_test_bug (s); 989faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod 999faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod g_free (s); 1009faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod} 1019faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod 1029faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbodstatic inline void 1039faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbodhb_test_bug_freedesktop (unsigned int number) 1049faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod{ 1059faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod hb_test_bug ("http://bugs.freedesktop.org/", number); 1069faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod} 1079faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod 1089faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbodstatic inline void 1099faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbodhb_test_bug_gnome (unsigned int number) 1109faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod{ 1119faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod hb_test_bug ("http://bugzilla.gnome.org/", number); 1129faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod} 1139faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod 1149faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbodstatic inline void 1159faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbodhb_test_bug_mozilla (unsigned int number) 1169faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod{ 1179faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod hb_test_bug ("http://bugzilla.mozilla.org/", number); 1189faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod} 1199faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod 1209faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbodstatic inline void 1219faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbodhb_test_bug_redhat (unsigned int number) 1229faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod{ 1239faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod hb_test_bug ("http://bugzilla.redhat.com/", number); 1249faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod} 1259faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod 126db60c96f20426111ffa71e9802ef6e248f8b28d0Behdad Esfahbod 127aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod/* Wrap glib test functions to simplify. Should have been in glib already. */ 128aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod 129aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod/* Drops the "test_" prefix and converts '_' to '/'. 130aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod * Essentially builds test path from function name. */ 131aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbodstatic inline char * 132aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbodhb_test_normalize_path (const char *path) 133aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod{ 134aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod char *s, *p; 135aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod 136aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod g_assert (0 == strncmp (path, "test_", 5)); 137aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod path += 4; 138aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod 139aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod s = g_strdup (path); 140aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod for (p = s; *p; p++) 141aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod if (*p == '_') 142aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod *p = '/'; 143aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod 144aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod return s; 145aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod} 146aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod 147aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod 148e6a5b88c01420366a70e0c9ae1775fb3c930cb8bBehdad Esfahbod#if GLIB_CHECK_VERSION(2,25,12) 149e6a5b88c01420366a70e0c9ae1775fb3c930cb8bBehdad Esfahbodtypedef GTestFunc hb_test_func_t; 150e6a5b88c01420366a70e0c9ae1775fb3c930cb8bBehdad Esfahbodtypedef GTestDataFunc hb_test_data_func_t; 151e6a5b88c01420366a70e0c9ae1775fb3c930cb8bBehdad Esfahbodtypedef GTestFixtureFunc hb_test_fixture_func_t; 152e6a5b88c01420366a70e0c9ae1775fb3c930cb8bBehdad Esfahbod#else 153e6a5b88c01420366a70e0c9ae1775fb3c930cb8bBehdad Esfahbodtypedef void (*hb_test_func_t) (void); 154e6a5b88c01420366a70e0c9ae1775fb3c930cb8bBehdad Esfahbodtypedef void (*hb_test_data_func_t) (gconstpointer user_data); 155708403e7f3e4a5cf9b0d2bd764fb74b148af7adbBehdad Esfahbodtypedef void (*hb_test_fixture_func_t) (void); 156e6a5b88c01420366a70e0c9ae1775fb3c930cb8bBehdad Esfahbod#endif 157e6a5b88c01420366a70e0c9ae1775fb3c930cb8bBehdad Esfahbod 15823db8d5c92c96a34c716b68e1aa6819c5a20477aBehdad Esfahbod#if !GLIB_CHECK_VERSION(2,30,0) 15923db8d5c92c96a34c716b68e1aa6819c5a20477aBehdad Esfahbod#define g_test_fail() g_error("Test failed") 16023db8d5c92c96a34c716b68e1aa6819c5a20477aBehdad Esfahbod#endif 16123db8d5c92c96a34c716b68e1aa6819c5a20477aBehdad Esfahbod 162aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbodstatic inline void 163aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbodhb_test_add_func (const char *test_path, 164e6a5b88c01420366a70e0c9ae1775fb3c930cb8bBehdad Esfahbod hb_test_func_t test_func) 165aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod{ 166aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod char *normal_path = hb_test_normalize_path (test_path); 167aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod g_test_add_func (normal_path, test_func); 168aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod g_free (normal_path); 169aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod} 170aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod#define hb_test_add(Func) hb_test_add_func (#Func, Func) 171aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod 172aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbodstatic inline void 173aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbodhb_test_add_func_flavor (const char *test_path, 174aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod const char *flavor, 175e6a5b88c01420366a70e0c9ae1775fb3c930cb8bBehdad Esfahbod hb_test_func_t test_func) 176aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod{ 177aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod char *path = g_strdup_printf ("%s/%s", test_path, flavor); 178aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod hb_test_add_func (path, test_func); 179aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod g_free (path); 180aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod} 181dfec67f958482e5c3bb01e06b08694cd4ded6f66Behdad Esfahbod#define hb_test_add_flavor(Flavor, Func) hb_test_add_func (#Func, Flavor, Func) 182dfec67f958482e5c3bb01e06b08694cd4ded6f66Behdad Esfahbod 183dfec67f958482e5c3bb01e06b08694cd4ded6f66Behdad Esfahbodstatic inline void 184e6a5b88c01420366a70e0c9ae1775fb3c930cb8bBehdad Esfahbodhb_test_add_data_func (const char *test_path, 185e6a5b88c01420366a70e0c9ae1775fb3c930cb8bBehdad Esfahbod gconstpointer test_data, 186e6a5b88c01420366a70e0c9ae1775fb3c930cb8bBehdad Esfahbod hb_test_data_func_t test_func) 187dfec67f958482e5c3bb01e06b08694cd4ded6f66Behdad Esfahbod{ 188dfec67f958482e5c3bb01e06b08694cd4ded6f66Behdad Esfahbod char *normal_path = hb_test_normalize_path (test_path); 189dfec67f958482e5c3bb01e06b08694cd4ded6f66Behdad Esfahbod g_test_add_data_func (normal_path, test_data, test_func); 190dfec67f958482e5c3bb01e06b08694cd4ded6f66Behdad Esfahbod g_free (normal_path); 191dfec67f958482e5c3bb01e06b08694cd4ded6f66Behdad Esfahbod} 19260833efaf1310c3f18e150b61daaeb0074ae3d91Behdad Esfahbod#define hb_test_add_data(UserData, Func) hb_test_add_data_func (#Func, UserData, Func) 193dfec67f958482e5c3bb01e06b08694cd4ded6f66Behdad Esfahbod 194dfec67f958482e5c3bb01e06b08694cd4ded6f66Behdad Esfahbodstatic inline void 195e6a5b88c01420366a70e0c9ae1775fb3c930cb8bBehdad Esfahbodhb_test_add_data_func_flavor (const char *test_path, 196e6a5b88c01420366a70e0c9ae1775fb3c930cb8bBehdad Esfahbod const char *flavor, 197e6a5b88c01420366a70e0c9ae1775fb3c930cb8bBehdad Esfahbod gconstpointer test_data, 198e6a5b88c01420366a70e0c9ae1775fb3c930cb8bBehdad Esfahbod hb_test_data_func_t test_func) 199dfec67f958482e5c3bb01e06b08694cd4ded6f66Behdad Esfahbod{ 200dfec67f958482e5c3bb01e06b08694cd4ded6f66Behdad Esfahbod char *path = g_strdup_printf ("%s/%s", test_path, flavor); 201dfec67f958482e5c3bb01e06b08694cd4ded6f66Behdad Esfahbod hb_test_add_data_func (path, test_data, test_func); 202dfec67f958482e5c3bb01e06b08694cd4ded6f66Behdad Esfahbod g_free (path); 203dfec67f958482e5c3bb01e06b08694cd4ded6f66Behdad Esfahbod} 204dfec67f958482e5c3bb01e06b08694cd4ded6f66Behdad Esfahbod#define hb_test_add_data_flavor(UserData, Flavor, Func) hb_test_add_data_func_flavor (#Func, Flavor, UserData, Func) 205aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod 206aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod 207aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbodstatic inline void 208e6a5b88c01420366a70e0c9ae1775fb3c930cb8bBehdad Esfahbodhb_test_add_vtable (const char *test_path, 209e6a5b88c01420366a70e0c9ae1775fb3c930cb8bBehdad Esfahbod gsize data_size, 210e6a5b88c01420366a70e0c9ae1775fb3c930cb8bBehdad Esfahbod gconstpointer test_data, 211e6a5b88c01420366a70e0c9ae1775fb3c930cb8bBehdad Esfahbod hb_test_fixture_func_t data_setup, 212e6a5b88c01420366a70e0c9ae1775fb3c930cb8bBehdad Esfahbod hb_test_fixture_func_t data_test, 213e6a5b88c01420366a70e0c9ae1775fb3c930cb8bBehdad Esfahbod hb_test_fixture_func_t data_teardown) 214aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod{ 215aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod char *normal_path = hb_test_normalize_path (test_path); 216aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod g_test_add_vtable (normal_path, data_size, test_data, data_setup, data_test, data_teardown); 217aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod g_free (normal_path); 218aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod} 219aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod#define hb_test_add_fixture(FixturePrefix, UserData, Func) \ 220aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad EsfahbodG_STMT_START { \ 221aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod typedef G_PASTE (FixturePrefix, _t) Fixture; \ 222aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod void (*add_vtable) (const char*, gsize, gconstpointer, \ 223aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod void (*) (Fixture*, gconstpointer), \ 224aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod void (*) (Fixture*, gconstpointer), \ 225aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod void (*) (Fixture*, gconstpointer)) \ 226aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod = (void (*) (const gchar *, gsize, gconstpointer, \ 227aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod void (*) (Fixture*, gconstpointer), \ 228aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod void (*) (Fixture*, gconstpointer), \ 229aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod void (*) (Fixture*, gconstpointer))) hb_test_add_vtable; \ 230aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod add_vtable (#Func, sizeof (G_PASTE (FixturePrefix, _t)), UserData, \ 231aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod G_PASTE (FixturePrefix, _init), Func, G_PASTE (FixturePrefix, _finish)); \ 232aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod} G_STMT_END 233aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod 234aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbodstatic inline void 235e6a5b88c01420366a70e0c9ae1775fb3c930cb8bBehdad Esfahbodhb_test_add_vtable_flavor (const char *test_path, 236e6a5b88c01420366a70e0c9ae1775fb3c930cb8bBehdad Esfahbod const char *flavor, 237e6a5b88c01420366a70e0c9ae1775fb3c930cb8bBehdad Esfahbod gsize data_size, 238e6a5b88c01420366a70e0c9ae1775fb3c930cb8bBehdad Esfahbod gconstpointer test_data, 239e6a5b88c01420366a70e0c9ae1775fb3c930cb8bBehdad Esfahbod hb_test_fixture_func_t data_setup, 240e6a5b88c01420366a70e0c9ae1775fb3c930cb8bBehdad Esfahbod hb_test_fixture_func_t data_test, 241e6a5b88c01420366a70e0c9ae1775fb3c930cb8bBehdad Esfahbod hb_test_fixture_func_t data_teardown) 242aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod{ 243aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod char *path = g_strdup_printf ("%s/%s", test_path, flavor); 244aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod hb_test_add_vtable (path, data_size, test_data, data_setup, data_test, data_teardown); 245aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod g_free (path); 246aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod} 247aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod#define hb_test_add_fixture_flavor(FixturePrefix, UserData, Flavor, Func) \ 248aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad EsfahbodG_STMT_START { \ 249aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod typedef G_PASTE (FixturePrefix, _t) Fixture; \ 250aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod void (*add_vtable) (const char*, const char *, gsize, gconstpointer, \ 251aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod void (*) (Fixture*, gconstpointer), \ 252aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod void (*) (Fixture*, gconstpointer), \ 253aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod void (*) (Fixture*, gconstpointer)) \ 254aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod = (void (*) (const gchar *, const char *, gsize, gconstpointer, \ 255aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod void (*) (Fixture*, gconstpointer), \ 256aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod void (*) (Fixture*, gconstpointer), \ 257aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod void (*) (Fixture*, gconstpointer))) hb_test_add_vtable_flavor; \ 258aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod add_vtable (#Func, Flavor, sizeof (G_PASTE (FixturePrefix, _t)), UserData, \ 259aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod G_PASTE (FixturePrefix, _init), Func, G_PASTE (FixturePrefix, _finish)); \ 260aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod} G_STMT_END 261aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod 262db60c96f20426111ffa71e9802ef6e248f8b28d0Behdad Esfahbod 2639faa980067f802f712c2adf8263152ed40c98088Behdad EsfahbodHB_END_DECLS 2649faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod 2659faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod#endif /* HB_TEST_H */ 266