1 #include <ostream>
2 #include "config_param.h"
3 #include "doctest.h"
4 #include <climits>
5 
6 namespace {
7 enum class Color { Red, Blue, Green };
8 }
9 
10 template class ConfigParam<int>;
11 template class ConfigParam<std::string>;
12 
13 template class RangeConfigParam<int>;
14 template class RangeConfigParam<float>;
15 
16 template class SetConfigParam<int>;
17 template class SetConfigParam<float>;
18 template class SetConfigParam<std::string>;
19 
20 template class EnumConfigParam<Color>;
21 
22 static_assert(IsConfigParamT<ConfigParam<int>>::value, "ConfigParam Broken");
23 static_assert(IsConfigParamT<RangeConfigParam<int>>::value, "ConfigParam Broken");
24 static_assert(IsConfigParamT<BoolConfigParam>::value, "ConfigParam Broken");
25 static_assert(IsConfigParamT<SetConfigParam<int>>::value, "ConfigParam Broken");
26 static_assert(IsConfigParamT<EnumConfigParam<Color>>::value, "ConfigParam Broken");
27 
28 TEST_SUITE_BEGIN("ConfigParam");
29 
30 TEST_CASE("Bool") {
31 	BoolConfigParam p;
32 
33 	REQUIRE(p.Enabled());
34 	REQUIRE(!p.Locked());
35 	REQUIRE_EQ(p.Get(), false);
36 	REQUIRE(p.IsValid(false));
37 	REQUIRE(p.IsValid(true));
38 
39 	p = BoolConfigParam(true);
40 
41 	REQUIRE(p.Enabled());
42 	REQUIRE(!p.Locked());
43 	REQUIRE_EQ(p.Get(), true);
44 	REQUIRE(p.IsValid(false));
45 	REQUIRE(p.IsValid(true));
46 
47 	REQUIRE(p.Set(false));
48 	REQUIRE_EQ(p.Get(), false);
49 
50 	REQUIRE(p.Set(true));
51 	REQUIRE_EQ(p.Get(), true);
52 
53 	p.Lock(true);
54 
55 	REQUIRE(p.Enabled());
56 	REQUIRE(p.Locked());
57 	REQUIRE_EQ(p.Get(), true);
58 	REQUIRE(!p.IsValid(false));
59 	REQUIRE(p.IsValid(true));
60 
61 	REQUIRE(!p.Set(false));
62 	REQUIRE_EQ(p.Get(), true);
63 
64 	p.Lock(false);
65 
66 	REQUIRE(p.Enabled());
67 	REQUIRE(p.Locked());
68 	REQUIRE_EQ(p.Get(), false);
69 	REQUIRE(p.IsValid(false));
70 	REQUIRE(!p.IsValid(true));
71 
72 	REQUIRE(!p.Set(true));
73 	REQUIRE_EQ(p.Get(), false);
74 
75 	p.Disable();
76 	REQUIRE(!p.Enabled());
77 	REQUIRE(p.Locked());
78 	REQUIRE(!p.IsValid(false));
79 	REQUIRE(!p.IsValid(true));
80 }
81 
82 TEST_CASE("Int") {
83 	IntConfigParam p;
84 
85 	REQUIRE(p.Enabled());
86 	REQUIRE(!p.Locked());
87 	REQUIRE(p.IsValid(0));
88 	REQUIRE_EQ(p.Get(), 0);
89 	REQUIRE(p.IsValid(INT_MIN));
90 	REQUIRE(p.IsValid(INT_MAX));
91 
92 	p.Lock(5);
93 	REQUIRE(p.Enabled());
94 	REQUIRE(p.Locked());
95 	REQUIRE_EQ(p.Get(), 5);
96 	REQUIRE(!p.IsValid(4));
97 	REQUIRE(p.IsValid(5));
98 	REQUIRE(!p.IsValid(6));
99 	REQUIRE(!p.IsValid(INT_MIN));
100 	REQUIRE(!p.IsValid(INT_MAX));
101 
102 	REQUIRE(!p.Set(0));
103 	REQUIRE_EQ(p.Get(), 5);
104 
105 	p.Disable();
106 	REQUIRE(!p.Enabled());
107 	REQUIRE(p.Locked());
108 	REQUIRE(!p.IsValid(0));
109 	REQUIRE(!p.IsValid(5));
110 	REQUIRE(!p.IsValid(INT_MIN));
111 	REQUIRE(!p.IsValid(INT_MAX));
112 
113 	REQUIRE(!p.Set(0));
114 }
115 
116 TEST_CASE("String") {
117 	StringConfigParam p("Hello World");
118 
119 	REQUIRE(p.Enabled());
120 	REQUIRE(!p.Locked());
121 	REQUIRE(p.IsValid(""));
122 	REQUIRE_EQ(p.Get(), "Hello World");
123 
124 	REQUIRE(p.Set("Alex"));
125 	REQUIRE_EQ(p.Get(), "Alex");
126 }
127 
128