summaryrefslogtreecommitdiff
path: root/test/Unittest.h
blob: 0aeae76f36e8f6a048250caf74b4580af97f0ffc (plain)
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
#pragma once

#include <gtest/gtest.h>
#include <mr_ctx.h>

/// ����������
class ModuleTestBase : public ::testing::TestWithParam<struct mr_module*>
{
protected:
	struct mr_module * mod_desc_;
	struct mr_global_ctx * g_ctx_;
	struct mr_config * g_cfg_;

	ModuleTestBase() :
		mod_desc_(GetParam()), g_ctx_(NULL), g_cfg_(NULL)
	{
		return;
	}

	int call_preconfig() const
	{
		if (mod_desc_->preconfig != NULL) return (mod_desc_->preconfig)(g_cfg_, g_ctx_);
		return 0;
	}

	int call_config() const
	{
		if (mod_desc_->config != NULL) return mod_desc_->config(g_cfg_, g_ctx_);
		return 0;
	}

	int call_init() const
	{
		if (mod_desc_->init != NULL) return mod_desc_->init(g_cfg_, g_ctx_);
		return 0;
	}

	int call_destory() const
	{
		if (mod_desc_->destory != NULL) return mod_desc_->init(g_cfg_, g_ctx_);
		return 0;
	}

	void * module_g_ctx() const
	{
		return g_ctx_->module_ctxs[mod_desc_->mid];
	}

	void * module_g_cfg() const
	{
		return g_cfg_->module_cfgs[mod_desc_->mid];
	}
};

/// ���Ի��࣬����ģ��PreConfig�׶�ǰ�IJ���
class ModuelTestBaseBeforePreConfig : public ModuleTestBase
{
protected:
	ModuelTestBaseBeforePreConfig() : ModuleTestBase()
	{
		return;
	}

	virtual void SetUp()
	{
		g_cfg_ = new struct mr_config();
		g_ctx_ = new struct mr_global_ctx();
	}

	virtual void TearDown()
	{
		delete g_cfg_;
		delete g_ctx_;
	}
};

/// ���Ի��࣬����ģ��Config�׶�ǰ�IJ���
class ModuleTestBaseBeforeConfig : public ModuelTestBaseBeforePreConfig
{
protected:
	ModuleTestBaseBeforeConfig() : ModuelTestBaseBeforePreConfig() {}

	virtual void SetUp()
	{
		ModuelTestBaseBeforePreConfig::SetUp();
		ASSERT_EQ(call_preconfig(), 0);
	}
};

/// ���Ի��࣬����ģ��Init�׶�ǰ�IJ���
class ModuleTestBaseBeforeInit : public ModuleTestBaseBeforeConfig
{
protected:
	ModuleTestBaseBeforeInit() : ModuleTestBaseBeforeConfig() {}

	virtual void SetUp()
	{
		ModuleTestBaseBeforeConfig::SetUp();
		ASSERT_EQ(call_config(), 0);
	}
};

/// ���Ի��࣬����ģ��Init�׶κ�IJ���
class ModuleTestBaseAfterInit : public ModuleTestBaseBeforeInit
{
protected:
	ModuleTestBaseAfterInit() : ModuleTestBaseBeforeInit() {}

	virtual void SetUp()
	{
		ModuleTestBaseBeforeInit::SetUp();
		ASSERT_EQ(call_init(), 0);
	}
};