codecov-io: ## [Current coverage](https://codecov.io/gh/falconry/falcon/pull/993?src=pr) is 100% (diff: 100%)
> Merging [#993](https://codecov.io/gh/falconry/falcon/pull/993?src=pr) into [master](https://codecov.io/gh/falconry/falcon/branch/master?src=pr) will not change coverage

```diff
@@           master   #993   diff @@
====================================
  Files          31     31          
  Lines        2066   2066          
  Methods         0      0          
  Messages        0      0          
  Branches      335    335          
====================================
  Hits         2066   2066          
  Misses          0      0          
  Partials        0      0          
```

> Powered by [Codecov](https://codecov.io?src=pr). Last update [673bb2e...4fa2fa6](https://codecov.io/gh/falconry/falcon/compare/673bb2e13613f04462a5515ba41f84dbab142970...4fa2fa63786fecc043c0dc370aa504756016240d?src=pr)
diff --git a/falcon/responders.py b/falcon/responders.py
index da093e4..f4dce2f 100644
--- a/falcon/responders.py
+++ b/falcon/responders.py
@@ -17,7 +17,7 @@
 from falcon.errors import HTTPBadRequest
 from falcon.errors import HTTPMethodNotAllowed
 from falcon.errors import HTTPNotFound
-from falcon.status_codes import HTTP_204
+from falcon.status_codes import HTTP_200
 
 
 def path_not_found(req, resp, **kwargs):
@@ -56,7 +56,7 @@ def create_default_options(allowed_methods):
     allowed = ', '.join(allowed_methods)
 
     def on_options(req, resp, **kwargs):
-        resp.status = HTTP_204
+        resp.status = HTTP_200
         resp.set_header('Allow', allowed)
         resp.set_header('Content-Length', '0')
 

Default OPTIONS responder does not set Content-Length to "0"
Per RFC 7231:

> A server MUST generate a Content-Length field with a value of "0" if no payload body is to be sent in the response.

diff --git a/tests/test_after_hooks.py b/tests/test_after_hooks.py
index d3ca908..7847b85 100644
--- a/tests/test_after_hooks.py
+++ b/tests/test_after_hooks.py
@@ -210,7 +210,7 @@ class TestHooks(testing.TestCase):
 
         # Decorator should not affect the default on_options responder
         result = self.simulate_options('/wrapped')
-        self.assertEqual(result.status_code, 204)
+        self.assertEqual(result.status_code, 200)
         self.assertFalse(result.text)
 
     def test_wrapped_resource_with_hooks_aware_of_resource(self):
@@ -230,5 +230,5 @@ class TestHooks(testing.TestCase):
 
         # Decorator should not affect the default on_options responder
         result = self.simulate_options('/wrapped_aware')
-        self.assertEqual(result.status_code, 204)
+        self.assertEqual(result.status_code, 200)
         self.assertFalse(result.text)
diff --git a/tests/test_http_method_routing.py b/tests/test_http_method_routing.py
index 1f1e79b..7949692 100644
--- a/tests/test_http_method_routing.py
+++ b/tests/test_http_method_routing.py
@@ -89,6 +89,7 @@ class MiscResource(object):
         pass
 
     def on_options(self, req, resp):
+        # NOTE(kgriffs): The default responder returns 200
         resp.status = falcon.HTTP_204
 
         # NOTE(kgriffs): This is incorrect, but only return GET so
@@ -192,16 +193,16 @@ class TestHttpMethodRouting(testing.TestBase):
 
             self.assertThat(headers, Contains(allow_header))
 
-    def test_on_options(self):
+    def test_default_on_options(self):
         self.simulate_request('/things/84/stuff/65', method='OPTIONS')
-        self.assertEqual(self.srmock.status, falcon.HTTP_204)
+        self.assertEqual(self.srmock.status, falcon.HTTP_200)
 
         headers = self.srmock.headers
         allow_header = ('allow', 'GET, HEAD, PUT')
 
         self.assertThat(headers, Contains(allow_header))
 
-    def test_default_on_options(self):
+    def test_on_options(self):
         self.simulate_request('/misc', method='OPTIONS')
         self.assertEqual(self.srmock.status, falcon.HTTP_204)
 

pip install -e .
parse_log_pytest
requirements.txt
pytest
apt-get update apt-get install -y gcc
3.5
tools/test-requires
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
attrs==22.2.0
certifi==2021.5.30
charset-normalizer==2.0.12
coverage==6.2
ddt==1.7.2
-e git+https://github.com/falconry/falcon.git@673bb2e13613f04462a5515ba41f84dbab142970#egg=falcon
fixtures==4.0.1
idna==3.10
importlib-metadata==4.8.3
iniconfig==1.1.1
packaging==21.3
pbr==6.1.1
pluggy==1.0.0
py==1.11.0
pyparsing==3.1.4
pytest==7.0.1
python-mimeparse==1.6.0
PyYAML==6.0.1
requests==2.27.1
six==1.17.0
testtools==2.6.0
tomli==1.2.3
typing_extensions==4.1.1
urllib3==1.26.20
zipp==3.6.0

name: falcon
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2021.5.30=py36h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.3=he6710b0_2
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - pip=21.2.2=py36h06a4308_0
  - python=3.6.13=h12debd9_1
  - readline=8.2=h5eee18b_0
  - setuptools=58.0.4=py36h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - wheel=0.37.1=pyhd3eb1b0_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - attrs==22.2.0
      - charset-normalizer==2.0.12
      - coverage==6.2
      - ddt==1.7.2
      - fixtures==4.0.1
      - idna==3.10
      - importlib-metadata==4.8.3
      - iniconfig==1.1.1
      - packaging==21.3
      - pbr==6.1.1
      - pluggy==1.0.0
      - py==1.11.0
      - pyparsing==3.1.4
      - pytest==7.0.1
      - python-mimeparse==1.6.0
      - pyyaml==6.0.1
      - requests==2.27.1
      - six==1.17.0
      - testtools==2.6.0
      - tomli==1.2.3
      - typing-extensions==4.1.1
      - urllib3==1.26.20
      - zipp==3.6.0
prefix: /opt/conda/envs/falcon

tests/test_after_hooks.py::TestHooks::test_wrapped_resource tests/test_after_hooks.py::TestHooks::test_wrapped_resource_with_hooks_aware_of_resource tests/test_http_method_routing.py::TestHttpMethodRouting::test_default_on_options
tests/test_httperror.py::TestHTTPError::test_custom_new_error_serializer tests/test_httperror.py::TestHTTPError::test_custom_old_error_serializer tests/test_utils.py::TestFalconUtils::test_deprecated_decorator
tests/test_access_route.py::test_remote_addr_only tests/test_access_route.py::test_rfc_forwarded tests/test_access_route.py::test_malformed_rfc_forwarded tests/test_access_route.py::test_x_forwarded_for tests/test_access_route.py::test_x_real_ip tests/test_access_route.py::test_remote_addr tests/test_access_route.py::test_remote_addr_missing tests/test_after_hooks.py::TestHooks::test_hook_as_callable_class tests/test_after_hooks.py::TestHooks::test_output_validator tests/test_after_hooks.py::TestHooks::test_serializer tests/test_before_hooks.py::TestHooks::test_field_validator tests/test_before_hooks.py::TestHooks::test_input_validator tests/test_before_hooks.py::TestHooks::test_multiple_resource_hooks tests/test_before_hooks.py::TestHooks::test_param_validator tests/test_before_hooks.py::TestHooks::test_parser tests/test_before_hooks.py::TestHooks::test_wrapped_resource tests/test_before_hooks.py::TestHooks::test_wrapped_resource_with_hooks_aware_of_resource tests/test_boundedstream.py::test_not_writeable tests/test_cmd_print_api.py::TestPrintRoutes::test_traverse tests/test_cmd_print_api.py::TestPrintRoutes::test_traverse_with_verbose tests/test_cookies.py::test_response_base_case tests/test_cookies.py::test_response_disable_secure_globally tests/test_cookies.py::test_response_complex_case tests/test_cookies.py::test_cookie_expires_naive tests/test_cookies.py::test_cookie_expires_aware tests/test_cookies.py::test_cookies_setable tests/test_cookies.py::test_cookie_max_age_float_and_string[foofloat] tests/test_cookies.py::test_cookie_max_age_float_and_string[foostring] tests/test_cookies.py::test_response_unset_cookie tests/test_cookies.py::test_cookie_timezone tests/test_cookies.py::test_request_cookie_parsing tests/test_cookies.py::test_unicode_inside_ascii_range tests/test_cookies.py::test_non_ascii_name[Unicode_\xc3\xa6\xc3\xb8] tests/test_cookies.py::test_non_ascii_name[Unicode_\xc3\x83\xc2\xa6\xc3\x83\xc2\xb8] tests/test_cookies.py::test_non_ascii_name[42] tests/test_cookies.py::test_non_ascii_value[Unicode_\xc3\xa6\xc3\xb8] tests/test_cookies.py::test_non_ascii_value[Unicode_\xc3\x83\xc2\xa6\xc3\x83\xc2\xb8] tests/test_cookies.py::test_non_ascii_value[42] tests/test_custom_router.py::TestCustomRouter::test_can_pass_additional_params_to_add_route tests/test_custom_router.py::TestCustomRouter::test_custom_router_add_route_should_be_used tests/test_custom_router.py::TestCustomRouter::test_custom_router_find_should_be_used tests/test_default_router.py::TestRegressionCases::test_recipes tests/test_default_router.py::TestRegressionCases::test_versioned_url tests/test_default_router.py::TestComplexRouting::test_collision_1__teams__collision_ tests/test_default_router.py::TestComplexRouting::test_collision_2__emojis_signs__id_too_ tests/test_default_router.py::TestComplexRouting::test_collision_3__repos__org___repo__compare__complex___vs_____complex2___collision_ tests/test_default_router.py::TestComplexRouting::test_complex_1______5_ tests/test_default_router.py::TestComplexRouting::test_complex_2____full___10_ tests/test_default_router.py::TestComplexRouting::test_complex_3____part___15_ tests/test_default_router.py::TestComplexRouting::test_complex_alt_1______16____repos__org___repo__compare__usr0___branch0___ tests/test_default_router.py::TestComplexRouting::test_complex_alt_2____full___17____repos__org___repo__compare__usr0___branch0__full__ tests/test_default_router.py::TestComplexRouting::test_dead_segment_1__teams tests/test_default_router.py::TestComplexRouting::test_dead_segment_2__emojis_signs tests/test_default_router.py::TestComplexRouting::test_dead_segment_3__gists tests/test_default_router.py::TestComplexRouting::test_dead_segment_4__gists_42 tests/test_default_router.py::TestComplexRouting::test_dump tests/test_default_router.py::TestComplexRouting::test_invalid_field_name_1____ tests/test_default_router.py::TestComplexRouting::test_invalid_field_name_2___9v_ tests/test_default_router.py::TestComplexRouting::test_invalid_field_name_3____kgriffs_ tests/test_default_router.py::TestComplexRouting::test_invalid_field_name_4__repos__simple_thing__etc tests/test_default_router.py::TestComplexRouting::test_invalid_field_name_5__repos__or_g___repo__compare__thing_ tests/test_default_router.py::TestComplexRouting::test_invalid_field_name_6__repos__org___repo__compare___ tests/test_default_router.py::TestComplexRouting::test_invalid_field_name_7__repos__complex______thing_ tests/test_default_router.py::TestComplexRouting::test_invalid_field_name_8__repos__complex___9v___thing__etc tests/test_default_router.py::TestComplexRouting::test_literal tests/test_default_router.py::TestComplexRouting::test_literal_segment tests/test_default_router.py::TestComplexRouting::test_literal_vs_variable_01____teams_default___19_ tests/test_default_router.py::TestComplexRouting::test_literal_vs_variable_02____teams_default_members___7_ tests/test_default_router.py::TestComplexRouting::test_literal_vs_variable_03____teams_foo___6_ tests/test_default_router.py::TestComplexRouting::test_literal_vs_variable_04____teams_foo_members___7_ tests/test_default_router.py::TestComplexRouting::test_literal_vs_variable_05____gists_first___20_ tests/test_default_router.py::TestComplexRouting::test_literal_vs_variable_06____gists_first_raw___18_ tests/test_default_router.py::TestComplexRouting::test_literal_vs_variable_07____gists_first_pdf___21_ tests/test_default_router.py::TestComplexRouting::test_literal_vs_variable_08____gists_1776_pdf___21_ tests/test_default_router.py::TestComplexRouting::test_literal_vs_variable_09____emojis_signs_78___13_ tests/test_default_router.py::TestComplexRouting::test_literal_vs_variable_10____emojis_signs_78_small___22_ tests/test_default_router.py::TestComplexRouting::test_malformed_pattern tests/test_default_router.py::TestComplexRouting::test_multivar tests/test_default_router.py::TestComplexRouting::test_non_collision_1__repos__org___repo__compare__simple_vs_complex_ tests/test_default_router.py::TestComplexRouting::test_non_collision_2__repos__complex___vs___simple_ tests/test_default_router.py::TestComplexRouting::test_non_collision_3__repos__org___repo__compare__complex___vs_____complex2__full tests/test_default_router.py::TestComplexRouting::test_not_found_01__this_does_not_exist tests/test_default_router.py::TestComplexRouting::test_not_found_02__user_bogus tests/test_default_router.py::TestComplexRouting::test_not_found_03__repos_racker_falcon_compare_johndoe_master___janedoe_dev_bogus tests/test_default_router.py::TestComplexRouting::test_not_found_04__teams tests/test_default_router.py::TestComplexRouting::test_not_found_05__teams_42_members_undefined tests/test_default_router.py::TestComplexRouting::test_not_found_06__teams_42_undefined tests/test_default_router.py::TestComplexRouting::test_not_found_07__teams_42_undefined_segments tests/test_default_router.py::TestComplexRouting::test_not_found_08__teams_default_members_undefined tests/test_default_router.py::TestComplexRouting::test_not_found_09__teams_default_members_thing_undefined tests/test_default_router.py::TestComplexRouting::test_not_found_10__teams_default_members_thing_undefined_segments tests/test_default_router.py::TestComplexRouting::test_not_found_11__teams_default_undefined tests/test_default_router.py::TestComplexRouting::test_not_found_12__teams_default_undefined_segments tests/test_default_router.py::TestComplexRouting::test_not_found_13__emojis_signs tests/test_default_router.py::TestComplexRouting::test_not_found_14__emojis_signs_0_small tests/test_default_router.py::TestComplexRouting::test_not_found_15__emojis_signs_0_undefined tests/test_default_router.py::TestComplexRouting::test_not_found_16__emojis_signs_0_undefined_segments tests/test_default_router.py::TestComplexRouting::test_not_found_17__emojis_signs_20_small tests/test_default_router.py::TestComplexRouting::test_not_found_18__emojis_signs_20_undefined tests/test_default_router.py::TestComplexRouting::test_not_found_19__emojis_signs_42_undefined tests/test_default_router.py::TestComplexRouting::test_not_found_20__emojis_signs_78_undefined tests/test_default_router.py::TestComplexRouting::test_override tests/test_default_router.py::TestComplexRouting::test_single_character_field_name tests/test_default_router.py::TestComplexRouting::test_subsegment_not_found tests/test_default_router.py::TestComplexRouting::test_variable tests/test_deps.py::TestDeps::test_mimeparse_correct_package tests/test_error.py::TestError::test_http_bad_gateway_entity_no_title_and_desc_and_challenges tests/test_error.py::TestError::test_http_bad_gateway_entity_with_title_and_desc_and_challenges tests/test_error.py::TestError::test_http_bad_request_no_title_and_desc tests/test_error.py::TestError::test_http_bad_request_with_title_and_desc tests/test_error.py::TestError::test_http_conflict_no_title_and_desc_and_challenges tests/test_error.py::TestError::test_http_conflict_with_title_and_desc_and_challenges tests/test_error.py::TestError::test_http_failed_dependency_no_title_and_desc_and_challenges tests/test_error.py::TestError::test_http_failed_dependency_with_title_and_desc_and_challenges tests/test_error.py::TestError::test_http_forbidden_no_title_and_desc_and_challenges tests/test_error.py::TestError::test_http_forbidden_with_title_and_desc_and_challenges tests/test_error.py::TestError::test_http_insufficient_storage_no_title_and_desc_and_challenges tests/test_error.py::TestError::test_http_insufficient_storage_with_title_and_desc_and_challenges tests/test_error.py::TestError::test_http_internal_server_error_entity_no_title_and_desc_and_challenges tests/test_error.py::TestError::test_http_internal_server_error_with_title_and_desc_and_challenges tests/test_error.py::TestError::test_http_length_required_no_title_and_desc_and_challenges tests/test_error.py::TestError::test_http_length_required_with_title_and_desc_and_challenges tests/test_error.py::TestError::test_http_locked_no_title_and_desc_and_challenges tests/test_error.py::TestError::test_http_locked_with_title_and_desc_and_challenges tests/test_error.py::TestError::test_http_loop_detected_no_title_and_desc_and_challenges tests/test_error.py::TestError::test_http_loop_detected_with_title_and_desc_and_challenges tests/test_error.py::TestError::test_http_not_acceptable_no_title_and_desc_and_challenges tests/test_error.py::TestError::test_http_not_acceptable_with_title_and_desc_and_challenges tests/test_error.py::TestError::test_http_precondition_faild_with_title_and_desc_and_challenges tests/test_error.py::TestError::test_http_precondition_failed_no_title_and_desc_and_challenges tests/test_error.py::TestError::test_http_request_entity_too_large_no_title_and_desc_and_challenges tests/test_error.py::TestError::test_http_request_entity_too_large_with_title_and_desc_and_challenges tests/test_error.py::TestError::test_http_service_unavailable_no_title_and_desc_and_challenges tests/test_error.py::TestError::test_http_service_unavailable_with_title_and_desc_and_challenges tests/test_error.py::TestError::test_http_too_many_requests_no_title_and_desc_and_challenges tests/test_error.py::TestError::test_http_too_many_requests_with_title_and_desc_and_challenges tests/test_error.py::TestError::test_http_unauthorized_no_title_and_desc_and_challenges tests/test_error.py::TestError::test_http_unauthorized_with_title_and_desc_and_challenges tests/test_error.py::TestError::test_http_unavailable_for_legal_reasons_no_title_and_desc_and_challenges tests/test_error.py::TestError::test_http_unavailable_for_legal_reasons_with_title_and_desc_and_challenges tests/test_error.py::TestError::test_http_unprocessable_entity_no_title_and_desc_and_challenges tests/test_error.py::TestError::test_http_unprocessable_with_title_and_desc_and_challenges tests/test_error.py::TestError::test_http_unsupported_media_type_no_title_and_desc_and_challenges tests/test_error.py::TestError::test_http_unsupported_media_type_with_title_and_desc_and_challenges tests/test_error.py::TestError::test_http_uri_too_long_no_title_and_desc_and_challenges tests/test_error.py::TestError::test_http_uri_too_long_with_title_and_desc_and_challenges tests/test_error_handlers.py::TestErrorHandler::test_caught_error tests/test_error_handlers.py::TestErrorHandler::test_converted_error tests/test_error_handlers.py::TestErrorHandler::test_error_order_duplicate tests/test_error_handlers.py::TestErrorHandler::test_error_order_subclass tests/test_error_handlers.py::TestErrorHandler::test_error_order_subclass_masked tests/test_error_handlers.py::TestErrorHandler::test_handle_not_defined tests/test_error_handlers.py::TestErrorHandler::test_subclass_error tests/test_error_handlers.py::TestErrorHandler::test_uncaught_error tests/test_error_handlers.py::TestErrorHandler::test_uncaught_error_else tests/test_headers.py::TestHeaders::test_add_link_complex tests/test_headers.py::TestHeaders::test_add_link_multiple tests/test_headers.py::TestHeaders::test_add_link_single tests/test_headers.py::TestHeaders::test_add_link_with_anchor tests/test_headers.py::TestHeaders::test_add_link_with_hreflang tests/test_headers.py::TestHeaders::test_add_link_with_hreflang_multi tests/test_headers.py::TestHeaders::test_add_link_with_title tests/test_headers.py::TestHeaders::test_add_link_with_title_star tests/test_headers.py::TestHeaders::test_add_link_with_type_hint tests/test_headers.py::TestHeaders::test_content_header_missing tests/test_headers.py::TestHeaders::test_content_length tests/test_headers.py::TestHeaders::test_content_length_options tests/test_headers.py::TestHeaders::test_content_type_no_body tests/test_headers.py::TestHeaders::test_custom_content_type tests/test_headers.py::TestHeaders::test_default_media_type tests/test_headers.py::TestHeaders::test_default_value tests/test_headers.py::TestHeaders::test_headers_as_list tests/test_headers.py::TestHeaders::test_no_content_length_1_204_No_Content tests/test_headers.py::TestHeaders::test_no_content_length_2_304_Not_Modified tests/test_headers.py::TestHeaders::test_no_content_type_1_204_No_Content tests/test_headers.py::TestHeaders::test_no_content_type_2_304_Not_Modified tests/test_headers.py::TestHeaders::test_override_default_media_type_1___text_plain__charset_UTF_8____Hello_Unicode_____ tests/test_headers.py::TestHeaders::test_override_default_media_type_2___text_plain____Hello_ISO_8859_1___ tests/test_headers.py::TestHeaders::test_override_default_media_type_missing_encoding tests/test_headers.py::TestHeaders::test_passthrough_request_headers tests/test_headers.py::TestHeaders::test_required_header tests/test_headers.py::TestHeaders::test_response_append_header tests/test_headers.py::TestHeaders::test_response_header_helpers_on_get tests/test_headers.py::TestHeaders::test_response_set_and_get_header tests/test_headers.py::TestHeaders::test_unicode_headers_convertable tests/test_headers.py::TestHeaders::test_unicode_location_headers tests/test_headers.py::TestHeaders::test_vary_header_1____accept_encoding_____accept_encoding__ tests/test_headers.py::TestHeaders::test_vary_header_2____accept_encoding____x_auth_token_____accept_encoding__x_auth_token__ tests/test_headers.py::TestHeaders::test_vary_header_3____accept_encoding____x_auth_token_____accept_encoding__x_auth_token__ tests/test_headers.py::TestHeaders::test_vary_star tests/test_hello.py::TestHelloWorld::test_body_1 tests/test_hello.py::TestHelloWorld::test_body_2 tests/test_hello.py::TestHelloWorld::test_body_3 tests/test_hello.py::TestHelloWorld::test_env_headers_list_of_tuples tests/test_hello.py::TestHelloWorld::test_filelike tests/test_hello.py::TestHelloWorld::test_filelike_using_helper tests/test_hello.py::TestHelloWorld::test_no_body_on_head tests/test_hello.py::TestHelloWorld::test_no_route tests/test_hello.py::TestHelloWorld::test_root_route tests/test_hello.py::TestHelloWorld::test_status_not_set tests/test_hello.py::TestHelloWorld::test_stream_chunked tests/test_hello.py::TestHelloWorld::test_stream_known_len tests/test_http_method_routing.py::TestHttpMethodRouting::test_bogus_method tests/test_http_method_routing.py::TestHttpMethodRouting::test_get tests/test_http_method_routing.py::TestHttpMethodRouting::test_method_not_allowed_with_param tests/test_http_method_routing.py::TestHttpMethodRouting::test_methods_not_allowed_complex tests/test_http_method_routing.py::TestHttpMethodRouting::test_methods_not_allowed_simple tests/test_http_method_routing.py::TestHttpMethodRouting::test_misc tests/test_http_method_routing.py::TestHttpMethodRouting::test_on_options tests/test_http_method_routing.py::TestHttpMethodRouting::test_post_not_allowed tests/test_http_method_routing.py::TestHttpMethodRouting::test_put tests/test_httperror.py::TestHTTPError::test_401 tests/test_httperror.py::TestHTTPError::test_404_with_body tests/test_httperror.py::TestHTTPError::test_404_without_body tests/test_httperror.py::TestHTTPError::test_405_with_body tests/test_httperror.py::TestHTTPError::test_405_without_body tests/test_httperror.py::TestHTTPError::test_405_without_body_with_extra_headers tests/test_httperror.py::TestHTTPError::test_405_without_body_with_extra_headers_double_check tests/test_httperror.py::TestHTTPError::test_410_with_body tests/test_httperror.py::TestHTTPError::test_410_without_body tests/test_httperror.py::TestHTTPError::test_411 tests/test_httperror.py::TestHTTPError::test_413 tests/test_httperror.py::TestHTTPError::test_414 tests/test_httperror.py::TestHTTPError::test_414_with_custom_kwargs tests/test_httperror.py::TestHTTPError::test_414_with_description tests/test_httperror.py::TestHTTPError::test_414_with_title tests/test_httperror.py::TestHTTPError::test_416 tests/test_httperror.py::TestHTTPError::test_429 tests/test_httperror.py::TestHTTPError::test_429_datetime tests/test_httperror.py::TestHTTPError::test_429_no_retry_after tests/test_httperror.py::TestHTTPError::test_503_datetime_retry_after tests/test_httperror.py::TestHTTPError::test_503_integer_retry_after tests/test_httperror.py::TestHTTPError::test_base_class tests/test_httperror.py::TestHTTPError::test_client_does_not_accept_anything tests/test_httperror.py::TestHTTPError::test_client_does_not_accept_json_or_xml tests/test_httperror.py::TestHTTPError::test_custom_old_error_serializer_no_body tests/test_httperror.py::TestHTTPError::test_epic_fail_json tests/test_httperror.py::TestHTTPError::test_epic_fail_xml_1_text_xml tests/test_httperror.py::TestHTTPError::test_epic_fail_xml_2_application_xml tests/test_httperror.py::TestHTTPError::test_epic_fail_xml_3_application_vnd_company_system_project_resource_xml_v_1_1 tests/test_httperror.py::TestHTTPError::test_epic_fail_xml_4_application_atom_xml tests/test_httperror.py::TestHTTPError::test_forbidden_1_application_json tests/test_httperror.py::TestHTTPError::test_forbidden_2_application_vnd_company_system_project_resource_json_v_1_1 tests/test_httperror.py::TestHTTPError::test_forbidden_3_application_json_patch_json tests/test_httperror.py::TestHTTPError::test_invalid_header tests/test_httperror.py::TestHTTPError::test_invalid_param tests/test_httperror.py::TestHTTPError::test_misc tests/test_httperror.py::TestHTTPError::test_missing_header tests/test_httperror.py::TestHTTPError::test_missing_param tests/test_httperror.py::TestHTTPError::test_no_description_json tests/test_httperror.py::TestHTTPError::test_no_description_xml tests/test_httperror.py::TestHTTPError::test_temporary_413_datetime_retry_after tests/test_httperror.py::TestHTTPError::test_temporary_413_integer_retry_after tests/test_httperror.py::TestHTTPError::test_title_default_message_if_none tests/test_httperror.py::TestHTTPError::test_unicode_json tests/test_httperror.py::TestHTTPError::test_unicode_xml tests/test_httpstatus.py::TestHTTPStatus::test_raise_status_empty_body tests/test_httpstatus.py::TestHTTPStatus::test_raise_status_in_before_hook tests/test_httpstatus.py::TestHTTPStatus::test_raise_status_in_responder tests/test_httpstatus.py::TestHTTPStatus::test_raise_status_runs_after_hooks tests/test_httpstatus.py::TestHTTPStatus::test_raise_status_survives_after_hooks tests/test_httpstatus.py::TestHTTPStatusWithMiddleware::test_raise_status_in_process_request tests/test_httpstatus.py::TestHTTPStatusWithMiddleware::test_raise_status_in_process_resource tests/test_httpstatus.py::TestHTTPStatusWithMiddleware::test_raise_status_runs_process_response tests/test_middleware.py::TestRequestTimeMiddleware::test_add_invalid_middleware tests/test_middleware.py::TestRequestTimeMiddleware::test_log_get_request tests/test_middleware.py::TestRequestTimeMiddleware::test_response_middleware_raises_exception tests/test_middleware.py::TestRequestTimeMiddleware::test_skip_process_resource tests/test_middleware.py::TestTransactionIdMiddleware::test_generate_trans_id_with_request tests/test_middleware.py::TestSeveralMiddlewares::test_generate_trans_id_and_time_with_request tests/test_middleware.py::TestSeveralMiddlewares::test_independent_middleware_execution_order tests/test_middleware.py::TestSeveralMiddlewares::test_inner_mw_throw_exception tests/test_middleware.py::TestSeveralMiddlewares::test_inner_mw_with_ex_handler_throw_exception tests/test_middleware.py::TestSeveralMiddlewares::test_legacy_middleware_called_with_correct_args tests/test_middleware.py::TestSeveralMiddlewares::test_middleware_execution_order tests/test_middleware.py::TestSeveralMiddlewares::test_multiple_reponse_mw_throw_exception tests/test_middleware.py::TestSeveralMiddlewares::test_order_independent_mw_executed_when_exception_in_req tests/test_middleware.py::TestSeveralMiddlewares::test_order_independent_mw_executed_when_exception_in_resp tests/test_middleware.py::TestSeveralMiddlewares::test_order_independent_mw_executed_when_exception_in_rsrc tests/test_middleware.py::TestSeveralMiddlewares::test_order_mw_executed_when_exception_in_req tests/test_middleware.py::TestSeveralMiddlewares::test_order_mw_executed_when_exception_in_resp tests/test_middleware.py::TestSeveralMiddlewares::test_order_mw_executed_when_exception_in_rsrc tests/test_middleware.py::TestSeveralMiddlewares::test_outer_mw_with_ex_handler_throw_exception tests/test_middleware.py::TestRemoveBasePathMiddleware::test_base_path_is_removed_before_routing tests/test_middleware.py::TestResourceMiddleware::test_can_access_resource_params tests/test_middleware.py::TestErrorHandling::test_error_composed_before_resp_middleware_called tests/test_middleware.py::TestErrorHandling::test_http_status_raised_from_error_handler tests/test_options.py::TestRequestOptions::test_incorrect_options tests/test_options.py::TestRequestOptions::test_option_defaults tests/test_options.py::TestRequestOptions::test_options_toggle_1_keep_blank_qs_values tests/test_options.py::TestRequestOptions::test_options_toggle_2_auto_parse_form_urlencoded tests/test_options.py::TestRequestOptions::test_options_toggle_3_auto_parse_qs_csv tests/test_options.py::TestRequestOptions::test_options_toggle_4_strip_url_path_trailing_slash tests/test_query_params.py::_TestQueryParams::test_allowed_names tests/test_query_params.py::_TestQueryParams::test_bad_percentage tests/test_query_params.py::_TestQueryParams::test_blank tests/test_query_params.py::_TestQueryParams::test_boolean tests/test_query_params.py::_TestQueryParams::test_boolean_blank tests/test_query_params.py::_TestQueryParams::test_get_date_invalid tests/test_query_params.py::_TestQueryParams::test_get_date_missing_param tests/test_query_params.py::_TestQueryParams::test_get_date_store tests/test_query_params.py::_TestQueryParams::test_get_date_valid tests/test_query_params.py::_TestQueryParams::test_get_date_valid_with_format tests/test_query_params.py::_TestQueryParams::test_get_dict_invalid tests/test_query_params.py::_TestQueryParams::test_get_dict_missing_param tests/test_query_params.py::_TestQueryParams::test_get_dict_store tests/test_query_params.py::_TestQueryParams::test_get_dict_valid tests/test_query_params.py::_TestQueryParams::test_int tests/test_query_params.py::_TestQueryParams::test_int_neg tests/test_query_params.py::_TestQueryParams::test_list_transformer tests/test_query_params.py::_TestQueryParams::test_list_type tests/test_query_params.py::_TestQueryParams::test_list_type_blank tests/test_query_params.py::_TestQueryParams::test_multiple_form_keys tests/test_query_params.py::_TestQueryParams::test_multiple_form_keys_as_list tests/test_query_params.py::_TestQueryParams::test_multiple_keys_as_bool tests/test_query_params.py::_TestQueryParams::test_multiple_keys_as_int tests/test_query_params.py::_TestQueryParams::test_none tests/test_query_params.py::_TestQueryParams::test_option_auto_parse_qs_csv_complex_false tests/test_query_params.py::_TestQueryParams::test_option_auto_parse_qs_csv_simple_false tests/test_query_params.py::_TestQueryParams::test_option_auto_parse_qs_csv_simple_true tests/test_query_params.py::_TestQueryParams::test_param_property tests/test_query_params.py::_TestQueryParams::test_percent_encoded tests/test_query_params.py::_TestQueryParams::test_required_1_get_param tests/test_query_params.py::_TestQueryParams::test_required_2_get_param_as_int tests/test_query_params.py::_TestQueryParams::test_required_3_get_param_as_bool tests/test_query_params.py::_TestQueryParams::test_required_4_get_param_as_list tests/test_query_params.py::_TestQueryParams::test_simple tests/test_query_params.py::PostQueryParams::test_allowed_names tests/test_query_params.py::PostQueryParams::test_bad_percentage tests/test_query_params.py::PostQueryParams::test_blank tests/test_query_params.py::PostQueryParams::test_boolean tests/test_query_params.py::PostQueryParams::test_boolean_blank tests/test_query_params.py::PostQueryParams::test_empty_body tests/test_query_params.py::PostQueryParams::test_empty_body_no_content_length tests/test_query_params.py::PostQueryParams::test_explicitly_disable_auto_parse tests/test_query_params.py::PostQueryParams::test_get_date_invalid tests/test_query_params.py::PostQueryParams::test_get_date_missing_param tests/test_query_params.py::PostQueryParams::test_get_date_store tests/test_query_params.py::PostQueryParams::test_get_date_valid tests/test_query_params.py::PostQueryParams::test_get_date_valid_with_format tests/test_query_params.py::PostQueryParams::test_get_dict_invalid tests/test_query_params.py::PostQueryParams::test_get_dict_missing_param tests/test_query_params.py::PostQueryParams::test_get_dict_store tests/test_query_params.py::PostQueryParams::test_get_dict_valid tests/test_query_params.py::PostQueryParams::test_http_methods_body_expected_1_POST tests/test_query_params.py::PostQueryParams::test_http_methods_body_expected_2_PUT tests/test_query_params.py::PostQueryParams::test_http_methods_body_expected_3_PATCH tests/test_query_params.py::PostQueryParams::test_http_methods_body_expected_4_DELETE tests/test_query_params.py::PostQueryParams::test_http_methods_body_expected_5_OPTIONS tests/test_query_params.py::PostQueryParams::test_http_methods_body_not_expected_1_GET tests/test_query_params.py::PostQueryParams::test_http_methods_body_not_expected_2_HEAD tests/test_query_params.py::PostQueryParams::test_int tests/test_query_params.py::PostQueryParams::test_int_neg tests/test_query_params.py::PostQueryParams::test_list_transformer tests/test_query_params.py::PostQueryParams::test_list_type tests/test_query_params.py::PostQueryParams::test_list_type_blank tests/test_query_params.py::PostQueryParams::test_multiple_form_keys tests/test_query_params.py::PostQueryParams::test_multiple_form_keys_as_list tests/test_query_params.py::PostQueryParams::test_multiple_keys_as_bool tests/test_query_params.py::PostQueryParams::test_multiple_keys_as_int tests/test_query_params.py::PostQueryParams::test_non_ascii tests/test_query_params.py::PostQueryParams::test_none tests/test_query_params.py::PostQueryParams::test_option_auto_parse_qs_csv_complex_false tests/test_query_params.py::PostQueryParams::test_option_auto_parse_qs_csv_simple_false tests/test_query_params.py::PostQueryParams::test_option_auto_parse_qs_csv_simple_true tests/test_query_params.py::PostQueryParams::test_param_property tests/test_query_params.py::PostQueryParams::test_percent_encoded tests/test_query_params.py::PostQueryParams::test_required_1_get_param tests/test_query_params.py::PostQueryParams::test_required_2_get_param_as_int tests/test_query_params.py::PostQueryParams::test_required_3_get_param_as_bool tests/test_query_params.py::PostQueryParams::test_required_4_get_param_as_list tests/test_query_params.py::PostQueryParams::test_simple tests/test_query_params.py::GetQueryParams::test_allowed_names tests/test_query_params.py::GetQueryParams::test_bad_percentage tests/test_query_params.py::GetQueryParams::test_blank tests/test_query_params.py::GetQueryParams::test_boolean tests/test_query_params.py::GetQueryParams::test_boolean_blank tests/test_query_params.py::GetQueryParams::test_get_date_invalid tests/test_query_params.py::GetQueryParams::test_get_date_missing_param tests/test_query_params.py::GetQueryParams::test_get_date_store tests/test_query_params.py::GetQueryParams::test_get_date_valid tests/test_query_params.py::GetQueryParams::test_get_date_valid_with_format tests/test_query_params.py::GetQueryParams::test_get_dict_invalid tests/test_query_params.py::GetQueryParams::test_get_dict_missing_param tests/test_query_params.py::GetQueryParams::test_get_dict_store tests/test_query_params.py::GetQueryParams::test_get_dict_valid tests/test_query_params.py::GetQueryParams::test_int tests/test_query_params.py::GetQueryParams::test_int_neg tests/test_query_params.py::GetQueryParams::test_list_transformer tests/test_query_params.py::GetQueryParams::test_list_type tests/test_query_params.py::GetQueryParams::test_list_type_blank tests/test_query_params.py::GetQueryParams::test_multiple_form_keys tests/test_query_params.py::GetQueryParams::test_multiple_form_keys_as_list tests/test_query_params.py::GetQueryParams::test_multiple_keys_as_bool tests/test_query_params.py::GetQueryParams::test_multiple_keys_as_int tests/test_query_params.py::GetQueryParams::test_none tests/test_query_params.py::GetQueryParams::test_option_auto_parse_qs_csv_complex_false tests/test_query_params.py::GetQueryParams::test_option_auto_parse_qs_csv_simple_false tests/test_query_params.py::GetQueryParams::test_option_auto_parse_qs_csv_simple_true tests/test_query_params.py::GetQueryParams::test_param_property tests/test_query_params.py::GetQueryParams::test_percent_encoded tests/test_query_params.py::GetQueryParams::test_required_1_get_param tests/test_query_params.py::GetQueryParams::test_required_2_get_param_as_int tests/test_query_params.py::GetQueryParams::test_required_3_get_param_as_bool tests/test_query_params.py::GetQueryParams::test_required_4_get_param_as_list tests/test_query_params.py::GetQueryParams::test_simple tests/test_query_params.py::PostQueryParamsDefaultBehavior::test_dont_auto_parse_by_default tests/test_redirects.py::TestRedirects::test_redirect_1___GET____301_Moved_Permanently_____moved_perm__ tests/test_redirects.py::TestRedirects::test_redirect_2___POST____302_Found_____found__ tests/test_redirects.py::TestRedirects::test_redirect_3___PUT____303_See_Other_____see_other__ tests/test_redirects.py::TestRedirects::test_redirect_4___DELETE____307_Temporary_Redirect_____tmp_redirect__ tests/test_redirects.py::TestRedirects::test_redirect_5___HEAD____308_Permanent_Redirect_____perm_redirect__ tests/test_req_vars.py::TestReqVars::test_attribute_headers tests/test_req_vars.py::TestReqVars::test_bogus_content_length_nan tests/test_req_vars.py::TestReqVars::test_bogus_content_length_neg tests/test_req_vars.py::TestReqVars::test_client_accepts tests/test_req_vars.py::TestReqVars::test_client_accepts_bogus tests/test_req_vars.py::TestReqVars::test_client_accepts_props tests/test_req_vars.py::TestReqVars::test_client_prefers tests/test_req_vars.py::TestReqVars::test_content_length tests/test_req_vars.py::TestReqVars::test_content_length_method tests/test_req_vars.py::TestReqVars::test_content_type_method tests/test_req_vars.py::TestReqVars::test_date_1___Date____date__ tests/test_req_vars.py::TestReqVars::test_date_2___If_Modified_since____if_modified_since__ tests/test_req_vars.py::TestReqVars::test_date_3___If_Unmodified_since____if_unmodified_since__ tests/test_req_vars.py::TestReqVars::test_date_invalid_1___Date____date__ tests/test_req_vars.py::TestReqVars::test_date_invalid_2___If_Modified_Since____if_modified_since__ tests/test_req_vars.py::TestReqVars::test_date_invalid_3___If_Unmodified_Since____if_unmodified_since__ tests/test_req_vars.py::TestReqVars::test_date_missing_1_date tests/test_req_vars.py::TestReqVars::test_date_missing_2_if_modified_since tests/test_req_vars.py::TestReqVars::test_date_missing_3_if_unmodified_since tests/test_req_vars.py::TestReqVars::test_empty tests/test_req_vars.py::TestReqVars::test_empty_path tests/test_req_vars.py::TestReqVars::test_host tests/test_req_vars.py::TestReqVars::test_method tests/test_req_vars.py::TestReqVars::test_missing_attribute_header tests/test_req_vars.py::TestReqVars::test_missing_qs tests/test_req_vars.py::TestReqVars::test_netloc_default_port_1_HTTP_1_0 tests/test_req_vars.py::TestReqVars::test_netloc_default_port_2_HTTP_1_1 tests/test_req_vars.py::TestReqVars::test_netloc_from_env_1_HTTP_1_0 tests/test_req_vars.py::TestReqVars::test_netloc_from_env_2_HTTP_1_1 tests/test_req_vars.py::TestReqVars::test_netloc_nondefault_port_1_HTTP_1_0 tests/test_req_vars.py::TestReqVars::test_netloc_nondefault_port_2_HTTP_1_1 tests/test_req_vars.py::TestReqVars::test_nonlatin_path_1__hello_привет tests/test_req_vars.py::TestReqVars::test_nonlatin_path_2__test__E5_BB_B6_E5_AE_89 tests/test_req_vars.py::TestReqVars::test_nonlatin_path_3__test__C3_A4_C3_B6_C3_BC_C3_9F_E2_82_AC tests/test_req_vars.py::TestReqVars::test_port_explicit_1_HTTP_1_0 tests/test_req_vars.py::TestReqVars::test_port_explicit_2_HTTP_1_1 tests/test_req_vars.py::TestReqVars::test_range tests/test_req_vars.py::TestReqVars::test_range_invalid tests/test_req_vars.py::TestReqVars::test_range_unit tests/test_req_vars.py::TestReqVars::test_reconstruct_url tests/test_req_vars.py::TestReqVars::test_relative_uri tests/test_req_vars.py::TestReqVars::test_scheme_http_1_HTTP_1_0 tests/test_req_vars.py::TestReqVars::test_scheme_http_2_HTTP_1_1 tests/test_req_vars.py::TestReqVars::test_scheme_https_1_HTTP_1_0 tests/test_req_vars.py::TestReqVars::test_scheme_https_2_HTTP_1_1 tests/test_req_vars.py::TestReqVars::test_subdomain tests/test_req_vars.py::TestReqVars::test_uri tests/test_req_vars.py::TestReqVars::test_uri_http_1_0 tests/test_req_vars.py::TestReqVars::test_uri_https tests/test_request_body.py::TestRequestBody::test_body_stream_wrapper tests/test_request_body.py::TestRequestBody::test_bounded_stream_property_empty_body tests/test_request_body.py::TestRequestBody::test_empty_body tests/test_request_body.py::TestRequestBody::test_read_body tests/test_request_body.py::TestRequestBody::test_tiny_body tests/test_request_body.py::TestRequestBody::test_tiny_body_overflow tests/test_request_context.py::TestRequestContext::test_custom_request_context tests/test_request_context.py::TestRequestContext::test_custom_request_context_failure tests/test_request_context.py::TestRequestContext::test_custom_request_context_request_access tests/test_request_context.py::TestRequestContext::test_default_request_context tests/test_response_body.py::TestResponseBody::test_append_body tests/test_response_context.py::TestRequestContext::test_custom_response_context tests/test_response_context.py::TestRequestContext::test_custom_response_context_factory tests/test_response_context.py::TestRequestContext::test_custom_response_context_failure tests/test_response_context.py::TestRequestContext::test_default_response_context tests/test_sinks.py::TestDefaultRouting::test_multiple_patterns tests/test_sinks.py::TestDefaultRouting::test_named_groups tests/test_sinks.py::TestDefaultRouting::test_route_precedence tests/test_sinks.py::TestDefaultRouting::test_route_precedence_with_both_id tests/test_sinks.py::TestDefaultRouting::test_route_precedence_with_id tests/test_sinks.py::TestDefaultRouting::test_single_compiled_pattern tests/test_sinks.py::TestDefaultRouting::test_single_default_pattern tests/test_sinks.py::TestDefaultRouting::test_single_simple_pattern tests/test_sinks.py::TestDefaultRouting::test_with_route tests/test_slots.py::TestSlots::test_slots_request tests/test_slots.py::TestSlots::test_slots_response tests/test_uri_templates.py::TestUriTemplates::test_empty_path_component_1___ tests/test_uri_templates.py::TestUriTemplates::test_empty_path_component_2___begin tests/test_uri_templates.py::TestUriTemplates::test_empty_path_component_3__end__ tests/test_uri_templates.py::TestUriTemplates::test_empty_path_component_4__in__side tests/test_uri_templates.py::TestUriTemplates::test_field_name_cannot_start_with_digit_1__hello__1world_ tests/test_uri_templates.py::TestUriTemplates::test_field_name_cannot_start_with_digit_2___524hello__world tests/test_uri_templates.py::TestUriTemplates::test_multiple tests/test_uri_templates.py::TestUriTemplates::test_multiple_with_digits tests/test_uri_templates.py::TestUriTemplates::test_no_vars tests/test_uri_templates.py::TestUriTemplates::test_not_str tests/test_uri_templates.py::TestUriTemplates::test_relative_path_1_ tests/test_uri_templates.py::TestUriTemplates::test_relative_path_2_no tests/test_uri_templates.py::TestUriTemplates::test_relative_path_3_no_leading_slash tests/test_uri_templates.py::TestUriTemplates::test_root_path tests/test_uri_templates.py::TestUriTemplates::test_same_level_complex_var tests/test_uri_templates.py::TestUriTemplates::test_same_level_complex_var_in_reverse_order tests/test_uri_templates.py::TestUriTemplates::test_single tests/test_uri_templates.py::TestUriTemplates::test_single_trailing_slash tests/test_uri_templates.py::TestUriTemplates::test_single_with_trailing_digits tests/test_uri_templates.py::TestUriTemplates::test_single_with_underscore tests/test_uri_templates.py::TestUriTemplates::test_special_chars tests/test_uri_templates.py::TestUriTemplates::test_whitespace_not_allowed_1___thing___world tests/test_uri_templates.py::TestUriTemplates::test_whitespace_not_allowed_2____thing__world tests/test_uri_templates.py::TestUriTemplates::test_whitespace_not_allowed_3____thing___world tests/test_uri_templates.py::TestUriTemplates::test_whitespace_not_allowed_4___thing__wo_rld tests/test_uri_templates.py::TestUriTemplates::test_whitespace_not_allowed_5___thing___world tests/test_uri_templates_legacy.py::TestUriTemplates::test_malformed_field tests/test_uri_templates_legacy.py::TestUriTemplates::test_no_fields_1__hello tests/test_uri_templates_legacy.py::TestUriTemplates::test_no_fields_2__hello_world tests/test_uri_templates_legacy.py::TestUriTemplates::test_no_fields_3__hi_there_how_are_you tests/test_uri_templates_legacy.py::TestUriTemplates::test_one_field tests/test_uri_templates_legacy.py::TestUriTemplates::test_one_field_with_digits tests/test_uri_templates_legacy.py::TestUriTemplates::test_one_field_with_prefixed_digits tests/test_uri_templates_legacy.py::TestUriTemplates::test_root tests/test_uri_templates_legacy.py::TestUriTemplates::test_string_type_required_1_42 tests/test_uri_templates_legacy.py::TestUriTemplates::test_string_type_required_2_API tests/test_uri_templates_legacy.py::TestUriTemplates::test_template_may_not_contain_double_slash_1___ tests/test_uri_templates_legacy.py::TestUriTemplates::test_template_may_not_contain_double_slash_2_a__ tests/test_uri_templates_legacy.py::TestUriTemplates::test_template_may_not_contain_double_slash_3___b tests/test_uri_templates_legacy.py::TestUriTemplates::test_template_may_not_contain_double_slash_4_a__b tests/test_uri_templates_legacy.py::TestUriTemplates::test_template_may_not_contain_double_slash_5_a_b__ tests/test_uri_templates_legacy.py::TestUriTemplates::test_template_may_not_contain_double_slash_6_a_b__c tests/test_uri_templates_legacy.py::TestUriTemplates::test_template_must_start_with_slash_1_this tests/test_uri_templates_legacy.py::TestUriTemplates::test_template_must_start_with_slash_2_this_that tests/test_uri_templates_legacy.py::TestUriTemplates::test_three_fields tests/test_uri_templates_legacy.py::TestUriTemplates::test_two_fields_1_ tests/test_uri_templates_legacy.py::TestUriTemplates::test_two_fields_2__ tests/test_utils.py::TestFalconUtils::test_dt_to_http tests/test_utils.py::TestFalconUtils::test_get_http_status tests/test_utils.py::TestFalconUtils::test_http_date_to_dt tests/test_utils.py::TestFalconUtils::test_http_now tests/test_utils.py::TestFalconUtils::test_pack_query_params_none tests/test_utils.py::TestFalconUtils::test_pack_query_params_one tests/test_utils.py::TestFalconUtils::test_pack_query_params_several tests/test_utils.py::TestFalconUtils::test_parse_host tests/test_utils.py::TestFalconUtils::test_parse_query_string tests/test_utils.py::TestFalconUtils::test_prop_uri_decode_models_stdlib_unquote_plus tests/test_utils.py::TestFalconUtils::test_prop_uri_encode_models_stdlib_quote tests/test_utils.py::TestFalconUtils::test_prop_uri_encode_value_models_stdlib_quote_safe_tilde tests/test_utils.py::TestFalconUtils::test_uri_decode tests/test_utils.py::TestFalconUtils::test_uri_encode tests/test_utils.py::TestFalconUtils::test_uri_encode_double tests/test_utils.py::TestFalconUtils::test_uri_encode_value tests/test_utils.py::TestFalconTesting::test_decode_empty_result tests/test_utils.py::TestFalconTesting::test_httpnow_alias_for_backwards_compat tests/test_utils.py::TestFalconTesting::test_no_prefix_allowed_for_query_strings_in_create_environ tests/test_utils.py::TestFalconTesting::test_none_header_value_in_create_environ tests/test_utils.py::TestFalconTesting::test_path_escape_chars_in_create_environ tests/test_utils.py::test_simulate_request_protocol[https-CONNECT] tests/test_utils.py::test_simulate_request_protocol[https-DELETE] tests/test_utils.py::test_simulate_request_protocol[https-GET] tests/test_utils.py::test_simulate_request_protocol[https-HEAD] tests/test_utils.py::test_simulate_request_protocol[https-OPTIONS] tests/test_utils.py::test_simulate_request_protocol[https-PATCH] tests/test_utils.py::test_simulate_request_protocol[https-POST] tests/test_utils.py::test_simulate_request_protocol[https-PUT] tests/test_utils.py::test_simulate_request_protocol[https-TRACE] tests/test_utils.py::test_simulate_request_protocol[http-CONNECT] tests/test_utils.py::test_simulate_request_protocol[http-DELETE] tests/test_utils.py::test_simulate_request_protocol[http-GET] tests/test_utils.py::test_simulate_request_protocol[http-HEAD] tests/test_utils.py::test_simulate_request_protocol[http-OPTIONS] tests/test_utils.py::test_simulate_request_protocol[http-PATCH] tests/test_utils.py::test_simulate_request_protocol[http-POST] tests/test_utils.py::test_simulate_request_protocol[http-PUT] tests/test_utils.py::test_simulate_request_protocol[http-TRACE] tests/test_utils.py::TestFalconTestCase::test_cached_text_in_result tests/test_utils.py::TestFalconTestCase::test_path_must_start_with_slash tests/test_utils.py::TestFalconTestCase::test_query_string tests/test_utils.py::TestFalconTestCase::test_query_string_in_path tests/test_utils.py::TestFalconTestCase::test_query_string_no_question tests/test_utils.py::TestFalconTestCase::test_simple_resource_body_json_xor tests/test_utils.py::TestFalconTestCase::test_status tests/test_utils.py::TestFalconTestCase::test_wsgi_iterable_not_closeable tests/test_utils.py::FancyTestCase::test_something tests/test_wsgi.py::TestWSGIServer::test_get tests/test_wsgi.py::TestWSGIServer::test_put tests/test_wsgi.py::TestWSGIServer::test_head_405 tests/test_wsgi.py::TestWSGIServer::test_post tests/test_wsgi.py::TestWSGIServer::test_post_invalid_content_length tests/test_wsgi.py::TestWSGIServer::test_post_read_bounded_stream tests/test_wsgi.py::TestWSGIServer::test_post_read_bounded_stream_no_body tests/test_wsgi_errors.py::TestWSGIError::test_responder_logged_bytestring tests/test_wsgi_interface.py::TestWSGIInterface::test_srmock tests/test_wsgi_interface.py::TestWSGIInterface::test_pep3333 tests/test_wsgiref_inputwrapper_with_size.py::TestWsgiRefInputWrapper::test_resources_can_read_request_stream_during_tests
falcon/responders.py
falcon/responders.py