00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #include "PSEvt/Event.h"
00018 #include "PSEvt/Exceptions.h"
00019 #include "PSEvt/ProxyDict.h"
00020 #include "pdsdata/xtc/DetInfo.hh"
00021
00022 using namespace PSEvt ;
00023
00024 #define BOOST_TEST_MODULE psevt-unit-test
00025 #include <boost/test/included/unit_test.hpp>
00026
00027
00028
00029
00030
00031
00032 class TestFixture {
00033 public:
00034 TestFixture()
00035 : amap(boost::make_shared<AliasMap>())
00036 , dict(boost::make_shared<ProxyDict>(amap))
00037 , evt(dict)
00038 , di1(0, Pds::DetInfo::Detector(1), 1, Pds::DetInfo::Device(1), 1)
00039 , di2(0, Pds::DetInfo::Detector(2), 2, Pds::DetInfo::Device(2), 2)
00040 {
00041 }
00042
00043 boost::shared_ptr<AliasMap> amap;
00044 boost::shared_ptr<ProxyDict> dict;
00045 Event evt;
00046 Pds::DetInfo di1;
00047 Pds::DetInfo di2;
00048 };
00049
00050 BOOST_FIXTURE_TEST_SUITE( proxyDictTest, TestFixture );
00051
00052
00053
00054 BOOST_AUTO_TEST_CASE( test )
00055 {
00056 boost::shared_ptr<int> p1(new int(1));
00057 BOOST_CHECK_NO_THROW( evt.put(p1) );
00058
00059 boost::shared_ptr<int> p2(new int(2));
00060 BOOST_CHECK_NO_THROW( evt.put(p2, "p2") );
00061
00062
00063 BOOST_CHECK_THROW( evt.put(p2, "p2"), ExceptionDuplicateKey );
00064
00065 boost::shared_ptr<int> p3(new int(3));
00066 BOOST_CHECK_NO_THROW( evt.put(p3, di1) );
00067
00068 BOOST_CHECK_THROW( evt.put(p3, di1), ExceptionDuplicateKey );
00069
00070 boost::shared_ptr<int> p4(new int(4));
00071 BOOST_CHECK_NO_THROW( evt.put(p4, di2) );
00072
00073 BOOST_CHECK_NO_THROW( evt.put(p3, di1, "p3") );
00074 BOOST_CHECK_NO_THROW( evt.put(p4, di2, "p4") );
00075
00076 boost::shared_ptr<Proxy<int> > pp1( new DataProxy<int>(p1) );
00077 BOOST_CHECK_NO_THROW( evt.putProxy(pp1, "pp1") );
00078
00079 boost::shared_ptr<Proxy<int> > pp2( new DataProxy<int>(p2) );
00080 BOOST_CHECK_NO_THROW( evt.putProxy(pp2, "pp2") );
00081
00082
00083
00084 BOOST_CHECK( evt.exists<int>() );
00085 BOOST_CHECK( evt.exists<int>("p2") );
00086 BOOST_CHECK( evt.exists<int>(di1) );
00087 BOOST_CHECK( evt.exists<int>(di2) );
00088 BOOST_CHECK( evt.exists<int>(di1, "p3") );
00089 BOOST_CHECK( evt.exists<int>(di2, "p4") );
00090
00091 BOOST_CHECK( not evt.exists<int>("not") );
00092 BOOST_CHECK( not evt.exists<int>(di1, "not") );
00093
00094 BOOST_CHECK( evt.exists<int>("pp1") );
00095 BOOST_CHECK( evt.exists<int>("pp2") );
00096
00097
00098
00099 p1 = evt.get();
00100 BOOST_CHECK( p1.get() );
00101 BOOST_CHECK_EQUAL( *p1, 1 );
00102
00103 p2 = evt.get("p2");
00104 BOOST_CHECK( p2.get() );
00105 BOOST_CHECK_EQUAL( *p2, 2 );
00106
00107 p3 = evt.get(di1);
00108 BOOST_CHECK( p3.get() );
00109 BOOST_CHECK_EQUAL( *p3, 3 );
00110
00111 p4 = evt.get(di2);
00112 BOOST_CHECK( p4.get() );
00113 BOOST_CHECK_EQUAL( *p4, 4 );
00114
00115 p3 = evt.get(di1, "p3");
00116 BOOST_CHECK( p3.get() );
00117 BOOST_CHECK_EQUAL( *p3, 3 );
00118
00119 p4 = evt.get(di2, "p4");
00120 BOOST_CHECK( p4.get() );
00121 BOOST_CHECK_EQUAL( *p4, 4 );
00122
00123 p1 = evt.get("pp1");
00124 BOOST_CHECK( p1.get() );
00125 BOOST_CHECK_EQUAL( *p1, 1 );
00126
00127 p2 = evt.get("pp2");
00128 BOOST_CHECK( p2.get() );
00129 BOOST_CHECK_EQUAL( *p2, 2 );
00130
00131
00132
00133 BOOST_CHECK( evt.remove<int>() );
00134 BOOST_CHECK( not evt.exists<int>() );
00135
00136 BOOST_CHECK( evt.remove<int>("p2") );
00137 BOOST_CHECK( not evt.exists<int>("p2") );
00138
00139 BOOST_CHECK( evt.remove<int>(di1) );
00140 BOOST_CHECK( not evt.exists<int>(di1) );
00141
00142 BOOST_CHECK( evt.remove<int>(di1, "p3") );
00143 BOOST_CHECK( not evt.exists<int>(di1, "p3") );
00144
00145 BOOST_CHECK( not evt.remove<int>(di1, "p333") );
00146 BOOST_CHECK( not evt.exists<int>(di1, "p333") );
00147 }
00148
00149
00150
00151 BOOST_AUTO_TEST_CASE( test_keys )
00152 {
00153 boost::shared_ptr<int> p0(new int(0));
00154 BOOST_CHECK_NO_THROW( evt.put(p0) );
00155
00156 boost::shared_ptr<int> p1(new int(1));
00157 BOOST_CHECK_NO_THROW( evt.put(p1, di1) );
00158
00159 boost::shared_ptr<int> p2(new int(2));
00160 BOOST_CHECK_NO_THROW( evt.put(p2, di2) );
00161
00162 boost::shared_ptr<int> p3(new int(3));
00163 BOOST_CHECK_NO_THROW( evt.put(p3, di2, "p3") );
00164
00165 std::list<EventKey> keys = evt.keys();
00166 BOOST_CHECK_EQUAL( keys.size(), 4U );
00167
00168 keys = evt.keys(Source("*.0:*.0"));
00169 BOOST_CHECK_EQUAL( keys.size(), 0U );
00170
00171 keys = evt.keys(Source("*.1:*.1"));
00172 BOOST_CHECK_EQUAL( keys.size(), 1U );
00173
00174 keys = evt.keys(Source("*.2:*.2"));
00175 BOOST_CHECK_EQUAL( keys.size(), 2U );
00176
00177 }
00178
00179
00180
00181 BOOST_AUTO_TEST_SUITE_END()