48 if (user_backend.empty())
61 struct BackendProperties {
67 static const BackendProperties backend_properties[] = {
69 {
"inmemory", INMEMORY|
70 BACKEND|POSITIONAL|WRITABLE|METADATA|VALUESTATS },
72 BACKEND|TRANSACTIONS|POSITIONAL|WRITABLE|
SPELLING|METADATA|
73 SYNONYMS|VALUESTATS|CHECK|COMPACT|PATH
74 #ifdef XAPIAN_HAS_REMOTE_BACKEND
78 {
"multi_glass", MULTI|
79 BACKEND|TRANSACTIONS|POSITIONAL|WRITABLE|METADATA|VALUESTATS|
80 SPELLING|SYNONYMS|CHECK|COMPACT|PATH },
81 {
"multi_glass_remoteprog_glass", MULTI|REMOTE|
82 BACKEND|TRANSACTIONS|POSITIONAL|WRITABLE|METADATA|VALUESTATS|
85 {
"multi_remoteprog_glass", MULTI|REMOTE|
86 BACKEND|TRANSACTIONS|POSITIONAL|WRITABLE|METADATA|VALUESTATS|
89 {
"remoteprog_glass", REMOTE|
90 BACKEND|TRANSACTIONS|POSITIONAL|WRITABLE|METADATA|VALUESTATS|
93 {
"remotetcp_glass", REMOTE|REMOTETCP|
94 BACKEND|TRANSACTIONS|POSITIONAL|WRITABLE|METADATA|VALUESTATS|
97 {
"singlefile_glass", SINGLEFILE|
98 BACKEND|POSITIONAL|METADATA|
SPELLING|SYNONYMS|VALUESTATS|
102 BACKEND|POSITIONAL|METADATA|
SPELLING|SYNONYMS|VALUESTATS|
108 for (
const BackendProperties * i = backend_properties; i->name; ++i) {
110 properties = i->properties;
123 cout <<
"Running tests with backend \"" <<
backend_name <<
"\"...\n";
125 result_so_far = max(result_so_far, run());
138 string datadir =
srcdir +
"/testdata/";
140 #ifdef XAPIAN_HAS_HONEY_BACKEND
141 # ifdef XAPIAN_HAS_GLASS_BACKEND
153 #ifdef XAPIAN_HAS_INMEMORY_BACKEND
157 #ifdef XAPIAN_HAS_GLASS_BACKEND
162 vector<BackendManager*> multi_mans;
163 multi_mans = {&glass_man, &glass_man};
165 do_tests_for_backend(glass_man);
168 # ifdef XAPIAN_HAS_REMOTE_BACKEND
172 multi_mans = {&glass_man, &remoteprog_glass_man};
176 multi_mans = {&remoteprog_glass_man, &remoteprog_glass_man};
185 }
catch (
const std::exception& e) {
186 cerr <<
"\nTest harness failed with std::exception: " << e.what()
190 cerr <<
"\nTest harness failed with " << e.get_description() <<
'\n';
192 }
catch (
const std::string &e) {
193 cerr <<
"\nTest harness failed with \"" << e <<
"\"\n";
195 }
catch (
const char * e) {
199 return result_so_far;
Base class for backend handling in test harness.
BackendManager subclass for glass databases.
BackendManager subclass for honey databases.
BackendManager subclass for inmemory databases.
BackendManager subclass for multi databases.
BackendManager subclass for remoteprog databases.
BackendManager subclass for remotetcp databases.
BackendManager subclass for singlefile databases.
const char * backend_name(int code)
BackendManager subclass for glass databases.
BackendManager subclass for honey databases.
BackendManager subclass for inmemory databases.
BackendManager subclass for multi databases.
BackendManager subclass for remoteprog databases.
BackendManager subclass for remotetcp databases.
BackendManager subclass for singlefile databases.
const std::string & get_dbtype() const
Get the database type currently in use.
virtual ~TestRunner()
Virtual destructor - needed for abstract class.
void set_properties_for_backend(const std::string &backend_name)
Set the property flags to those for the named backend.
int run_tests(int argc, char **argv)
Run all the tests.
void do_tests_for_backend_(BackendManager *manager)
bool use_backend(const std::string &backend_name)
Return true iff we should use the named backend.
All exceptions thrown by Xapian are subclasses of Xapian::Error.
InvalidArgumentError indicates an invalid parameter value was passed to the API.
static void parse_command_line(int argc, char **argv)
Parse the command line arguments.
static std::string get_srcdir()
Read srcdir from environment and if not present, make a valiant attempt to guess a value.
static void add_command_line_option(const std::string &l, char s, std::string *arg)
Add a test-specific command line option.
Various handy string-related helpers.
bool startswith(std::string_view s, char pfx)
BackendManager * backendmanager
backendmanager is global so that it can be accessed by individual tests.
Run multiple tests for different backends.
a generic test suite engine