@@ -47,7 +47,16 @@ BOOST_AUTO_TEST_CASE(incremental_parser_parse_http_method) {
4747BOOST_CHECK_EQUAL (parsed_ok,true );
4848BOOST_CHECK (!boost::empty (result_range));
4949 std::stringparsed (boost::begin (result_range),boost::end (result_range));
50- std::cout <<" PARSED:" << parsed <<" " << p.state () << std::endl;
50+ std::cout <<" PARSED:" << parsed <<" [state:" << p.state () <<" ]" << std::endl;
51+
52+ std::string invalid_http_method =" get" ;
53+ p.reset ();
54+ fusion::tie (parsed_ok, result_range) = p.parse_until (
55+ request_parser_type::method_done
56+ , invalid_http_method);
57+ BOOST_CHECK_EQUAL (parsed_ok,false );
58+ parsed.assign (boost::begin (result_range),boost::end (result_range));
59+ std::cout <<" PARSED:" << parsed <<" [state:" << p.state () <<" ]" << std::endl;
5160}
5261
5362BOOST_AUTO_TEST_CASE (incremental_parser_parse_http_uri) {
@@ -63,7 +72,15 @@ BOOST_AUTO_TEST_CASE(incremental_parser_parse_http_uri) {
6372BOOST_CHECK_EQUAL (parsed_ok,true );
6473BOOST_CHECK (!boost::empty (result_range));
6574 std::stringparsed (boost::begin (result_range),boost::end (result_range));
66- std::cout <<" PARSED:" << parsed <<" " << p.state () << std::endl;
75+ std::cout <<" PARSED:" << parsed <<" [state:" << p.state () <<" ]" << std::endl;
76+
77+ std::string invalid_http_request =" GET /\t HTTP/1.1\r\n " ;
78+ p.reset ();
79+ fusion::tie (parsed_ok, result_range) = p.parse_until (
80+ request_parser_type::uri_done, invalid_http_request);
81+ BOOST_CHECK_EQUAL (parsed_ok,false );
82+ parsed.assign (boost::begin (result_range),boost::end (result_range));
83+ std::cout <<" PARSED:" << parsed <<" [state:" << p.state () <<" ]" << std::endl;
6784}
6885
6986BOOST_AUTO_TEST_CASE (incremental_parser_parse_http_version) {
@@ -79,5 +96,39 @@ BOOST_AUTO_TEST_CASE(incremental_parser_parse_http_version) {
7996BOOST_CHECK_EQUAL (parsed_ok,true );
8097BOOST_CHECK (!boost::empty (result_range));
8198 std::stringparsed (boost::begin (result_range),boost::end (result_range));
82- std::cout <<" PARSED:" << parsed <<" " << p.state () << std::endl;
99+ std::cout <<" PARSED:" << parsed <<" [state:" << p.state () <<" ]" << std::endl;
100+
101+ std::string invalid_http_request =" GET / HTTP 1.1\r\n " ;
102+ p.reset ();
103+ fusion::tie (parsed_ok, result_range) = p.parse_until (
104+ request_parser_type::version_done, invalid_http_request);
105+ BOOST_CHECK_EQUAL (parsed_ok,false );
106+ parsed.assign (boost::begin (result_range),boost::end (result_range));
107+ std::cout <<" PARSED:" << parsed <<" [state:" << p.state () <<" ]" << std::endl;
108+ }
109+
110+ BOOST_AUTO_TEST_CASE (incremental_parser_parse_http_headers) {
111+ request_parser<tags::default_string> p;
112+ logic::tribool parsed_ok =false ;
113+ typedef request_parser<tags::default_string> request_parser_type;
114+ typedef boost::iterator_range<std::string::const_iterator> range_type;
115+ range_type result_range;
116+
117+ std::string valid_http_request =" GET / HTTP/1.1\r\n Host: cpp-netlib.org\r\n\r\n " ;
118+ fusion::tie (parsed_ok, result_range) = p.parse_until (
119+ request_parser_type::headers_done, valid_http_request);
120+ BOOST_CHECK_EQUAL (parsed_ok,true );
121+ BOOST_CHECK (!boost::empty (result_range));
122+ std::stringparsed (boost::begin (result_range),boost::end (result_range));
123+ std::cout <<" PARSED:" << parsed <<" [state:" << p.state () <<" ]" << std::endl;
124+
125+ valid_http_request =" GET / HTTP/1.1\r\n Host: cpp-netlib.org\r\n Connection: close\r\n\r\n " ;
126+ p.reset ();
127+ fusion::tie (parsed_ok, result_range) = p.parse_until (
128+ request_parser_type::headers_done, valid_http_request);
129+ BOOST_CHECK_EQUAL (parsed_ok,true );
130+ BOOST_CHECK (!boost::empty (result_range));
131+ parsed.assign (boost::begin (result_range),boost::end (result_range));
132+ std::cout <<" PARSED:" << parsed <<" [state:" << p.state () <<" ]" << std::endl;
83133}
134+