blob: 145f4e662595b098d7c1d9245100b42fcac7146d [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
Chris Dickensf2e551a2020-11-27 15:22:29 -080023#include <config.h>
24
Toby Gray21cf6e42012-11-21 14:00:31 +000025/** Values returned from a test function to indicate test result */
26typedef enum {
27 /** Indicates that the test ran successfully. */
28 TEST_STATUS_SUCCESS,
29 /** Indicates that the test failed one or more test. */
30 TEST_STATUS_FAILURE,
31 /** Indicates that an unexpected error occurred. */
32 TEST_STATUS_ERROR,
33 /** Indicates that the test can't be run. For example this may be
Chris Dickensa016a082020-09-13 15:30:04 -070034 * due to no suitable device being connected to perform the tests. */
Toby Gray21cf6e42012-11-21 14:00:31 +000035 TEST_STATUS_SKIP
hjelmn@cs.unm.edu1eff2202014-01-08 23:50:34 +000036} libusb_testlib_result;
Toby Gray21cf6e42012-11-21 14:00:31 +000037
38/**
Toby Gray21cf6e42012-11-21 14:00:31 +000039 * Logs some test information or state
40 */
Chris Dickensf2e551a2020-11-27 15:22:29 -080041void libusb_testlib_logf(const char *fmt, ...) PRINTF_FORMAT(1, 2);
Toby Gray21cf6e42012-11-21 14:00:31 +000042
43/**
44 * Structure holding a test description.
45 */
46typedef struct {
47 /** Human readable name of the test. */
Chris Dickensa016a082020-09-13 15:30:04 -070048 const char *name;
49 /** The test library will call this function to run the test.
50 *
51 * Should return TEST_STATUS_SUCCESS on success or another TEST_STATUS value.
52 */
53 libusb_testlib_result (*function)(void);
hjelmn@cs.unm.edu1eff2202014-01-08 23:50:34 +000054} libusb_testlib_test;
Toby Gray21cf6e42012-11-21 14:00:31 +000055
56/**
57 * Value to use at the end of a test array to indicate the last
58 * element.
59 */
Chris Dickensa016a082020-09-13 15:30:04 -070060#define LIBUSB_NULL_TEST { NULL, NULL }
Toby Gray21cf6e42012-11-21 14:00:31 +000061
62/**
63 * Runs the tests provided.
64 *
65 * Before running any tests argc and argv will be processed
66 * to determine the mode of operation.
67 *
68 * \param argc The argc from main
69 * \param argv The argv from main
70 * \param tests A NULL_TEST terminated array of tests
71 * \return 0 on success, non-zero on failure
72 */
Chris Dickensa016a082020-09-13 15:30:04 -070073int libusb_testlib_run_tests(int argc, char *argv[],
74 const libusb_testlib_test *tests);
Toby Gray21cf6e42012-11-21 14:00:31 +000075
hjelmn@cs.unm.edu1eff2202014-01-08 23:50:34 +000076#endif //LIBUSB_TESTLIB_H