File: harness.h

package info (click to toggle)
solvespace 3.1%2Bds1-3
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 15,960 kB
  • sloc: cpp: 122,491; ansic: 11,375; javascript: 1,919; sh: 89; xml: 44; makefile: 25
file content (75 lines) | stat: -rw-r--r-- 3,041 bytes parent folder | download | duplicates (3)
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
//-----------------------------------------------------------------------------
// Our harness for running test cases, and reusable checks.
//
// Copyright 2016 whitequark
//-----------------------------------------------------------------------------
#include "solvespace.h"

// Hack... we should rename the ones in ui.h instead.
#undef CHECK_TRUE
#undef CHECK_FALSE

namespace SolveSpace {
namespace Test {

class Helper {
public:
    size_t  checkCount;
    size_t  failCount;

    bool RecordCheck(bool success);
    void PrintFailure(const char *file, int line, std::string msg);
    Platform::Path GetAssetPath(std::string testFile, std::string assetName,
                                std::string mangle = "");

    bool CheckBool(const char *file, int line, const char *expr,
                   bool value, bool reference);
    bool CheckEqualString(const char *file, int line, const char *valueExpr,
                          const std::string &value, const std::string &reference);
    bool CheckEqualEpsilon(const char *file, int line, const char *valueExpr,
                           double value, double reference);
    bool CheckLoad(const char *file, int line, const char *fixture);
    bool CheckSave(const char *file, int line, const char *reference);
    bool CheckRender(const char *file, int line, const char *fixture);
    bool CheckRenderXY(const char *file, int line, const char *fixture);
    bool CheckRenderIso(const char *file, int line, const char *fixture);
};

class Case {
public:
    std::string fileName;
    std::string caseName;
    std::function<void(Helper *)> fn;

    static int Register(Case testCase);
};

}
}

using namespace SolveSpace;

#define TEST_CASE(name) \
    static void Test_##name(Test::Helper *); \
    static Test::Case TestCase_##name = { __FILE__, #name, Test_##name }; \
    static int TestReg_##name = Test::Case::Register(TestCase_##name); \
    static void Test_##name(Test::Helper *helper) // { ... }

#define CHECK_TRUE(cond) \
    do { if(!helper->CheckBool(__FILE__, __LINE__, #cond, cond, true)) return; } while(0)
#define CHECK_FALSE(cond) \
    do { if(!helper->CheckBool(__FILE__, __LINE__, #cond, cond, false)) return; } while(0)
#define CHECK_EQ_STR(value, reference) \
    do { if(!helper->CheckEqualString(__FILE__, __LINE__, \
                                      #value, value, reference)) return; } while(0)
#define CHECK_EQ_EPS(value, reference) \
    do { if(!helper->CheckEqualEpsilon(__FILE__, __LINE__, \
                                       #value, value, reference)) return; } while(0)
#define CHECK_LOAD(fixture) \
    do { if(!helper->CheckLoad(__FILE__, __LINE__, fixture)) return; } while(0)
#define CHECK_SAVE(fixture) \
    do { if(!helper->CheckSave(__FILE__, __LINE__, fixture)) return; } while(0)
#define CHECK_RENDER(reference) \
    do { if(!helper->CheckRenderXY(__FILE__, __LINE__, reference)) return; } while(0)
#define CHECK_RENDER_ISO(reference) \
    do { if(!helper->CheckRenderIso(__FILE__, __LINE__, reference)) return; } while(0)