PageRenderTime 37ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 0ms

/libs/cgi/test/run/request_test_template.hpp

http://github.com/darrengarvey/cgi
C++ Header | 78 lines | 55 code | 11 blank | 12 comment | 2 complexity | 1ed9a83f24d584969cd2a87834886392 MD5 | raw file
  1. using std::string;
  2. template<typename Request>
  3. void test_env_data(Request& req)
  4. {
  5. /* Check environment parsing */
  6. BOOST_CHECK( req.env.size() );
  7. BOOST_CHECK_EQUAL( string(req.env["HTTP_HOST"]), string("localhost") );
  8. BOOST_CHECK_EQUAL( string(req.env["EMPTY_VAR"]), string("") );
  9. BOOST_CHECK_EQUAL( string(req.env["UGLY_VAR"]), string("$££$^%%£&&^%@%26$ £_abcd") );
  10. BOOST_CHECK_EQUAL( string(req.env["QUERY_STRING"])
  11. , string("hello=world&foo=bar&encoded=%22!%C2%A3$%^$*^hh%%thd@:~") );
  12. /* Check case-insensitive name comparing */
  13. BOOST_CHECK_EQUAL( string(req.env["http_host"]), string("localhost") );
  14. /* Check helper function (need to test them all?) */
  15. BOOST_CHECK_EQUAL( req.script_name(), string("some/test/script") );
  16. }
  17. template<typename Request>
  18. void test_get_data(Request& req)
  19. {
  20. /* Make sure the data is going to be parsed */
  21. BOOST_CHECK_EQUAL( req.request_method(), "GET" );
  22. /* Check GET data/query string parsing */
  23. BOOST_CHECK( req.get.size() );
  24. BOOST_CHECK_EQUAL( string(req.get["hello"]), string("world") );
  25. BOOST_CHECK_EQUAL( string(req.get["foo"]), string("bar") );
  26. /* Case-insensitive check */
  27. BOOST_CHECK_EQUAL( string(req.get["FOO"]), string("bar") );
  28. /* Value should be case-sensitive */
  29. BOOST_CHECK_NE( string(req.get["foo"]), string("BAR") );
  30. /* Check url-decoding */
  31. BOOST_CHECK_EQUAL( string(req.get["encoded"]), string("\"!£$%^$*^hh%%thd@:~") );
  32. }
  33. template<typename Request>
  34. void test_one_cookie(Request& req)
  35. {
  36. /* Check cookie parsing */
  37. BOOST_CHECK( req.cookies.size() );
  38. BOOST_CHECK_EQUAL( string(req.cookies["foo"]), string("bar") );
  39. /* Check case-insensitive name comparison */
  40. BOOST_CHECK_EQUAL( string(req.cookies["FOO"]), string("bar") );
  41. }
  42. template<typename Request>
  43. void test_two_cookies(Request& req)
  44. {
  45. BOOST_CHECK_EQUAL( string(req.cookies["foo"]), string("bar") );
  46. BOOST_CHECK_EQUAL( string(req.cookies["another_one"]), string("stuff") );
  47. }
  48. template<typename Request>
  49. void test_encoded_cookie(Request& req)
  50. {
  51. BOOST_CHECK_EQUAL( string(req.cookies["foo"]), string("bar") );
  52. BOOST_CHECK_EQUAL( string(req.cookies["encoded"]), string("\"£$%^$*^hh%%thd@:") );
  53. }
  54. #include <string>
  55. #include <cstdlib>
  56. #include <boost/config.hpp>
  57. #ifdef BOOST_WINDOWS
  58. // MSVC doesn't support setenv, but it does support putenv
  59. void setenv(std::string const& name, std::string const& val, int reset = 0)
  60. {
  61. //char *envvar = new char["
  62. if (0 != _putenv((name + "=" + val).c_str()))
  63. {
  64. std::cerr<< "Error adding environment variable." << std::endl;
  65. }
  66. }
  67. #endif