Revision 40:649f32c7eb41 vamp-plugin-tester.cpp
| vamp-plugin-tester.cpp | ||
|---|---|---|
| 50 | 50 |
|
| 51 | 51 |
using namespace std; |
| 52 | 52 |
|
| 53 |
static const std::string VERSION="1.1"; |
|
| 54 |
|
|
| 53 | 55 |
void usage(const char *name) |
| 54 | 56 |
{
|
| 55 | 57 |
cerr << "\n" |
| ... | ... | |
| 58 | 60 |
"Copyright 2009-2012 QMUL.\n" |
| 59 | 61 |
"Freely redistributable; published under a BSD-style license.\n\n" |
| 60 | 62 |
"Usage:\n" |
| 61 |
" " << name << " [-nv] <pluginbasename>:<plugin>\n" |
|
| 62 |
" " << name << " [-nv] -a\n\n" |
|
| 63 |
" " << name << " [-nv] [-t <test>] <pluginbasename>:<plugin>\n" |
|
| 64 |
" " << name << " [-nv] [-t <test>] -a\n" |
|
| 65 |
" " << name << " -l\n\n" |
|
| 63 | 66 |
"Example:\n" |
| 64 | 67 |
" " << name << " vamp-example-plugins:amplitudefollower\n\n" |
| 65 | 68 |
"Options:\n" |
| ... | ... | |
| 67 | 70 |
" -n, --nondeterministic Plugins may be nondeterministic: print a note\n" |
| 68 | 71 |
" instead of an error if results differ between runs\n\n" |
| 69 | 72 |
" -v, --verbose Show returned features each time a note, warning,\n" |
| 70 |
" or error arises from feature data\n" |
|
| 73 |
" or error arises from feature data\n\n" |
|
| 74 |
" -t, --test <test> Run only a single test, not the full test suite.\n" |
|
| 75 |
" Identify the test by its id, e.g. A3\n\n" |
|
| 76 |
" -l, --list-tests List tests by id and name\n\n" |
|
| 77 |
" --version Display the version of " << name << "\n" |
|
| 71 | 78 |
"\nIf you have access to a runtime memory checker, you may find it especially\n" |
| 72 | 79 |
"helpful to run this tester under it and watch for errors thus provoked.\n" |
| 73 | 80 |
<< endl; |
| ... | ... | |
| 87 | 94 |
bool nondeterministic = false; |
| 88 | 95 |
bool verbose = false; |
| 89 | 96 |
bool all = false; |
| 90 |
string argument; |
|
| 97 |
bool list = false; |
|
| 98 |
string plugin; |
|
| 99 |
string single; |
|
| 100 |
|
|
| 101 |
// Would be better to use getopt, but let's avoid the dependency for now |
|
| 91 | 102 |
for (int i = 1; i < argc; ++i) {
|
| 92 | 103 |
if (!argv[i]) break; |
| 93 | 104 |
if (argv[i][0] == '-') {
|
| 105 |
if (!strcmp(argv[i], "-vn") || |
|
| 106 |
!strcmp(argv[i], "-nv")) {
|
|
| 107 |
verbose = true; |
|
| 108 |
nondeterministic = true; |
|
| 109 |
continue; |
|
| 110 |
} |
|
| 94 | 111 |
if (!strcmp(argv[i], "-v") || |
| 95 | 112 |
!strcmp(argv[i], "--verbose")) {
|
| 96 | 113 |
verbose = true; |
| ... | ... | |
| 106 | 123 |
all = true; |
| 107 | 124 |
continue; |
| 108 | 125 |
} |
| 126 |
if (!strcmp(argv[i], "-l") || |
|
| 127 |
!strcmp(argv[i], "--list-tests")) {
|
|
| 128 |
list = true; |
|
| 129 |
continue; |
|
| 130 |
} |
|
| 131 |
if (!strcmp(argv[i], "-t") || |
|
| 132 |
!strcmp(argv[i], "--test")) {
|
|
| 133 |
if (i + 1 < argc) {
|
|
| 134 |
single = argv[i+1]; |
|
| 135 |
++i; |
|
| 136 |
} else {
|
|
| 137 |
usage(name); |
|
| 138 |
} |
|
| 139 |
continue; |
|
| 140 |
} |
|
| 141 |
if (!strcmp(argv[i], "--version")) {
|
|
| 142 |
cout << "v" << VERSION << endl; |
|
| 143 |
return 0; |
|
| 144 |
} |
|
| 109 | 145 |
usage(name); |
| 110 | 146 |
} else {
|
| 111 |
if (argument != "") usage(name);
|
|
| 112 |
else argument = argv[i];
|
|
| 147 |
if (plugin != "") usage(name);
|
|
| 148 |
else plugin = argv[i];
|
|
| 113 | 149 |
} |
| 114 | 150 |
} |
| 151 |
|
|
| 152 |
if (list) {
|
|
| 153 |
if (all || nondeterministic || (single != "") || (plugin != "")) {
|
|
| 154 |
usage(name); |
|
| 155 |
} |
|
| 156 |
Tester::listTests(); |
|
| 157 |
return 0; |
|
| 158 |
} |
|
| 115 | 159 |
|
| 116 |
if (argument == "" && !all) usage(name);
|
|
| 117 |
if (argument != "" && all) usage(name);
|
|
| 160 |
if (plugin == "" && !all) usage(name);
|
|
| 161 |
if (plugin != "" && all) usage(name);
|
|
| 118 | 162 |
|
| 119 | 163 |
cerr << name << ": Running..." << endl; |
| 120 | 164 |
|
| 121 |
std::string single = ""; |
|
| 122 |
|
|
| 123 | 165 |
Test::Options opts = Test::NoOption; |
| 124 | 166 |
if (nondeterministic) opts |= Test::NonDeterministic; |
| 125 | 167 |
if (verbose) opts |= Test::Verbose; |
| ... | ... | |
| 163 | 205 |
return 1; |
| 164 | 206 |
} |
| 165 | 207 |
} else {
|
| 166 |
string key = argument; |
|
| 167 |
Tester tester(key, opts, single); |
|
| 208 |
Tester tester(plugin, opts, single); |
|
| 168 | 209 |
int notes = 0, warnings = 0, errors = 0; |
| 169 | 210 |
if (tester.test(notes, warnings, errors)) {
|
| 170 | 211 |
cout << name << ": All tests succeeded"; |
Also available in: Unified diff