blob: 6c987d31cd5f5906cdd3a8eb8610a20f62005aa8 [file] [log] [blame]
Toby Gray21cf6e42012-11-21 14:00:31 +00001/*
hjelmn@cs.unm.edu1eff2202014-01-08 23:50:34 +00002 * libusb test library helper functions
Toby Gray21cf6e42012-11-21 14:00:31 +00003 * Copyright © 2012 Toby Gray <toby.gray@realvnc.com>
4 *
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2.1 of the License, or (at your option) any later version.
9 *
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
14 *
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18 */
19
hjelmn@cs.unm.edu1eff2202014-01-08 23:50:34 +000020#ifndef LIBUSB_TESTLIB_H
21#define LIBUSB_TESTLIB_H
Toby Gray21cf6e42012-11-21 14:00:31 +000022
23#include <stdio.h>
24
25#if !defined(bool)
26#define bool int
27#endif
28#if !defined(true)
29#define true (1 == 1)
30#endif
31#if !defined(false)
32#define false (!true)
33#endif
34
35/** Values returned from a test function to indicate test result */
36typedef enum {
37 /** Indicates that the test ran successfully. */
38 TEST_STATUS_SUCCESS,
39 /** Indicates that the test failed one or more test. */
40 TEST_STATUS_FAILURE,
41 /** Indicates that an unexpected error occurred. */
42 TEST_STATUS_ERROR,
43 /** Indicates that the test can't be run. For example this may be
44 * due to no suitable device being connected to perform the tests.*/
45 TEST_STATUS_SKIP
hjelmn@cs.unm.edu1eff2202014-01-08 23:50:34 +000046} libusb_testlib_result;
Toby Gray21cf6e42012-11-21 14:00:31 +000047
48/**
49 * Context for test library functions
50 */
51typedef struct {
52 char ** test_names;
53 int test_count;
54 bool list_tests;
55 bool verbose;
Pete Batard76eecc62013-02-21 00:24:18 +000056 int old_stdout;
57 int old_stderr;
Toby Gray21cf6e42012-11-21 14:00:31 +000058 FILE* output_file;
59 int null_fd;
hjelmn@cs.unm.edu1eff2202014-01-08 23:50:34 +000060} libusb_testlib_ctx;
Toby Gray21cf6e42012-11-21 14:00:31 +000061
62/**
63 * Logs some test information or state
64 */
hjelmn@cs.unm.edu1eff2202014-01-08 23:50:34 +000065void libusb_testlib_logf(libusb_testlib_ctx * ctx,
Toby Gray21cf6e42012-11-21 14:00:31 +000066 const char* fmt, ...);
67
68/**
hjelmn@cs.unm.edu1eff2202014-01-08 23:50:34 +000069 * Function pointer for a libusb test function.
Toby Gray21cf6e42012-11-21 14:00:31 +000070 *
71 * Should return TEST_STATUS_SUCCESS on success or another TEST_STATUS value.
72 */
hjelmn@cs.unm.edu1eff2202014-01-08 23:50:34 +000073typedef libusb_testlib_result
74(*libusb_testlib_test_function)(libusb_testlib_ctx * ctx);
Toby Gray21cf6e42012-11-21 14:00:31 +000075
76/**
77 * Structure holding a test description.
78 */
79typedef struct {
80 /** Human readable name of the test. */
81 const char * name;
82 /** The test library will call this function to run the test. */
hjelmn@cs.unm.edu1eff2202014-01-08 23:50:34 +000083 libusb_testlib_test_function function;
84} libusb_testlib_test;
Toby Gray21cf6e42012-11-21 14:00:31 +000085
86/**
87 * Value to use at the end of a test array to indicate the last
88 * element.
89 */
hjelmn@cs.unm.edu1eff2202014-01-08 23:50:34 +000090#define LIBUSB_NULL_TEST {NULL, NULL}
Toby Gray21cf6e42012-11-21 14:00:31 +000091
92/**
93 * Runs the tests provided.
94 *
95 * Before running any tests argc and argv will be processed
96 * to determine the mode of operation.
97 *
98 * \param argc The argc from main
99 * \param argv The argv from main
100 * \param tests A NULL_TEST terminated array of tests
101 * \return 0 on success, non-zero on failure
102 */
hjelmn@cs.unm.edu1eff2202014-01-08 23:50:34 +0000103int libusb_testlib_run_tests(int argc,
Toby Gray21cf6e42012-11-21 14:00:31 +0000104 char ** argv,
hjelmn@cs.unm.edu1eff2202014-01-08 23:50:34 +0000105 const libusb_testlib_test * tests);
Toby Gray21cf6e42012-11-21 14:00:31 +0000106
hjelmn@cs.unm.edu1eff2202014-01-08 23:50:34 +0000107#endif //LIBUSB_TESTLIB_H