/usr/include/wreport/tests.h is in libwreport-dev 2.14-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 | /*
* wreport/tests - Unit test utilities
*
* Copyright (C) 2005--2013 ARPA-SIM <urpsim@smr.arpa.emr.it>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License.
*
* This program 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*
* Author: Enrico Zini <enrico@enricozini.com>
*/
#ifndef WREPORT_TESTS
#define WREPORT_TESTS
#include <wibble/tests.h>
#include <wreport/varinfo.h>
#include <wreport/var.h>
#include <string>
#include <iostream>
#include <cstdlib>
#include <cstdio>
namespace wreport {
namespace tests {
#ifndef ensure_contains
#define ensure_contains(x, y) wreport::tests::impl_ensure_contains(wibble::tests::Location(__FILE__, __LINE__, #x " == " #y), (x), (y))
#define inner_ensure_contains(x, y) wreport::tests::impl_ensure_contains(wibble::tests::Location(loc, __FILE__, __LINE__, #x " == " #y), (x), (y))
static inline void impl_ensure_contains(const wibble::tests::Location& loc, const std::string& haystack, const std::string& needle)
{
if( haystack.find(needle) == std::string::npos )
{
std::stringstream ss;
ss << "'" << haystack << "' does not contain '" << needle << "'";
throw tut::failure(loc.msg(ss.str()));
}
}
#define ensure_not_contains(x, y) arki::tests::impl_ensure_not_contains(wibble::tests::Location(__FILE__, __LINE__, #x " == " #y), (x), (y))
#define inner_ensure_not_contains(x, y) arki::tests::impl_ensure_not_contains(wibble::tests::Location(loc, __FILE__, __LINE__, #x " == " #y), (x), (y))
static inline void impl_ensure_not_contains(const wibble::tests::Location& loc, const std::string& haystack, const std::string& needle)
{
if( haystack.find(needle) != std::string::npos )
{
std::stringstream ss;
ss << "'" << haystack << "' must not contain '" << needle << "'";
throw tut::failure(loc.msg(ss.str()));
}
}
#endif
#define ensure_varcode_equals(x, y) wreport::tests::_ensure_varcode_equals(wibble::tests::Location(__FILE__, __LINE__, #x " == " #y), (x), (y))
#define inner_ensure_varcode_equals(x, y) wreport::tests::_ensure_varcode_equals(wibble::tests::Location(loc, __FILE__, __LINE__, #x " == " #y), (x), (y))
static inline void _ensure_varcode_equals(const wibble::tests::Location& loc, Varcode actual, Varcode expected)
{
if( expected != actual )
{
char buf[40];
snprintf(buf, 40, "expected %01d%02d%03d actual %01d%02d%03d",
WR_VAR_F(expected), WR_VAR_X(expected), WR_VAR_Y(expected),
WR_VAR_F(actual), WR_VAR_X(actual), WR_VAR_Y(actual));
throw tut::failure(loc.msg(buf));
}
}
#define ensure_var_equals(x, y) wreport::tests::_ensure_var_equals(wibble::tests::Location(__FILE__, __LINE__, #x " == " #y), (x), (y))
#define inner_ensure_var_equals(x, y) wreport::tests::_ensure_var_equals(wibble::tests::Location(loc, __FILE__, __LINE__, #x " == " #y), (x), (y))
static inline void _ensure_var_equals(const wibble::tests::Location& loc, const Var& var, int val)
{
inner_ensure_equals(var.enqi(), val);
}
static inline void _ensure_var_equals(const wibble::tests::Location& loc, const Var& var, double val)
{
inner_ensure_equals(var.enqd(), val);
}
static inline void _ensure_var_equals(const wibble::tests::Location& loc, const Var& var, const std::string& val)
{
inner_ensure_equals(std::string(var.enqc()), val);
}
#define ensure_var_undef(x) wreport::tests::_ensure_var_undef(wibble::tests::Location(__FILE__, __LINE__, #x " is undef"), (x))
#define inner_ensure_var_undef(x) wreport::tests::_ensure_var_undef(wibble::tests::Location(loc, __FILE__, __LINE__, #x " is undef"), (x))
static inline void _ensure_var_undef(const wibble::tests::Location& loc, const Var& var)
{
inner_ensure_equals(var.value(), (const char*)0);
}
/// RAII-style override of an environment variable
class LocalEnv
{
/// name of the environment variable that we override
std::string key;
/// stored original value of the variable
std::string oldVal;
public:
/**
* @param key the environment variable to override
* @param val the new value to assign to \a key
*/
LocalEnv(const std::string& key, const std::string& val)
: key(key)
{
const char* v = getenv(key.c_str());
oldVal = v == NULL ? "" : v;
setenv(key.c_str(), val.c_str(), 1);
}
~LocalEnv()
{
setenv(key.c_str(), oldVal.c_str(), 1);
}
};
#ifdef wassert
/// Check that actual and expected have the same vars
struct TestVarEqual
{
Var avar;
Var evar;
bool inverted;
TestVarEqual(const Var& actual, const Var& expected, bool inverted=false) : avar(actual), evar(expected), inverted(inverted) {}
TestVarEqual operator!() { return TestVarEqual(avar, evar, !inverted); }
void check(WIBBLE_TEST_LOCPRM) const;
};
struct ActualVar : public wibble::tests::Actual<Var>
{
ActualVar(const Var& actual) : wibble::tests::Actual<Var>(actual) {}
TestVarEqual operator==(const Var& expected) const { return TestVarEqual(actual, expected); }
TestVarEqual operator!=(const Var& expected) const { return TestVarEqual(actual, expected, true); }
};
#endif
}
}
#ifdef wassert
namespace wibble {
namespace tests {
inline wreport::tests::ActualVar actual(const wreport::Var& actual) { return wreport::tests::ActualVar(actual); }
}
}
#endif
#endif
|