mirror of
https://github.com/thead-yocto-mirror/xtensa_dsp
synced 2026-07-09 09:54:55 +02:00
323 lines
12 KiB
C++
323 lines
12 KiB
C++
/*
|
|
* Copyright (c) 2007, Michael Feathers, James Grenning and Bas Vodde
|
|
* All rights reserved.
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions are met:
|
|
* * Redistributions of source code must retain the above copyright
|
|
* notice, this list of conditions and the following disclaimer.
|
|
* * Redistributions in binary form must reproduce the above copyright
|
|
* notice, this list of conditions and the following disclaimer in the
|
|
* documentation and/or other materials provided with the distribution.
|
|
* * Neither the name of the <organization> nor the
|
|
* names of its contributors may be used to endorse or promote products
|
|
* derived from this software without specific prior written permission.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE EARLIER MENTIONED AUTHORS ``AS IS'' AND ANY
|
|
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
* DISCLAIMED. IN NO EVENT SHALL <copyright holder> BE LIABLE FOR ANY
|
|
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
*/
|
|
|
|
// This file contains the Test class along with the macros which make effective
|
|
// in the harness.
|
|
|
|
#ifndef D_UTest_h
|
|
#define D_UTest_h
|
|
|
|
#include "SimpleString.h"
|
|
|
|
class TestResult;
|
|
class TestPlugin;
|
|
class TestFailure;
|
|
class TestFilter;
|
|
class TestTerminator;
|
|
|
|
extern bool doubles_equal(double d1, double d2, double threshold);
|
|
|
|
//////////////////// Utest
|
|
|
|
class UtestShell;
|
|
|
|
class Utest
|
|
{
|
|
public:
|
|
Utest();
|
|
virtual ~Utest();
|
|
virtual void run();
|
|
|
|
virtual void setup();
|
|
virtual void teardown();
|
|
virtual void testBody();
|
|
};
|
|
|
|
//////////////////// TestTerminator
|
|
|
|
class TestTerminator
|
|
{
|
|
public:
|
|
virtual void exitCurrentTest() const=0;
|
|
virtual ~TestTerminator();
|
|
};
|
|
|
|
class NormalTestTerminator : public TestTerminator
|
|
{
|
|
public:
|
|
virtual void exitCurrentTest() const _override;
|
|
virtual ~NormalTestTerminator() _destructor_override;
|
|
};
|
|
|
|
class TestTerminatorWithoutExceptions : public TestTerminator
|
|
{
|
|
public:
|
|
virtual void exitCurrentTest() const _override;
|
|
virtual ~TestTerminatorWithoutExceptions() _destructor_override;
|
|
};
|
|
|
|
class CrashingTestTerminator : public NormalTestTerminator
|
|
{
|
|
public:
|
|
virtual void exitCurrentTest() const _override;
|
|
virtual ~CrashingTestTerminator() _destructor_override;
|
|
};
|
|
|
|
//////////////////// UtestShell
|
|
|
|
class UtestShell
|
|
{
|
|
public:
|
|
static UtestShell *getCurrent();
|
|
|
|
static const TestTerminator &getCurrentTestTerminator();
|
|
|
|
static void setCrashOnFail();
|
|
static void restoreDefaultTestTerminator();
|
|
|
|
public:
|
|
UtestShell(const char* groupName, const char* testName, const char* fileName, size_t lineNumber);
|
|
virtual ~UtestShell();
|
|
|
|
virtual UtestShell* addTest(UtestShell* test);
|
|
virtual UtestShell *getNext() const;
|
|
virtual size_t countTests();
|
|
|
|
bool shouldRun(const TestFilter* groupFilters, const TestFilter* nameFilters) const;
|
|
const SimpleString getName() const;
|
|
const SimpleString getGroup() const;
|
|
virtual SimpleString getFormattedName() const;
|
|
const SimpleString getFile() const;
|
|
size_t getLineNumber() const;
|
|
virtual bool willRun() const;
|
|
virtual bool hasFailed() const;
|
|
void countCheck();
|
|
|
|
virtual void assertTrue(bool condition, const char *checkString, const char *conditionString, const char* text, const char *fileName, size_t lineNumber, const TestTerminator& testTerminator = getCurrentTestTerminator());
|
|
virtual void assertCstrEqual(const char *expected, const char *actual, const char* text, const char *fileName, size_t lineNumber, const TestTerminator& testTerminator = getCurrentTestTerminator());
|
|
virtual void assertCstrNEqual(const char *expected, const char *actual, size_t length, const char* text, const char *fileName, size_t lineNumber, const TestTerminator& testTerminator = getCurrentTestTerminator());
|
|
virtual void assertCstrNoCaseEqual(const char *expected, const char *actual, const char* text, const char *fileName, size_t lineNumber);
|
|
virtual void assertCstrContains(const char *expected, const char *actual, const char* text, const char *fileName, size_t lineNumber);
|
|
virtual void assertCstrNoCaseContains(const char *expected, const char *actual, const char* text, const char *fileName, size_t lineNumber);
|
|
virtual void assertLongsEqual(long expected, long actual, const char* text, const char *fileName, size_t lineNumber, const TestTerminator& testTerminator = getCurrentTestTerminator());
|
|
virtual void assertUnsignedLongsEqual(unsigned long expected, unsigned long actual, const char* text, const char *fileName, size_t lineNumber, const TestTerminator& testTerminator = getCurrentTestTerminator());
|
|
virtual void assertLongLongsEqual(cpputest_longlong expected, cpputest_longlong actual, const char* text, const char *fileName, size_t lineNumber, const TestTerminator& testTerminator = getCurrentTestTerminator());
|
|
virtual void assertUnsignedLongLongsEqual(cpputest_ulonglong expected, cpputest_ulonglong actual, const char* text, const char *fileName, size_t lineNumber, const TestTerminator& testTerminator = getCurrentTestTerminator());
|
|
virtual void assertSignedBytesEqual(signed char expected, signed char actual, const char* text, const char *fileName, size_t lineNumber, const TestTerminator& testTerminator = getCurrentTestTerminator());
|
|
virtual void assertPointersEqual(const void *expected, const void *actual, const char* text, const char *fileName, size_t lineNumber, const TestTerminator& testTerminator = getCurrentTestTerminator());
|
|
virtual void assertFunctionPointersEqual(void (*expected)(), void (*actual)(), const char* text, const char* fileName, size_t lineNumber, const TestTerminator& testTerminator = getCurrentTestTerminator());
|
|
virtual void assertDoublesEqual(double expected, double actual, double threshold, const char* text, const char *fileName, size_t lineNumber, const TestTerminator& testTerminator = getCurrentTestTerminator());
|
|
virtual void assertEquals(bool failed, const char* expected, const char* actual, const char* text, const char* file, size_t lineNumber, const TestTerminator& testTerminator = getCurrentTestTerminator());
|
|
virtual void assertBinaryEqual(const void *expected, const void *actual, size_t length, const char* text, const char *fileName, size_t lineNumber, const TestTerminator& testTerminator = getCurrentTestTerminator());
|
|
virtual void assertBitsEqual(unsigned long expected, unsigned long actual, unsigned long mask, size_t byteCount, const char* text, const char *fileName, size_t lineNumber, const TestTerminator& testTerminator = getCurrentTestTerminator());
|
|
virtual void assertCompare(bool comparison, const char *checkString, const char *comparisonString, const char *text, const char *fileName, size_t lineNumber, const TestTerminator& testTerminator = getCurrentTestTerminator());
|
|
virtual void fail(const char *text, const char *fileName, size_t lineNumber, const TestTerminator& testTerminator = getCurrentTestTerminator());
|
|
virtual void exitTest(const TestTerminator& testTerminator = getCurrentTestTerminator());
|
|
|
|
virtual void print(const char *text, const char *fileName, size_t lineNumber);
|
|
virtual void print(const SimpleString & text, const char *fileName, size_t lineNumber);
|
|
virtual void printVeryVerbose(const char* text);
|
|
|
|
void setFileName(const char *fileName);
|
|
void setLineNumber(size_t lineNumber);
|
|
void setGroupName(const char *groupName);
|
|
void setTestName(const char *testName);
|
|
|
|
static void crash();
|
|
static void setCrashMethod(void (*crashme)());
|
|
static void resetCrashMethod();
|
|
|
|
virtual bool isRunInSeperateProcess() const;
|
|
virtual void setRunInSeperateProcess();
|
|
|
|
virtual void setRunIgnored();
|
|
|
|
virtual Utest* createTest();
|
|
virtual void destroyTest(Utest* test);
|
|
|
|
virtual void runOneTest(TestPlugin* plugin, TestResult& result);
|
|
virtual void runOneTestInCurrentProcess(TestPlugin *plugin, TestResult & result);
|
|
|
|
virtual void failWith(const TestFailure& failure);
|
|
virtual void failWith(const TestFailure& failure, const TestTerminator& terminator);
|
|
|
|
protected:
|
|
UtestShell();
|
|
UtestShell(const char *groupName, const char *testName, const char *fileName, size_t lineNumber, UtestShell *nextTest);
|
|
|
|
virtual SimpleString getMacroName() const;
|
|
TestResult *getTestResult();
|
|
private:
|
|
const char *group_;
|
|
const char *name_;
|
|
const char *file_;
|
|
size_t lineNumber_;
|
|
UtestShell *next_;
|
|
bool isRunAsSeperateProcess_;
|
|
bool hasFailed_;
|
|
|
|
void setTestResult(TestResult* result);
|
|
void setCurrentTest(UtestShell* test);
|
|
bool match(const char* target, const TestFilter* filters) const;
|
|
|
|
static UtestShell* currentTest_;
|
|
static TestResult* testResult_;
|
|
|
|
static const TestTerminator *currentTestTerminator_;
|
|
};
|
|
|
|
|
|
|
|
//////////////////// ExecFunctionTest
|
|
|
|
class ExecFunctionTestShell;
|
|
|
|
class ExecFunctionTest : public Utest
|
|
{
|
|
public:
|
|
ExecFunctionTest(ExecFunctionTestShell* shell);
|
|
void testBody() _override;
|
|
virtual void setup() _override;
|
|
virtual void teardown() _override;
|
|
private:
|
|
ExecFunctionTestShell* shell_;
|
|
};
|
|
|
|
//////////////////// ExecFunction
|
|
|
|
class ExecFunction
|
|
{
|
|
public:
|
|
ExecFunction();
|
|
virtual ~ExecFunction();
|
|
|
|
virtual void exec()=0;
|
|
};
|
|
|
|
class ExecFunctionWithoutParameters : public ExecFunction
|
|
{
|
|
public:
|
|
void (*testFunction_)();
|
|
|
|
ExecFunctionWithoutParameters(void(*testFunction)());
|
|
virtual ~ExecFunctionWithoutParameters() _destructor_override;
|
|
|
|
virtual void exec() _override;
|
|
};
|
|
|
|
//////////////////// ExecFunctionTestShell
|
|
|
|
class ExecFunctionTestShell : public UtestShell
|
|
{
|
|
public:
|
|
void (*setup_)();
|
|
void (*teardown_)();
|
|
ExecFunction* testFunction_;
|
|
|
|
ExecFunctionTestShell(void(*set)() = NULLPTR, void(*tear)() = NULLPTR) :
|
|
UtestShell("ExecFunction", "ExecFunction", "ExecFunction", 1), setup_(set), teardown_(tear), testFunction_(NULLPTR)
|
|
{
|
|
}
|
|
|
|
Utest* createTest() _override { return new ExecFunctionTest(this); }
|
|
virtual ~ExecFunctionTestShell() _destructor_override;
|
|
};
|
|
|
|
//////////////////// CppUTestFailedException
|
|
|
|
class CppUTestFailedException
|
|
{
|
|
public:
|
|
int dummy_;
|
|
};
|
|
|
|
//////////////////// IgnoredTest
|
|
|
|
class IgnoredUtestShell : public UtestShell
|
|
{
|
|
public:
|
|
IgnoredUtestShell();
|
|
virtual ~IgnoredUtestShell() _destructor_override;
|
|
explicit IgnoredUtestShell(const char* groupName, const char* testName,
|
|
const char* fileName, size_t lineNumber);
|
|
virtual bool willRun() const _override;
|
|
virtual void setRunIgnored() _override;
|
|
protected:
|
|
virtual SimpleString getMacroName() const _override;
|
|
virtual void runOneTest(TestPlugin* plugin, TestResult& result) _override;
|
|
private:
|
|
|
|
IgnoredUtestShell(const IgnoredUtestShell&);
|
|
IgnoredUtestShell& operator=(const IgnoredUtestShell&);
|
|
|
|
bool runIgnored_;
|
|
|
|
};
|
|
|
|
//////////////////// UtestShellPointerArray
|
|
|
|
class UtestShellPointerArray
|
|
{
|
|
public:
|
|
UtestShellPointerArray(UtestShell* firstTest);
|
|
~UtestShellPointerArray();
|
|
|
|
void shuffle(size_t seed);
|
|
void reverse();
|
|
void relinkTestsInOrder();
|
|
UtestShell* getFirstTest() const;
|
|
UtestShell* get(size_t index) const;
|
|
|
|
private:
|
|
|
|
void swap(size_t index1, size_t index2);
|
|
|
|
UtestShell** arrayOfTests_;
|
|
size_t count_;
|
|
};
|
|
|
|
|
|
//////////////////// TestInstaller
|
|
|
|
class TestInstaller
|
|
{
|
|
public:
|
|
explicit TestInstaller(UtestShell& shell, const char* groupName, const char* testName,
|
|
const char* fileName, size_t lineNumber);
|
|
virtual ~TestInstaller();
|
|
|
|
void unDo();
|
|
|
|
private:
|
|
|
|
TestInstaller(const TestInstaller&);
|
|
TestInstaller& operator=(const TestInstaller&);
|
|
|
|
};
|
|
|
|
#endif
|