/* * * Embedded Linux library * * Copyright (C) 2011-2014 Intel Corporation. All rights reserved. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * */ #ifdef HAVE_CONFIG_H #include #endif #include #include #include #include "log.h" #include "test.h" #include "private.h" #include "useful.h" /** * SECTION:test * @short_description: Unit test framework * * Unit test framework */ struct test { const char *name; l_test_func_t function; const void *test_data; struct test *next; }; static struct test *test_head; static struct test *test_tail; /** * l_test_init: * @argc: pointer to @argc parameter of main() function * @argv: pointer to @argv parameter of main() function * * Initialize testing framework. **/ LIB_EXPORT void l_test_init(int *argc, char ***argv) { test_head = NULL; test_tail = NULL; l_log_set_stderr(); } /** * l_test_run: * * Run all configured tests. * * Returns: 0 on success **/ LIB_EXPORT int l_test_run(void) { struct test *test = test_head; while (test) { struct test *tmp = test; printf("TEST: %s\n", test->name); test->function(test->test_data); test = test->next; free(tmp); } test_head = NULL; test_tail = NULL; return 0; } /** * l_test_add: * @name: test name * @function: test function * @test_data: test data * * Add new test. **/ LIB_EXPORT void l_test_add(const char *name, l_test_func_t function, const void *test_data) { struct test *test; if (unlikely(!name || !function)) return; test = malloc(sizeof(struct test)); if (!test) return; memset(test, 0, sizeof(struct test)); test->name = name; test->function = function; test->test_data = test_data; test->next = NULL; if (test_tail) test_tail->next = test; test_tail = test; if (!test_head) test_head = test; }