5 #ifndef NDS2_CLIENT_TEST_DUMMY_SOCKET_HH
6 #define NDS2_CLIENT_TEST_DUMMY_SOCKET_HH
14 struct RecordingDummySocket
16 std::vector< char > internal_;
18 std::vector< char >& s_;
20 RecordingDummySocket( ) : internal_( ), s_( internal_ )
23 explicit RecordingDummySocket( std::vector< char >& s )
24 : internal_( ), s_( s )
27 RecordingDummySocket(
const RecordingDummySocket& other ) =
delete;
28 RecordingDummySocket( RecordingDummySocket&& other ) =
default;
31 write_all(
const char* start,
const char* end )
34 auto dest = std::back_inserter< std::vector< char > >( s_ );
35 std::copy( start, end, dest );
41 return std::string( s_.data( ), s_.size( ) );
47 typedef std::vector< char > storage;
51 DummySocket(
const std::string& data )
52 : data_( data.data( ), data.data( ) + data.size( ) )
56 DummySocket(
const std::vector< char >& data ) : data_{ data }
59 DummySocket( std::vector< char >&& data ) : data_{ std::move( data ) }
63 template <
typename It >
65 _append_data( It start, It end )
67 storage::size_type cur_size = data_.size( );
68 data_.resize( cur_size + std::distance( start, end ) );
69 std::copy( start, end, data_.data( ) + cur_size );
73 read_available(
char* start,
char* end )
75 ::size_t len = end - start;
76 if ( data_.size( ) == 0 )
77 throw std::runtime_error(
"Out of test data to read" );
78 if ( len > data_.size( ) )
80 std::copy( data_.begin( ), data_.begin( ) + len, start );
81 std::move( data_.begin( ) + len, data_.end( ), data_.begin( ) );
82 data_.resize( data_.size( ) - len );
88 #endif // NDS2_CLIENT_TEST_DUMMY_SOCKET_HH