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