00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #include <iostream>
00014 #include <sstream>
00015 #include <vector>
00016 #include <list>
00017
00018
00019
00020
00021 #include "ConfigSvc/ConfigSvc.h"
00022 #include "ConfigSvc/ConfigSvcImplFile.h"
00023
00024 #define BOOST_TEST_MODULE configSvcTest
00025 #include <boost/test/included/unit_test.hpp>
00026
00027
00028
00029
00030
00031
00032 namespace {
00033
00034
00035
00036 const char* config = "\
00037 # comment\n\
00038 [section1]\n\
00039 paramInt1 = 0\n\
00040 paramInt2 = -1000\n\
00041 paramInt3 = 1000\n\
00042 \n\
00043 paramFloat1 = 0.123456\n\
00044 paramFloat2 = 1e10\n\
00045 paramFloat3 = -1e10\n\
00046 paramFloat4 = 1e-10\n\
00047 \n\
00048 paramBool1 = 0\n\
00049 paramBool2 = 1\n\
00050 paramBool3 = no\n\
00051 paramBool4 = yes\n\
00052 paramBool5 = off\n\
00053 paramBool6 = on\n\
00054 paramBool7 = FALSE\n\
00055 paramBool8 = True\n\
00056 \n\
00057 paramString1 = \n\
00058 paramString2 = OneWord \n\
00059 paramString3 = Two Words \n\
00060 \n\
00061 paramList1 = \n\
00062 paramList2 = 1000 \n\
00063 paramList3 = 2000 3000 \n\
00064 ";
00065
00066
00067 }
00068
00069 class TestFixture {
00070 public:
00071 TestFixture() {
00072 std::istringstream stream(config);
00073
00074 boost::shared_ptr<ConfigSvc::ConfigSvcImplI> cfgImpl ( new ConfigSvc::ConfigSvcImplFile(stream) );
00075
00076 ConfigSvc::ConfigSvc::init(cfgImpl);
00077 }
00078 };
00079
00080 BOOST_GLOBAL_FIXTURE( TestFixture );
00081
00082
00083
00084 BOOST_AUTO_TEST_CASE( test_exceptions )
00085 {
00086 ConfigSvc::ConfigSvc cfgsvc;
00087
00088 BOOST_CHECK_THROW(cfgsvc.get("unknown_section", "unknown_param"), ConfigSvc::ExceptionMissing);
00089 BOOST_CHECK_THROW(cfgsvc.get("section1", "unknown_param"), ConfigSvc::ExceptionMissing);
00090 BOOST_CHECK_THROW(cfgsvc.getList("unknown_section", "unknown_param"), ConfigSvc::ExceptionMissing);
00091 BOOST_CHECK_THROW(cfgsvc.getList("section1", "unknown_param"), ConfigSvc::ExceptionMissing);
00092
00093 BOOST_CHECK_NO_THROW(cfgsvc.get("unknown_section", "unknown_param", 0));
00094 BOOST_CHECK_NO_THROW(cfgsvc.get("section1", "unknown_param", 0));
00095 BOOST_CHECK_NO_THROW(cfgsvc.getList("unknown_section", "unknown_param", std::vector<int>()));
00096 BOOST_CHECK_NO_THROW(cfgsvc.getList("section1", "unknown_param", std::list<int>()));
00097 }
00098
00099
00100
00101 BOOST_AUTO_TEST_CASE( test_int )
00102 {
00103 ConfigSvc::ConfigSvc cfgsvc;
00104
00105 int val;
00106
00107 val = cfgsvc.get("section1", "paramInt1");
00108 BOOST_CHECK_EQUAL(val, 0);
00109 val = cfgsvc.get("section1", "paramInt2");
00110 BOOST_CHECK_EQUAL(val, -1000);
00111 val = cfgsvc.get("section1", "paramInt3");
00112 BOOST_CHECK_EQUAL(val, 1000);
00113 val = cfgsvc.get("section1", "paramInt3", -1000000);
00114 BOOST_CHECK_EQUAL(val, 1000);
00115 val = cfgsvc.get("section1", "unknown_param", -1000000);
00116 BOOST_CHECK_EQUAL(val, -1000000);
00117 }
00118
00119
00120
00121 BOOST_AUTO_TEST_CASE( test_double )
00122 {
00123 ConfigSvc::ConfigSvc cfgsvc;
00124
00125 double val;
00126
00127 val = cfgsvc.get("section1", "paramFloat1");
00128 BOOST_CHECK_EQUAL(val, 0.123456);
00129 val = cfgsvc.get("section1", "paramFloat2");
00130 BOOST_CHECK_EQUAL(val, 1e10);
00131 val = cfgsvc.get("section1", "paramFloat3");
00132 BOOST_CHECK_EQUAL(val, -1e10);
00133 val = cfgsvc.get("section1", "paramFloat4");
00134 BOOST_CHECK_EQUAL(val, 1e-10);
00135 }
00136
00137
00138
00139 BOOST_AUTO_TEST_CASE( test_bool )
00140 {
00141 ConfigSvc::ConfigSvc cfgsvc;
00142
00143 bool val;
00144
00145 val = cfgsvc.get("section1", "paramBool1");
00146 BOOST_CHECK_EQUAL(val, false);
00147 val = cfgsvc.get("section1", "paramBool2");
00148 BOOST_CHECK_EQUAL(val, true);
00149 val = cfgsvc.get("section1", "paramBool3");
00150 BOOST_CHECK_EQUAL(val, false);
00151 val = cfgsvc.get("section1", "paramBool4");
00152 BOOST_CHECK_EQUAL(val, true);
00153 val = cfgsvc.get("section1", "paramBool5");
00154 BOOST_CHECK_EQUAL(val, false);
00155 val = cfgsvc.get("section1", "paramBool6");
00156 BOOST_CHECK_EQUAL(val, true);
00157 val = cfgsvc.get("section1", "paramBool7");
00158 BOOST_CHECK_EQUAL(val, false);
00159 val = cfgsvc.get("section1", "paramBool8");
00160 BOOST_CHECK_EQUAL(val, true);
00161 val = cfgsvc.get("section1", "paramBool8", false);
00162 BOOST_CHECK_EQUAL(val, true);
00163 val = cfgsvc.get("section1", "unknown_param", false);
00164 BOOST_CHECK_EQUAL(val, false);
00165 }
00166
00167
00168
00169 BOOST_AUTO_TEST_CASE( test_str )
00170 {
00171 ConfigSvc::ConfigSvc cfgsvc;
00172
00173 std::string val;
00174 val = cfgsvc.getStr("section1", "paramString1");
00175 BOOST_CHECK_EQUAL(val, "");
00176 val = cfgsvc.getStr("section1", "paramString2");
00177 BOOST_CHECK_EQUAL(val, "OneWord");
00178 val = cfgsvc.getStr("section1", "paramString3");
00179 BOOST_CHECK_EQUAL(val, "Two Words");
00180 }
00181
00182
00183
00184 BOOST_AUTO_TEST_CASE( test_charp )
00185 {
00186 ConfigSvc::ConfigSvc cfgsvc;
00187
00188 const char* val;
00189 val = cfgsvc.get("section1", "paramString1");
00190 BOOST_CHECK_EQUAL(val, std::string(""));
00191 val = cfgsvc.get("section1", "paramString2");
00192 BOOST_CHECK_EQUAL(val, std::string("OneWord"));
00193 val = cfgsvc.get("section1", "paramString3");
00194 BOOST_CHECK_EQUAL(val, std::string("Two Words"));
00195 }
00196
00197
00198
00199 BOOST_AUTO_TEST_CASE( test_list_str )
00200 {
00201 ConfigSvc::ConfigSvc cfgsvc;
00202
00203 std::vector<std::string> val;
00204 val = cfgsvc.getList("section1", "paramList1");
00205 BOOST_CHECK(val.empty());
00206 val = cfgsvc.getList("section1", "paramList2");
00207 BOOST_CHECK_EQUAL(val.size(), 1U);
00208 BOOST_CHECK_EQUAL(val[0], "1000");
00209 val = cfgsvc.getList("section1", "paramList3");
00210 BOOST_CHECK_EQUAL(val.size(), 2U);
00211 BOOST_CHECK_EQUAL(val[0], "2000");
00212 BOOST_CHECK_EQUAL(val[1], "3000");
00213 }
00214
00215
00216
00217 BOOST_AUTO_TEST_CASE( test_list_int )
00218 {
00219 ConfigSvc::ConfigSvc cfgsvc;
00220
00221 std::vector<int> val;
00222 val = cfgsvc.getList("section1", "paramList1");
00223 BOOST_CHECK(val.empty());
00224 val = cfgsvc.getList("section1", "paramList2");
00225 BOOST_CHECK_EQUAL(val.size(), 1U);
00226 BOOST_CHECK_EQUAL(val[0], 1000);
00227 val = cfgsvc.getList("section1", "paramList3");
00228 BOOST_CHECK_EQUAL(val.size(), 2U);
00229 BOOST_CHECK_EQUAL(val[0], 2000);
00230 BOOST_CHECK_EQUAL(val[1], 3000);
00231 }
00232