Imported Upstream version 14.44.1
[platform/upstream/libzypp.git] / tests / zypp / UserData_test.cc
1 #include <boost/test/auto_unit_test.hpp>
2 #include <iostream>
3 #include <set>
4 #include "zypp/UserData.h"
5
6 using std::cout;
7 using std::endl;
8
9 using zypp::callback::UserData;
10 const std::string key( "key" );
11
12 #define checkIsEmpty(v) \
13   BOOST_CHECK( !v );    \
14   BOOST_CHECK( v.empty() );     \
15   BOOST_CHECK_EQUAL( v.size(), 0 );     \
16   BOOST_CHECK_EQUAL( v.haskey( key ), false );  \
17   BOOST_CHECK_EQUAL( v.hasvalue( key ), false );        \
18   BOOST_CHECK_EQUAL( v.getvalue( key ).empty(), true );
19
20 #define checkIsNotEmpty(v,s)    \
21   BOOST_CHECK( v );     \
22   BOOST_CHECK( !v.empty() );    \
23   if ( s )      \
24   { BOOST_CHECK_EQUAL( v.size(), s ); } \
25   else  \
26   { BOOST_CHECK( v.size() ); }  \
27   BOOST_CHECK_EQUAL( v.haskey( key ), true );
28
29
30 BOOST_AUTO_TEST_CASE(useruata_default)
31 {
32   UserData v;
33   checkIsEmpty( v );
34
35   // set key with empty value
36   v.reset( key );
37   checkIsNotEmpty( v, 1 );
38   BOOST_CHECK_EQUAL( v.hasvalue( key ), false );
39   BOOST_CHECK_EQUAL( v.getvalue( key ).empty(), true );
40
41   std::string rs;
42   unsigned    ru = 0;
43   int         ri = 0;
44   char        rc = 0;
45
46   // set key with value
47   v.set( key, 42 );
48   BOOST_CHECK_EQUAL( v.hasvalue( key ), true );
49   BOOST_CHECK_EQUAL( v.getvalue( key ).empty(), false );
50
51   // get back data
52   BOOST_CHECK_EQUAL( v.get( key, rs ), false );
53   BOOST_CHECK_EQUAL( v.get( key, ru ), false );
54   BOOST_CHECK_EQUAL( v.get( key, ri ), true );
55   BOOST_CHECK_EQUAL( v.get( key, rc ), false );
56   BOOST_CHECK_EQUAL( ru, 0 );
57   BOOST_CHECK_EQUAL( ri, 42 );
58   BOOST_CHECK_EQUAL( rc, 0 );
59
60   v.set( key, 43U );
61   BOOST_CHECK_EQUAL( v.get( key, rs ), false );
62   BOOST_CHECK_EQUAL( v.get( key, ru ), true );
63   BOOST_CHECK_EQUAL( v.get( key, ri ), false );
64   BOOST_CHECK_EQUAL( v.get( key, rc ), false );
65   BOOST_CHECK_EQUAL( ru, 43 );
66   BOOST_CHECK_EQUAL( ri, 42 );
67   BOOST_CHECK_EQUAL( rc, 0 );
68
69   // set key with empty value
70   v.reset( key );
71   BOOST_CHECK_EQUAL( v.hasvalue( key ), false );
72   BOOST_CHECK_EQUAL( v.getvalue( key ).empty(), true );
73   checkIsNotEmpty( v, 1 );
74
75   // erase key
76   v.erase( key );
77   BOOST_CHECK_EQUAL( v.hasvalue( key ), false );
78   BOOST_CHECK_EQUAL( v.getvalue( key ).empty(), true );
79   checkIsEmpty( v );
80
81   // const may add but not manip non-empty values
82   const UserData & cv( v );
83   BOOST_CHECK_EQUAL( cv.reset( key ), true );   // add new key: ok
84   BOOST_CHECK_EQUAL( cv.set( key, 42 ), true ); // empty -> non-empty: ok
85   BOOST_CHECK_EQUAL( cv.set( key, 43 ), false );// change non-empty: not ok
86   BOOST_CHECK_EQUAL( cv.reset( key ), false );  // change non-empty: not ok
87 }