Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: downloads/boost_1_33_1/libs/assign/test/email_example.cpp @ 13

Last change on this file since 13 was 12, checked in by landauf, 17 years ago

added boost

  • Property svn:executable set to *
File size: 3.8 KB
Line 
1// Boost.Assign library
2//
3//  Copyright Thorsten Ottosen 2003-2004. Use, modification and
4//  distribution is subject to the Boost Software License, Version
5//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
6//  http://www.boost.org/LICENSE_1_0.txt)
7//
8// For more information, see http://www.boost.org/libs/assign/
9//
10
11
12#include <boost/detail/workaround.hpp>
13
14#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
15#  pragma warn -8091 // supress warning in Boost.Test
16#  pragma warn -8057 // unused argument argc/argv in Boost.Test
17#endif
18
19#include <boost/assign/list_inserter.hpp>
20#include <boost/test/test_tools.hpp>
21#include <boost/function.hpp>
22#include <boost/bind.hpp>
23#include <vector>
24#include <map>
25
26namespace ba = boost::assign;
27
28class email
29{
30public:
31    enum address_option
32    {
33        check_addr_book,
34        dont_check_addr_book
35    };
36   
37    typedef std::pair<std::string,address_option> bcc_type;
38    typedef std::vector< bcc_type >               bcc_map;
39    typedef std::map<std::string,address_option>  address_map;
40   
41   
42private:
43
44    mutable address_map      cc_list;
45    mutable address_map      to_list;
46    bcc_map                  bcc_list;
47           
48    struct add_to_map
49    {
50        address_map& m;
51   
52        add_to_map( address_map& m ) : m(m)       
53        {}
54   
55        void operator()( const std::string& name, address_option ao )
56        {
57            m[ name ] = ao; 
58        }
59       
60        void operator()( const std::string& name )
61        {
62            m[ name ] = check_addr_book;
63        }
64    };
65
66    struct add_to_vector
67    {
68        bcc_map& m;
69       
70        add_to_vector( bcc_map& m ) : m(m)
71        {}
72       
73        void operator()( const bcc_type& r )
74        {
75            m.push_back( r );
76        }
77    };
78
79public:
80   
81    ba::list_inserter< add_to_map >
82    add_cc( std::string name, address_option ao )
83    {
84        return ba::make_list_inserter( add_to_map( cc_list ) )( name, ao );
85    }
86
87    ba::list_inserter< add_to_map >
88    add_to( const std::string& name )
89    {
90        return ba::make_list_inserter( add_to_map( to_list ) )( name );
91    }
92   
93    ba::list_inserter< add_to_vector, bcc_type >
94    add_bcc( const bcc_type& bcc )
95    {
96        return ba::make_list_inserter( add_to_vector( bcc_list ) )( bcc );
97    }
98   
99    address_option
100    cc_at( const std::string& name ) const
101    {
102        return cc_list[ name ];
103    }
104   
105    address_option
106    to_at( const std::string& name ) const
107    {
108        return to_list[ name ];
109    }
110   
111    address_option
112    bcc_at( unsigned index ) const
113    {
114        return bcc_list.at( index ).second;
115    }
116};
117
118
119
120void check_list_inserter()
121{
122    using namespace boost::assign;
123
124    email e;
125    e.add_cc( "franz", email::dont_check_addr_book )
126            ( "hanz", email::check_addr_book )
127            ( "betty", email::dont_check_addr_book );
128    BOOST_CHECK_EQUAL( e.cc_at( "franz" ), email::dont_check_addr_book );
129    BOOST_CHECK_EQUAL( e.cc_at( "hanz" ), email::check_addr_book );
130    BOOST_CHECK_EQUAL( e.cc_at( "betty" ), email::dont_check_addr_book );
131
132    e.add_to( "betsy" )( "peter" );
133    BOOST_CHECK_EQUAL( e.cc_at( "betsy" ), email::check_addr_book );
134    BOOST_CHECK_EQUAL( e.cc_at( "peter" ), email::check_addr_book );
135   
136    e.add_bcc( email::bcc_type( "Mr. Foo", email::check_addr_book ) )
137             ( "Mr. Bar", email::dont_check_addr_book );
138    BOOST_CHECK_EQUAL( e.bcc_at( 0 ), email::check_addr_book );
139    BOOST_CHECK_EQUAL( e.bcc_at( 1 ), email::dont_check_addr_book );
140   
141}
142
143
144#include <boost/test/unit_test.hpp>
145using boost::unit_test::test_suite;
146
147test_suite* init_unit_test_suite( int argc, char* argv[] )
148{
149    test_suite* test = BOOST_TEST_SUITE( "List Test Suite" );
150
151    test->add( BOOST_TEST_CASE( &check_list_inserter ) );
152
153    return test;
154}
155
Note: See TracBrowser for help on using the repository browser.