py$(PYV): remove tox env folder $(@D)/.tox/py$(PYV)
py$(PYV): commands[0]> python -m pytest -v --tb=short --basetemp=$(@D)/.tox/py$(PYV)/tmp
============================= test session starts ==============================
platform sunos5 -- Python $(PYTHON_VERSION).X -- $(@D)/.tox/py$(PYV)/bin/python
cachedir: .tox/py$(PYV)/.pytest_cache
rootdir: $(@D)
configfile: pyproject.toml
testpaths: tests
collecting ... collected 948 items / 25 deselected / 923 selected

tests/middleware/test_dispatcher.py::test_dispatcher PASSED
tests/middleware/test_lint.py::test_lint_middleware PASSED
tests/middleware/test_lint.py::test_lint_middleware_check_environ[wsgi.version-value0-Environ is not a WSGI 1.0 environ.] PASSED
tests/middleware/test_lint.py::test_lint_middleware_check_environ[SCRIPT_NAME-test-'SCRIPT_NAME' does not start with a slash:] PASSED
tests/middleware/test_lint.py::test_lint_middleware_check_environ[PATH_INFO-test-'PATH_INFO' does not start with a slash:] PASSED
tests/middleware/test_lint.py::test_lint_middleware_invalid_status PASSED
tests/middleware/test_lint.py::test_lint_middleware_http_headers[headers0-Header list is not a list.] PASSED
tests/middleware/test_lint.py::test_lint_middleware_http_headers[headers1-Header items must be 2-item tuples.] PASSED
tests/middleware/test_lint.py::test_lint_middleware_http_headers[headers2-The status header is not supported.] PASSED
tests/middleware/test_lint.py::test_lint_middleware_invalid_location PASSED
tests/middleware/test_profiler.py::test_filename_format_function PASSED
tests/middleware/test_proxy_fix.py::test_proxy_fix[for] PASSED
tests/middleware/test_proxy_fix.py::test_proxy_fix[proto] PASSED
tests/middleware/test_proxy_fix.py::test_proxy_fix[host] PASSED
tests/middleware/test_proxy_fix.py::test_proxy_fix[port, host without port] PASSED
tests/middleware/test_proxy_fix.py::test_proxy_fix[port, host with port] PASSED
tests/middleware/test_proxy_fix.py::test_proxy_fix[port, name] PASSED
tests/middleware/test_proxy_fix.py::test_proxy_fix[prefix] PASSED
tests/middleware/test_proxy_fix.py::test_proxy_fix[all] PASSED
tests/middleware/test_proxy_fix.py::test_proxy_fix[multiple for] PASSED
tests/middleware/test_proxy_fix.py::test_proxy_fix[ignore 0] PASSED
tests/middleware/test_proxy_fix.py::test_proxy_fix[ignore len < trusted] PASSED
tests/middleware/test_proxy_fix.py::test_proxy_fix[ignore untrusted] PASSED
tests/middleware/test_proxy_fix.py::test_proxy_fix[ignore empty] PASSED
tests/middleware/test_proxy_fix.py::test_proxy_fix[prefix < for] PASSED
tests/middleware/test_proxy_fix.py::test_proxy_fix[ipv6 host] PASSED
tests/middleware/test_proxy_fix.py::test_proxy_fix[ipv6 port, host without port] PASSED
tests/middleware/test_proxy_fix.py::test_proxy_fix[ipv6 - port, host with port] PASSED
tests/middleware/test_shared_data.py::test_get_file_loader PASSED
tests/middleware/test_shared_data.py::test_shared_data_middleware PASSED
tests/sansio/test_multipart.py::test_decoder_simple PASSED
tests/sansio/test_multipart.py::test_decoder_data_start_with_different_newline_positions[-A] PASSED
tests/sansio/test_multipart.py::test_decoder_data_start_with_different_newline_positions[-\n] PASSED
tests/sansio/test_multipart.py::test_decoder_data_start_with_different_newline_positions[-\r] PASSED
tests/sansio/test_multipart.py::test_decoder_data_start_with_different_newline_positions[-\r\n] PASSED
tests/sansio/test_multipart.py::test_decoder_data_start_with_different_newline_positions[-\n\r] PASSED
tests/sansio/test_multipart.py::test_decoder_data_start_with_different_newline_positions[-A\n] PASSED
tests/sansio/test_multipart.py::test_decoder_data_start_with_different_newline_positions[-A\r] PASSED
tests/sansio/test_multipart.py::test_decoder_data_start_with_different_newline_positions[-A\r\n] PASSED
tests/sansio/test_multipart.py::test_decoder_data_start_with_different_newline_positions[-A\n\r] PASSED
tests/sansio/test_multipart.py::test_decoder_data_start_with_different_newline_positions[\r\n--foo-A] PASSED
tests/sansio/test_multipart.py::test_decoder_data_start_with_different_newline_positions[\r\n--foo-\n] PASSED
tests/sansio/test_multipart.py::test_decoder_data_start_with_different_newline_positions[\r\n--foo-\r] PASSED
tests/sansio/test_multipart.py::test_decoder_data_start_with_different_newline_positions[\r\n--foo-\r\n] PASSED
tests/sansio/test_multipart.py::test_decoder_data_start_with_different_newline_positions[\r\n--foo-\n\r] PASSED
tests/sansio/test_multipart.py::test_decoder_data_start_with_different_newline_positions[\r\n--foo-A\n] PASSED
tests/sansio/test_multipart.py::test_decoder_data_start_with_different_newline_positions[\r\n--foo-A\r] PASSED
tests/sansio/test_multipart.py::test_decoder_data_start_with_different_newline_positions[\r\n--foo-A\r\n] PASSED
tests/sansio/test_multipart.py::test_decoder_data_start_with_different_newline_positions[\r\n--foo-A\n\r] PASSED
tests/sansio/test_multipart.py::test_chunked_boundaries PASSED
tests/sansio/test_multipart.py::test_empty_field PASSED
tests/sansio/test_request.py::test_content_length[headers0-None] PASSED
tests/sansio/test_request.py::test_content_length[headers1-6] PASSED
tests/sansio/test_request.py::test_content_length[headers2-6] PASSED
tests/sansio/test_request.py::test_content_length[headers3-0] PASSED
tests/sansio/test_request.py::test_content_length[headers4-0] PASSED
tests/sansio/test_request.py::test_content_length[headers5-0] PASSED
tests/sansio/test_request.py::test_content_length[headers6-0] PASSED
tests/sansio/test_request.py::test_content_length[headers7-None] PASSED
tests/sansio/test_request.py::test_cookies PASSED
tests/sansio/test_utils.py::test_get_host[http-spam-None-spam] PASSED
tests/sansio/test_utils.py::test_get_host[http-spam:80-None-spam] PASSED
tests/sansio/test_utils.py::test_get_host[https-spam-None-spam] PASSED
tests/sansio/test_utils.py::test_get_host[https-spam:443-None-spam] PASSED
tests/sansio/test_utils.py::test_get_host[http-spam:8080-None-spam:8080] PASSED
tests/sansio/test_utils.py::test_get_host[http-127.0.0.1:8080-None-127.0.0.1:8080] PASSED
tests/sansio/test_utils.py::test_get_host[http-[::1]:8080-None-[::1]:8080] PASSED
tests/sansio/test_utils.py::test_get_host[ws-spam-None-spam] PASSED
tests/sansio/test_utils.py::test_get_host[ws-spam:80-None-spam] PASSED
tests/sansio/test_utils.py::test_get_host[wss-spam-None-spam] PASSED
tests/sansio/test_utils.py::test_get_host[wss-spam:443-None-spam] PASSED
tests/sansio/test_utils.py::test_get_host[http-None-server11-spam] PASSED
tests/sansio/test_utils.py::test_get_host[http-None-server12-spam:8080] PASSED
tests/sansio/test_utils.py::test_get_host[http-None-server13-127.0.0.1:8080] PASSED
tests/sansio/test_utils.py::test_get_host[http-None-server14-[::1]:8080] PASSED
tests/sansio/test_utils.py::test_get_host[http-None-server15-unix/socket] PASSED
tests/sansio/test_utils.py::test_get_host[http-spam-server16-spam] PASSED
tests/sansio/test_utils.py::test_get_content_length[2-None-2] PASSED
tests/sansio/test_utils.py::test_get_content_length[ 2-None-2] PASSED
tests/sansio/test_utils.py::test_get_content_length[2 -None-2] PASSED
tests/sansio/test_utils.py::test_get_content_length[None-None-None] PASSED
tests/sansio/test_utils.py::test_get_content_length[None-chunked-None] PASSED
tests/sansio/test_utils.py::test_get_content_length[a-None-0] PASSED
tests/sansio/test_utils.py::test_get_content_length[-2-None-0] PASSED
tests/test_datastructures.py::TestNativeItermethods::test_basic PASSED
tests/test_datastructures.py::TestImmutableTypeConversionDict::test_follows_dict_interface PASSED
tests/test_datastructures.py::TestImmutableTypeConversionDict::test_copies_are_mutable PASSED
tests/test_datastructures.py::TestImmutableTypeConversionDict::test_dict_is_hashable PASSED
tests/test_datastructures.py::TestImmutableTypeConversionDict::test_or PASSED
tests/test_datastructures.py::TestImmutableTypeConversionDict::test_ior PASSED
tests/test_datastructures.py::TestImmutableMultiDict::test_follows_dict_interface PASSED
tests/test_datastructures.py::TestImmutableMultiDict::test_copies_are_mutable PASSED
tests/test_datastructures.py::TestImmutableMultiDict::test_dict_is_hashable PASSED
tests/test_datastructures.py::TestImmutableMultiDict::test_or PASSED
tests/test_datastructures.py::TestImmutableMultiDict::test_ior PASSED
tests/test_datastructures.py::TestImmutableMultiDict::test_multidict_is_hashable PASSED
tests/test_datastructures.py::TestImmutableDict::test_follows_dict_interface PASSED
tests/test_datastructures.py::TestImmutableDict::test_copies_are_mutable PASSED
tests/test_datastructures.py::TestImmutableDict::test_dict_is_hashable PASSED
tests/test_datastructures.py::TestImmutableDict::test_or PASSED
tests/test_datastructures.py::TestImmutableDict::test_ior PASSED
tests/test_datastructures.py::TestImmutableOrderedMultiDict::test_follows_dict_interface PASSED
tests/test_datastructures.py::TestImmutableOrderedMultiDict::test_copies_are_mutable PASSED
tests/test_datastructures.py::TestImmutableOrderedMultiDict::test_dict_is_hashable PASSED
tests/test_datastructures.py::TestImmutableOrderedMultiDict::test_or PASSED
tests/test_datastructures.py::TestImmutableOrderedMultiDict::test_ior PASSED
tests/test_datastructures.py::TestImmutableOrderedMultiDict::test_ordered_multidict_is_hashable PASSED
tests/test_datastructures.py::TestMultiDict::test_pickle PASSED
tests/test_datastructures.py::TestMultiDict::test_multidict_dict_interop PASSED
tests/test_datastructures.py::TestMultiDict::test_basic_interface PASSED
tests/test_datastructures.py::TestMultiDict::test_or PASSED
tests/test_datastructures.py::TestMultiDict::test_ior PASSED
tests/test_datastructures.py::TestMultiDict::test_multidict_pop PASSED
tests/test_datastructures.py::TestMultiDict::test_multidict_pop_raise_badrequestkeyerror_for_empty_list_value PASSED
tests/test_datastructures.py::TestMultiDict::test_multidict_popitem_raise_badrequestkeyerror_for_empty_list_value PASSED
tests/test_datastructures.py::TestMultiDict::test_setlistdefault PASSED
tests/test_datastructures.py::TestMultiDict::test_iter_interfaces PASSED
tests/test_datastructures.py::TestMultiDict::test_getitem_raise_badrequestkeyerror_for_empty_list_value PASSED
tests/test_datastructures.py::TestOrderedMultiDict::test_pickle PASSED
tests/test_datastructures.py::TestOrderedMultiDict::test_multidict_dict_interop PASSED
tests/test_datastructures.py::TestOrderedMultiDict::test_basic_interface PASSED
tests/test_datastructures.py::TestOrderedMultiDict::test_or PASSED
tests/test_datastructures.py::TestOrderedMultiDict::test_ior PASSED
tests/test_datastructures.py::TestOrderedMultiDict::test_ordered_interface PASSED
tests/test_datastructures.py::TestOrderedMultiDict::test_iterables PASSED
tests/test_datastructures.py::TestOrderedMultiDict::test_get_description PASSED
tests/test_datastructures.py::TestTypeConversionDict::test_value_conversion PASSED
tests/test_datastructures.py::TestTypeConversionDict::test_return_default_when_conversion_is_not_possible PASSED
tests/test_datastructures.py::TestTypeConversionDict::test_propagate_exceptions_in_conversion PASSED
tests/test_datastructures.py::TestCombinedMultiDict::test_basic_interface PASSED
tests/test_datastructures.py::TestCombinedMultiDict::test_length PASSED
tests/test_datastructures.py::TestHeaders::test_basic_interface PASSED
tests/test_datastructures.py::TestHeaders::test_defaults_and_conversion PASSED
tests/test_datastructures.py::TestHeaders::test_copying PASSED
tests/test_datastructures.py::TestHeaders::test_popping PASSED
tests/test_datastructures.py::TestHeaders::test_set_arguments PASSED
tests/test_datastructures.py::TestHeaders::test_reject_newlines PASSED
tests/test_datastructures.py::TestHeaders::test_slicing PASSED
tests/test_datastructures.py::TestHeaders::test_extend PASSED
tests/test_datastructures.py::TestHeaders::test_update PASSED
tests/test_datastructures.py::TestHeaders::test_setlist PASSED
tests/test_datastructures.py::TestHeaders::test_setlistdefault PASSED
tests/test_datastructures.py::TestHeaders::test_to_wsgi_list PASSED
tests/test_datastructures.py::TestHeaders::test_equality PASSED
tests/test_datastructures.py::TestHeaders::test_or PASSED
tests/test_datastructures.py::TestHeaders::test_ior PASSED
tests/test_datastructures.py::TestEnvironHeaders::test_basic_interface PASSED
tests/test_datastructures.py::TestEnvironHeaders::test_skip_empty_special_vars PASSED
tests/test_datastructures.py::TestEnvironHeaders::test_return_type_is_str PASSED
tests/test_datastructures.py::TestEnvironHeaders::test_or PASSED
tests/test_datastructures.py::TestEnvironHeaders::test_ior PASSED
tests/test_datastructures.py::TestEnvironHeaders::test_str PASSED
tests/test_datastructures.py::TestHeaderSet::test_basic_interface PASSED
tests/test_datastructures.py::TestImmutableList::test_list_hashable PASSED
tests/test_datastructures.py::TestCallbackDict::test_callback_dict_reads PASSED
tests/test_datastructures.py::TestCallbackDict::test_callback_dict_writes PASSED
tests/test_datastructures.py::TestCacheControl::test_repr PASSED
tests/test_datastructures.py::TestCacheControl::test_set_none PASSED
tests/test_datastructures.py::TestCacheControl::test_no_transform PASSED
tests/test_datastructures.py::TestCacheControl::test_min_fresh PASSED
tests/test_datastructures.py::TestCacheControl::test_must_understand PASSED
tests/test_datastructures.py::TestCacheControl::test_stale_while_revalidate PASSED
tests/test_datastructures.py::TestCacheControl::test_stale_if_error PASSED
tests/test_datastructures.py::TestContentSecurityPolicy::test_construct PASSED
tests/test_datastructures.py::TestContentSecurityPolicy::test_properties PASSED
tests/test_datastructures.py::TestAccept::test_accept_basic PASSED
tests/test_datastructures.py::TestAccept::test_accept_wildcard PASSED
tests/test_datastructures.py::TestAccept::test_accept_keep_order PASSED
tests/test_datastructures.py::TestAccept::test_accept_wildcard_specificity PASSED
tests/test_datastructures.py::TestAccept::test_accept_equal_quality PASSED
tests/test_datastructures.py::TestMIMEAccept::test_mime_accept[values0-matches0-None-text/html] PASSED
tests/test_datastructures.py::TestMIMEAccept::test_mime_accept[values1-matches1-text/plain-text/plain] PASSED
tests/test_datastructures.py::TestMIMEAccept::test_mime_accept[values2-matches2-None-None] PASSED
tests/test_datastructures.py::TestMIMEAccept::test_mime_accept[values3-matches3-None-text/html] PASSED
tests/test_datastructures.py::TestMIMEAccept::test_mime_accept[values4-matches4-None-image/png] PASSED
tests/test_datastructures.py::TestMIMEAccept::test_mime_accept[values5-matches5-None-text/html] PASSED
tests/test_datastructures.py::TestMIMEAccept::test_mime_accept[values6-matches6-None-image/png] PASSED
tests/test_datastructures.py::TestMIMEAccept::test_mime_accept[values7-matches7-None-text/html;level=1] PASSED
tests/test_datastructures.py::TestLanguageAccept::test_best_match_fallback[values0-matches0-None-en] PASSED
tests/test_datastructures.py::TestLanguageAccept::test_best_match_fallback[values1-matches1-None-en_US] PASSED
tests/test_datastructures.py::TestLanguageAccept::test_best_match_fallback[values2-matches2-None-None] PASSED
tests/test_datastructures.py::TestLanguageAccept::test_best_match_fallback[values3-matches3-None-None] PASSED
tests/test_datastructures.py::TestLanguageAccept::test_best_match_fallback[values4-matches4-None-de] PASSED
tests/test_datastructures.py::TestLanguageAccept::test_best_match_fallback[values5-matches5-None-en] PASSED
tests/test_datastructures.py::TestLanguageAccept::test_best_match_fallback[values6-matches6-None-en-us] PASSED
tests/test_datastructures.py::TestLanguageAccept::test_best_match_fallback[values7-matches7-None-en-us] PASSED
tests/test_datastructures.py::TestLanguageAccept::test_best_match_fallback[values8-matches8-en-US-en] PASSED
tests/test_datastructures.py::TestLanguageAccept::test_best_match_fallback[values9-matches9-en-US-en-US] PASSED
tests/test_datastructures.py::TestLanguageAccept::test_best_match_fallback[values10-matches10-None-aus] PASSED
tests/test_datastructures.py::TestLanguageAccept::test_best_match_fallback[values11-matches11-None-aus-EN] PASSED
tests/test_datastructures.py::TestFileStorage::test_mimetype_always_lowercase PASSED
tests/test_datastructures.py::TestFileStorage::test_bytes_proper_sentinel[data0] PASSED
tests/test_datastructures.py::TestFileStorage::test_bytes_proper_sentinel[data1] PASSED
tests/test_datastructures.py::TestFileStorage::test_proxy_can_access_stream_attrs[SpooledTemporaryFile] PASSED
tests/test_datastructures.py::TestFileStorage::test_proxy_can_access_stream_attrs[BytesIO] PASSED
tests/test_datastructures.py::TestFileStorage::test_save_to_pathlib_dst PASSED
tests/test_datastructures.py::TestFileStorage::test_save_to_bytes_io PASSED
tests/test_datastructures.py::TestFileStorage::test_save_to_file PASSED
tests/test_datastructures.py::test_range_to_header[ranges0] PASSED
tests/test_datastructures.py::test_range_to_header[ranges1] PASSED
tests/test_datastructures.py::test_range_validates_ranges[ranges0] PASSED
tests/test_datastructures.py::test_range_validates_ranges[ranges1] PASSED
tests/test_datastructures.py::test_range_validates_ranges[ranges2] PASSED
tests/test_datastructures.py::test_range_validates_ranges[ranges3] PASSED
tests/test_datastructures.py::test_iter_multi_data[value0-expect0] PASSED
tests/test_datastructures.py::test_iter_multi_data[value1-expect1] PASSED
tests/test_datastructures.py::test_iter_multi_data[value2-expect2] PASSED
tests/test_debug.py::TestDebugRepr::test_basic_repr PASSED
tests/test_debug.py::TestDebugRepr::test_string_repr PASSED
tests/test_debug.py::TestDebugRepr::test_string_subclass_repr PASSED
tests/test_debug.py::TestDebugRepr::test_sequence_repr PASSED
tests/test_debug.py::TestDebugRepr::test_mapping_repr PASSED
tests/test_debug.py::TestDebugRepr::test_custom_repr PASSED
tests/test_debug.py::TestDebugRepr::test_list_subclass_repr PASSED
tests/test_debug.py::TestDebugRepr::test_regex_repr PASSED
tests/test_debug.py::TestDebugRepr::test_set_repr PASSED
tests/test_debug.py::TestDebugRepr::test_recursive_repr PASSED
tests/test_debug.py::TestDebugRepr::test_broken_repr PASSED
tests/test_debug.py::TestDebugHelpers::test_object_dumping PASSED
tests/test_debug.py::TestDebugHelpers::test_debug_dump PASSED
tests/test_debug.py::TestDebugHelpers::test_debug_help PASSED
tests/test_debug.py::TestDebugHelpers::test_exc_divider_found_on_chained_exception PASSED
tests/test_debug.py::test_get_machine_id PASSED
tests/test_debug.py::test_console_closure_variables PASSED
tests/test_debug.py::test_chained_exception_cycle PASSED
tests/test_debug.py::test_exception_without_traceback PASSED
tests/test_exceptions.py::test_proxy_exception PASSED
tests/test_exceptions.py::test_aborter_general[test0] PASSED
tests/test_exceptions.py::test_aborter_general[test1] PASSED
tests/test_exceptions.py::test_aborter_general[test2] PASSED
tests/test_exceptions.py::test_aborter_general[test3] PASSED
tests/test_exceptions.py::test_aborter_general[test4] PASSED
tests/test_exceptions.py::test_aborter_general[test5] PASSED
tests/test_exceptions.py::test_aborter_general[test6] PASSED
tests/test_exceptions.py::test_aborter_general[test7] PASSED
tests/test_exceptions.py::test_aborter_general[test8] PASSED
tests/test_exceptions.py::test_aborter_general[test9] PASSED
tests/test_exceptions.py::test_aborter_general[test10] PASSED
tests/test_exceptions.py::test_aborter_general[test11] PASSED
tests/test_exceptions.py::test_aborter_general[test12] PASSED
tests/test_exceptions.py::test_aborter_general[test13] PASSED
tests/test_exceptions.py::test_aborter_general[test14] PASSED
tests/test_exceptions.py::test_aborter_general[test15] PASSED
tests/test_exceptions.py::test_aborter_general[test16] PASSED
tests/test_exceptions.py::test_aborter_general[test17] PASSED
tests/test_exceptions.py::test_aborter_general[test18] PASSED
tests/test_exceptions.py::test_aborter_general[test19] PASSED
tests/test_exceptions.py::test_abort_description_markup PASSED
tests/test_exceptions.py::test_aborter_custom PASSED
tests/test_exceptions.py::test_exception_repr PASSED
tests/test_exceptions.py::test_method_not_allowed_methods PASSED
tests/test_exceptions.py::test_unauthorized_www_authenticate PASSED
tests/test_exceptions.py::test_response_header_content_type_should_contain_charset PASSED
tests/test_exceptions.py::test_retry_after_mixin[TooManyRequests-20-20] PASSED
tests/test_exceptions.py::test_retry_after_mixin[ServiceUnavailable-value1-Sat, 04 Jan 2020 18:52:16 GMT] PASSED
tests/test_exceptions.py::test_passing_response[BadRequest] PASSED
tests/test_exceptions.py::test_passing_response[Unauthorized] PASSED
tests/test_exceptions.py::test_passing_response[Forbidden] PASSED
tests/test_exceptions.py::test_passing_response[NotFound] PASSED
tests/test_exceptions.py::test_passing_response[MethodNotAllowed] PASSED
tests/test_exceptions.py::test_passing_response[NotAcceptable] PASSED
tests/test_exceptions.py::test_passing_response[RequestTimeout] PASSED
tests/test_exceptions.py::test_passing_response[Conflict] PASSED
tests/test_exceptions.py::test_passing_response[Gone] PASSED
tests/test_exceptions.py::test_passing_response[LengthRequired] PASSED
tests/test_exceptions.py::test_passing_response[PreconditionFailed] PASSED
tests/test_exceptions.py::test_passing_response[RequestEntityTooLarge] PASSED
tests/test_exceptions.py::test_passing_response[RequestURITooLarge] PASSED
tests/test_exceptions.py::test_passing_response[UnsupportedMediaType] PASSED
tests/test_exceptions.py::test_passing_response[RequestedRangeNotSatisfiable] PASSED
tests/test_exceptions.py::test_passing_response[ExpectationFailed] PASSED
tests/test_exceptions.py::test_passing_response[ImATeapot] PASSED
tests/test_exceptions.py::test_passing_response[MisdirectedRequest] PASSED
tests/test_exceptions.py::test_passing_response[UnprocessableEntity] PASSED
tests/test_exceptions.py::test_passing_response[Locked] PASSED
tests/test_exceptions.py::test_passing_response[FailedDependency] PASSED
tests/test_exceptions.py::test_passing_response[PreconditionRequired] PASSED
tests/test_exceptions.py::test_passing_response[TooManyRequests] PASSED
tests/test_exceptions.py::test_passing_response[RequestHeaderFieldsTooLarge] PASSED
tests/test_exceptions.py::test_passing_response[UnavailableForLegalReasons] PASSED
tests/test_exceptions.py::test_passing_response[InternalServerError] PASSED
tests/test_exceptions.py::test_passing_response[NotImplemented] PASSED
tests/test_exceptions.py::test_passing_response[BadGateway] PASSED
tests/test_exceptions.py::test_passing_response[ServiceUnavailable] PASSED
tests/test_exceptions.py::test_passing_response[GatewayTimeout] PASSED
tests/test_exceptions.py::test_passing_response[HTTPVersionNotSupported] PASSED
tests/test_exceptions.py::test_description_none PASSED
tests/test_exceptions.py::test_response_body[BadRequest] PASSED
tests/test_exceptions.py::test_response_body[Unauthorized] PASSED
tests/test_exceptions.py::test_response_body[Forbidden] PASSED
tests/test_exceptions.py::test_response_body[NotFound] PASSED
tests/test_exceptions.py::test_response_body[MethodNotAllowed] PASSED
tests/test_exceptions.py::test_response_body[NotAcceptable] PASSED
tests/test_exceptions.py::test_response_body[RequestTimeout] PASSED
tests/test_exceptions.py::test_response_body[Conflict] PASSED
tests/test_exceptions.py::test_response_body[Gone] PASSED
tests/test_exceptions.py::test_response_body[LengthRequired] PASSED
tests/test_exceptions.py::test_response_body[PreconditionFailed] PASSED
tests/test_exceptions.py::test_response_body[RequestEntityTooLarge] PASSED
tests/test_exceptions.py::test_response_body[RequestURITooLarge] PASSED
tests/test_exceptions.py::test_response_body[UnsupportedMediaType] PASSED
tests/test_exceptions.py::test_response_body[RequestedRangeNotSatisfiable] PASSED
tests/test_exceptions.py::test_response_body[ExpectationFailed] PASSED
tests/test_exceptions.py::test_response_body[ImATeapot] PASSED
tests/test_exceptions.py::test_response_body[MisdirectedRequest] PASSED
tests/test_exceptions.py::test_response_body[UnprocessableEntity] PASSED
tests/test_exceptions.py::test_response_body[Locked] PASSED
tests/test_exceptions.py::test_response_body[FailedDependency] PASSED
tests/test_exceptions.py::test_response_body[PreconditionRequired] PASSED
tests/test_exceptions.py::test_response_body[TooManyRequests] PASSED
tests/test_exceptions.py::test_response_body[RequestHeaderFieldsTooLarge] PASSED
tests/test_exceptions.py::test_response_body[UnavailableForLegalReasons] PASSED
tests/test_exceptions.py::test_response_body[InternalServerError] PASSED
tests/test_exceptions.py::test_response_body[NotImplemented] PASSED
tests/test_exceptions.py::test_response_body[BadGateway] PASSED
tests/test_exceptions.py::test_response_body[ServiceUnavailable] PASSED
tests/test_exceptions.py::test_response_body[GatewayTimeout] PASSED
tests/test_exceptions.py::test_response_body[HTTPVersionNotSupported] PASSED
tests/test_formparser.py::TestFormParser::test_limiting PASSED
tests/test_formparser.py::TestFormParser::test_urlencoded_no_max PASSED
tests/test_formparser.py::TestFormParser::test_urlencoded_silent_decode PASSED
tests/test_formparser.py::TestFormParser::test_missing_multipart_boundary PASSED
tests/test_formparser.py::TestFormParser::test_parse_form_data_put_without_content PASSED
tests/test_formparser.py::TestFormParser::test_parse_form_data_get_without_content PASSED
tests/test_formparser.py::TestFormParser::test_default_stream_factory[False-100] PASSED
tests/test_formparser.py::TestFormParser::test_default_stream_factory[False-3000] PASSED
tests/test_formparser.py::TestFormParser::test_default_stream_factory[True-100] PASSED
tests/test_formparser.py::TestFormParser::test_default_stream_factory[True-3000] PASSED
tests/test_formparser.py::TestFormParser::test_parse_bad_content_type PASSED
tests/test_formparser.py::TestFormParser::test_parse_from_environ PASSED
tests/test_formparser.py::TestMultiPart::test_basic PASSED
tests/test_formparser.py::TestMultiPart::test_ie7_unc_path PASSED
tests/test_formparser.py::TestMultiPart::test_end_of_file PASSED
tests/test_formparser.py::TestMultiPart::test_file_no_content_type PASSED
tests/test_formparser.py::TestMultiPart::test_extra_newline PASSED
tests/test_formparser.py::TestMultiPart::test_headers PASSED
tests/test_formparser.py::TestMultiPart::test_nonstandard_line_endings[\n] PASSED
tests/test_formparser.py::TestMultiPart::test_nonstandard_line_endings[\r] PASSED
tests/test_formparser.py::TestMultiPart::test_nonstandard_line_endings[\r\n] PASSED
tests/test_formparser.py::TestMultiPart::test_failures PASSED
tests/test_formparser.py::TestMultiPart::test_empty_multipart PASSED
tests/test_formparser.py::TestMultiPartParser::test_constructor_not_pass_stream_factory_and_cls PASSED
tests/test_formparser.py::TestMultiPartParser::test_constructor_pass_stream_factory_and_cls PASSED
tests/test_formparser.py::TestMultiPartParser::test_file_rfc2231_filename_continuations PASSED
tests/test_formparser.py::test_multipart_max_form_memory_size PASSED
tests/test_http.py::TestHTTPUtility::test_accept PASSED
tests/test_http.py::TestHTTPUtility::test_accept_parameter_with_space PASSED
tests/test_http.py::TestHTTPUtility::test_mime_accept PASSED
tests/test_http.py::TestHTTPUtility::test_accept_matches PASSED
tests/test_http.py::TestHTTPUtility::test_accept_mime_specificity PASSED
tests/test_http.py::TestHTTPUtility::test_charset_accept PASSED
tests/test_http.py::TestHTTPUtility::test_language_accept PASSED
tests/test_http.py::TestHTTPUtility::test_set_header PASSED
tests/test_http.py::TestHTTPUtility::test_list_header[a b-expect0] PASSED
tests/test_http.py::TestHTTPUtility::test_list_header[a b, c-expect1] PASSED
tests/test_http.py::TestHTTPUtility::test_list_header[a b, "c, d"-expect2] PASSED
tests/test_http.py::TestHTTPUtility::test_list_header["a\\"b", c-expect3] PASSED
tests/test_http.py::TestHTTPUtility::test_dict_header[foo="bar baz", blah=42-expect0] PASSED
tests/test_http.py::TestHTTPUtility::test_dict_header[foo, bar=-expect1] PASSED
tests/test_http.py::TestHTTPUtility::test_dict_header[=foo, =-expect2] PASSED
tests/test_http.py::TestHTTPUtility::test_cache_control_header PASSED
tests/test_http.py::TestHTTPUtility::test_csp_header PASSED
tests/test_http.py::TestHTTPUtility::test_authorization_header PASSED
tests/test_http.py::TestHTTPUtility::test_authorization_ignore_invalid_parameters PASSED
tests/test_http.py::TestHTTPUtility::test_authorization_token_padding PASSED
tests/test_http.py::TestHTTPUtility::test_authorization_basic_incorrect_padding PASSED
tests/test_http.py::TestHTTPUtility::test_bad_authorization_header_encoding PASSED
tests/test_http.py::TestHTTPUtility::test_authorization_eq PASSED
tests/test_http.py::TestHTTPUtility::test_www_authenticate_header PASSED
tests/test_http.py::TestHTTPUtility::test_www_authenticate_token_padding PASSED
tests/test_http.py::TestHTTPUtility::test_www_authenticate_eq PASSED
tests/test_http.py::TestHTTPUtility::test_etags PASSED
tests/test_http.py::TestHTTPUtility::test_etags_nonzero PASSED
tests/test_http.py::TestHTTPUtility::test_remove_entity_headers PASSED
tests/test_http.py::TestHTTPUtility::test_remove_hop_by_hop_headers PASSED
tests/test_http.py::TestHTTPUtility::test_parse_options_header_empty[None-] PASSED
tests/test_http.py::TestHTTPUtility::test_parse_options_header_empty[-] PASSED
tests/test_http.py::TestHTTPUtility::test_parse_options_header_empty[;a=b-] PASSED
tests/test_http.py::TestHTTPUtility::test_parse_options_header_empty[v-v] PASSED
tests/test_http.py::TestHTTPUtility::test_parse_options_header_empty[v;-v] PASSED
tests/test_http.py::TestHTTPUtility::test_parse_options_header[v;a=b;c=d;-expect0] PASSED
tests/test_http.py::TestHTTPUtility::test_parse_options_header[v;  ; a=b ; -expect1] PASSED
tests/test_http.py::TestHTTPUtility::test_parse_options_header[v;a-expect2] PASSED
tests/test_http.py::TestHTTPUtility::test_parse_options_header[v;a=-expect3] PASSED
tests/test_http.py::TestHTTPUtility::test_parse_options_header[v;=b-expect4] PASSED
tests/test_http.py::TestHTTPUtility::test_parse_options_header[v;a="b"-expect5] PASSED
tests/test_http.py::TestHTTPUtility::test_parse_options_header[v;a=\xb5-expect6] PASSED
tests/test_http.py::TestHTTPUtility::test_parse_options_header[v;a="';'";b="\xb5";-expect7] PASSED
tests/test_http.py::TestHTTPUtility::test_parse_options_header[v;a="b c"-expect8] PASSED
tests/test_http.py::TestHTTPUtility::test_parse_options_header[v;a="b\\"c";d=e-expect9] PASSED
tests/test_http.py::TestHTTPUtility::test_parse_options_header[v;a="c:\\\\"-expect10] PASSED
tests/test_http.py::TestHTTPUtility::test_parse_options_header[v;a="c:\\"-expect11] PASSED
tests/test_http.py::TestHTTPUtility::test_parse_options_header[v;a="b\\\\\\"c"-expect12] PASSED
tests/test_http.py::TestHTTPUtility::test_parse_options_header[v;a="b%22c"-expect13] PASSED
tests/test_http.py::TestHTTPUtility::test_parse_options_header[v;a*=b-expect14] PASSED
tests/test_http.py::TestHTTPUtility::test_parse_options_header[v;a*=ASCII'en'b-expect15] PASSED
tests/test_http.py::TestHTTPUtility::test_parse_options_header[v;a*=US-ASCII''%62-expect16] PASSED
tests/test_http.py::TestHTTPUtility::test_parse_options_header[v;a*=UTF-8''%C2%B5-expect17] PASSED
tests/test_http.py::TestHTTPUtility::test_parse_options_header[v;a*=US-ASCII''%C2%B5-expect18] PASSED
tests/test_http.py::TestHTTPUtility::test_parse_options_header[v;a*=BAD''%62-expect19] PASSED
tests/test_http.py::TestHTTPUtility::test_parse_options_header[v;a*=UTF-8'''%F0%9F%90%8D'.txt-expect20] PASSED
tests/test_http.py::TestHTTPUtility::test_parse_options_header[v;a="\U0001f40d.txt"-expect21] PASSED
tests/test_http.py::TestHTTPUtility::test_parse_options_header[v;a*0=b;a*1=c;d=e-expect22] PASSED
tests/test_http.py::TestHTTPUtility::test_parse_options_header[v;a*0*=b-expect23] PASSED
tests/test_http.py::TestHTTPUtility::test_parse_options_header[v;a*0*=UTF-8''b;a*1=c;a*2*=%C2%B5-expect24] PASSED
tests/test_http.py::TestHTTPUtility::test_parse_options_header[v;a="\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\-expect25] PASSED
tests/test_http.py::TestHTTPUtility::test_parse_options_header_broken_values PASSED
tests/test_http.py::TestHTTPUtility::test_parse_options_header_case_insensitive PASSED
tests/test_http.py::TestHTTPUtility::test_dump_options_header PASSED
tests/test_http.py::TestHTTPUtility::test_dump_header PASSED
tests/test_http.py::TestHTTPUtility::test_is_resource_modified PASSED
tests/test_http.py::TestHTTPUtility::test_is_resource_modified_for_range_requests PASSED
tests/test_http.py::TestHTTPUtility::test_parse_cookie PASSED
tests/test_http.py::TestHTTPUtility::test_dump_cookie PASSED
tests/test_http.py::TestHTTPUtility::test_bad_cookies PASSED
tests/test_http.py::TestHTTPUtility::test_empty_keys_are_ignored PASSED
tests/test_http.py::TestHTTPUtility::test_cookie_quoting PASSED
tests/test_http.py::TestHTTPUtility::test_parse_set_cookie_directive PASSED
tests/test_http.py::TestHTTPUtility::test_cookie_domain_resolving PASSED
tests/test_http.py::TestHTTPUtility::test_cookie_unicode_dumping PASSED
tests/test_http.py::TestHTTPUtility::test_cookie_unicode_keys PASSED
tests/test_http.py::TestHTTPUtility::test_cookie_unicode_parsing PASSED
tests/test_http.py::TestHTTPUtility::test_cookie_domain_encoding PASSED
tests/test_http.py::TestHTTPUtility::test_cookie_maxsize PASSED
tests/test_http.py::TestHTTPUtility::test_cookie_samesite_attribute[strict-foo=bar; SameSite=Strict] PASSED
tests/test_http.py::TestHTTPUtility::test_cookie_samesite_attribute[lax-foo=bar; SameSite=Lax] PASSED
tests/test_http.py::TestHTTPUtility::test_cookie_samesite_attribute[none-foo=bar; SameSite=None] PASSED
tests/test_http.py::TestHTTPUtility::test_cookie_samesite_attribute[None-foo=bar] PASSED
tests/test_http.py::TestHTTPUtility::test_cookie_samesite_invalid PASSED
tests/test_http.py::TestHTTPUtility::test_cookie_partitioned PASSED
tests/test_http.py::TestHTTPUtility::test_cookie_partitioned_sets_secure PASSED
tests/test_http.py::TestRange::test_if_range_parsing PASSED
tests/test_http.py::TestRange::test_range_parsing PASSED
tests/test_http.py::TestRange::test_content_range_parsing PASSED
tests/test_http.py::TestRegression::test_best_match_works PASSED
tests/test_http.py::test_authorization_to_header[Basic V2Vya3pldWc6V2VrcnpldWc=] PASSED
tests/test_http.py::test_authorization_to_header[Digest username=Mufasa, realm="testrealm@host.invalid", nonce=dcd98b7102dd2f0e8b11d0f600bfb0c093, uri="/dir/index.html", qop=auth, nc=00000001, cnonce=0a4f113b, response=6629fae49393a05397450978507c4ef1, opaque=5ccc069c403ebaf9f0171e9517f40e41] PASSED
tests/test_http.py::test_parse_date[Sun, 06 Nov 1994 08:49:37 GMT    -expect0] PASSED
tests/test_http.py::test_parse_date[Sunday, 06-Nov-94 08:49:37 GMT-expect1] PASSED
tests/test_http.py::test_parse_date[ Sun Nov  6 08:49:37 1994-expect2] PASSED
tests/test_http.py::test_parse_date[foo-None] PASSED
tests/test_http.py::test_parse_date[ Sun 02 Feb 1343 08:49:37 GMT-expect4] PASSED
tests/test_http.py::test_parse_date[Thu, 01 Jan 1970 00:00:00 GMT-expect5] PASSED
tests/test_http.py::test_parse_date[Thu, 33 Jan 1970 00:00:00 GMT-None] PASSED
tests/test_http.py::test_http_date[value0-Sun, 06 Nov 1994 08:49:37 GMT] PASSED
tests/test_http.py::test_http_date[value1-Sun, 06 Nov 1994 16:49:37 GMT] PASSED
tests/test_http.py::test_http_date[value2-Sun, 06 Nov 1994 08:49:37 GMT] PASSED
tests/test_http.py::test_http_date[0-Thu, 01 Jan 1970 00:00:00 GMT] PASSED
tests/test_http.py::test_http_date[value4-Thu, 01 Jan 1970 00:00:00 GMT] PASSED
tests/test_http.py::test_http_date[value5-Mon, 01 Jan 0001 00:00:00 GMT] PASSED
tests/test_http.py::test_http_date[value6-Tue, 01 Jan 0999 00:00:00 GMT] PASSED
tests/test_http.py::test_http_date[value7-Wed, 01 Jan 1000 00:00:00 GMT] PASSED
tests/test_http.py::test_http_date[value8-Wed, 01 Jan 2020 00:00:00 GMT] PASSED
tests/test_http.py::test_http_date[value9-Wed, 01 Jan 2020 00:00:00 GMT] PASSED
tests/test_http.py::test_accept_invalid_float[.5] PASSED
tests/test_http.py::test_accept_invalid_float[+0.5] PASSED
tests/test_http.py::test_accept_invalid_float[0.5_1] PASSED
tests/test_http.py::test_accept_invalid_float[\U0001fbf0.\U0001fbf5] PASSED
tests/test_http.py::test_accept_valid_int_one_zero PASSED
tests/test_http.py::test_range_invalid_int[\U0001fbf1\U0001fbf2\U0001fbf3] PASSED
tests/test_http.py::test_range_invalid_int[+1-] PASSED
tests/test_http.py::test_range_invalid_int[1-1_23] PASSED
tests/test_http.py::test_content_range_invalid_int[*/\U0001fbf1\U0001fbf2\U0001fbf3] PASSED
tests/test_http.py::test_content_range_invalid_int[1-+2/3] PASSED
tests/test_http.py::test_content_range_invalid_int[1_23-125/*] PASSED
tests/test_internal.py::test_wrapper_internals PASSED
tests/test_local.py::test_basic_local PASSED
tests/test_local.py::test_basic_local_asyncio PASSED
tests/test_local.py::test_local_release PASSED
tests/test_local.py::test_local_stack PASSED
tests/test_local.py::test_local_stack_asyncio PASSED
tests/test_local.py::test_proxy_local PASSED
tests/test_local.py::test_proxy_callable PASSED
tests/test_local.py::test_proxy_wrapped PASSED
tests/test_local.py::test_proxy_doc PASSED
tests/test_local.py::test_proxy_fallback PASSED
tests/test_local.py::test_proxy_unbound PASSED
tests/test_local.py::test_proxy_type PASSED
tests/test_local.py::test_proxy_string_representations PASSED
tests/test_local.py::test_proxy_hash PASSED
tests/test_local.py::test_proxy_binop_int[lt] PASSED
tests/test_local.py::test_proxy_binop_int[le] PASSED
tests/test_local.py::test_proxy_binop_int[eq] PASSED
tests/test_local.py::test_proxy_binop_int[ne] PASSED
tests/test_local.py::test_proxy_binop_int[gt] PASSED
tests/test_local.py::test_proxy_binop_int[ge] PASSED
tests/test_local.py::test_proxy_binop_int[add] PASSED
tests/test_local.py::test_proxy_binop_int[sub] PASSED
tests/test_local.py::test_proxy_binop_int[mul] PASSED
tests/test_local.py::test_proxy_binop_int[truediv] PASSED
tests/test_local.py::test_proxy_binop_int[floordiv] PASSED
tests/test_local.py::test_proxy_binop_int[mod] PASSED
tests/test_local.py::test_proxy_binop_int[divmod] PASSED
tests/test_local.py::test_proxy_binop_int[pow] PASSED
tests/test_local.py::test_proxy_binop_int[lshift] PASSED
tests/test_local.py::test_proxy_binop_int[rshift] PASSED
tests/test_local.py::test_proxy_binop_int[and_] PASSED
tests/test_local.py::test_proxy_binop_int[or_] PASSED
tests/test_local.py::test_proxy_binop_int[xor] PASSED
tests/test_local.py::test_proxy_uop_int[neg] PASSED
tests/test_local.py::test_proxy_uop_int[pos] PASSED
tests/test_local.py::test_proxy_uop_int[abs] PASSED
tests/test_local.py::test_proxy_uop_int[invert] PASSED
tests/test_local.py::test_proxy_numeric PASSED
tests/test_local.py::test_proxy_iop[iadd] PASSED
tests/test_local.py::test_proxy_iop[isub] PASSED
tests/test_local.py::test_proxy_iop[imul] PASSED
tests/test_local.py::test_proxy_iop[imatmul] PASSED
tests/test_local.py::test_proxy_iop[itruediv] PASSED
tests/test_local.py::test_proxy_iop[ifloordiv] PASSED
tests/test_local.py::test_proxy_iop[imod] PASSED
tests/test_local.py::test_proxy_iop[ipow] PASSED
tests/test_local.py::test_proxy_iop[ilshift] PASSED
tests/test_local.py::test_proxy_iop[irshift] PASSED
tests/test_local.py::test_proxy_iop[iand] PASSED
tests/test_local.py::test_proxy_iop[ior] PASSED
tests/test_local.py::test_proxy_iop[ixor] PASSED
tests/test_local.py::test_proxy_matmul PASSED
tests/test_local.py::test_proxy_str PASSED
tests/test_local.py::test_proxy_list PASSED
tests/test_local.py::test_proxy_copy PASSED
tests/test_local.py::test_proxy_iterator PASSED
tests/test_local.py::test_proxy_length_hint PASSED
tests/test_local.py::test_proxy_context_manager PASSED
tests/test_local.py::test_proxy_class PASSED
tests/test_local.py::test_proxy_attributes PASSED
tests/test_local.py::test_proxy_await PASSED
tests/test_local.py::test_proxy_aiter PASSED
tests/test_local.py::test_proxy_async_context_manager PASSED
tests/test_routing.py::test_basic_routing PASSED
tests/test_routing.py::test_merge_slashes_match PASSED
tests/test_routing.py::test_merge_slash_encoding[/merge/%//path-/merge/%25/path] PASSED
tests/test_routing.py::test_merge_slash_encoding[/merge//st/path-/merge/st/path] PASSED
tests/test_routing.py::test_merge_slashes_build PASSED
tests/test_routing.py::test_strict_slashes_redirect PASSED
tests/test_routing.py::test_strict_slashes_leaves_dont_consume PASSED
tests/test_routing.py::test_environ_defaults PASSED
tests/test_routing.py::test_environ_nonascii_pathinfo PASSED
tests/test_routing.py::test_basic_building PASSED
tests/test_routing.py::test_long_build PASSED
tests/test_routing.py::test_defaults PASSED
tests/test_routing.py::test_negative PASSED
tests/test_routing.py::test_greedy PASSED
tests/test_routing.py::test_path PASSED
tests/test_routing.py::test_dispatch PASSED
tests/test_routing.py::test_http_host_before_server_name PASSED
tests/test_routing.py::test_invalid_subdomain_warning PASSED
tests/test_routing.py::test_server_name_match_default_port[http://localhost-localhost:80] PASSED
tests/test_routing.py::test_server_name_match_default_port[https://localhost-localhost:443] PASSED
tests/test_routing.py::test_adapter_url_parameter_sorting PASSED
tests/test_routing.py::test_request_direct_charset_bug PASSED
tests/test_routing.py::test_request_redirect_default PASSED
tests/test_routing.py::test_request_redirect_default_subdomain PASSED
tests/test_routing.py::test_adapter_match_return_rule PASSED
tests/test_routing.py::test_server_name_interpolation PASSED
tests/test_routing.py::test_rule_emptying PASSED
tests/test_routing.py::test_rule_unhashable PASSED
tests/test_routing.py::test_rule_templates PASSED
tests/test_routing.py::test_non_string_parts PASSED
tests/test_routing.py::test_complex_routing_rules PASSED
tests/test_routing.py::test_default_converters PASSED
tests/test_routing.py::test_uuid_converter PASSED
tests/test_routing.py::test_converter_with_tuples PASSED
tests/test_routing.py::test_nested_regex_groups PASSED
tests/test_routing.py::test_anyconverter PASSED
tests/test_routing.py::test_any_converter_build_validates_value PASSED
tests/test_routing.py::test_part_isolating_default PASSED
tests/test_routing.py::test_build_values_dict[int-1-/1] PASSED
tests/test_routing.py::test_build_values_dict[int-None-BuildError] PASSED
tests/test_routing.py::test_build_values_dict[int-value2-TypeError] PASSED
tests/test_routing.py::test_build_values_dict[list-value3-/1] PASSED
tests/test_routing.py::test_build_values_dict[list-value4-/1.None.2] PASSED
tests/test_routing.py::test_build_values_dict[list-1-TypeError] PASSED
tests/test_routing.py::test_build_values_multidict[int-1-/1] PASSED
tests/test_routing.py::test_build_values_multidict[int-value1-/1] PASSED
tests/test_routing.py::test_build_values_multidict[int-value2-BuildError] PASSED
tests/test_routing.py::test_build_values_multidict[int-None-TypeError] PASSED
tests/test_routing.py::test_build_values_multidict[int-value4-TypeError] PASSED
tests/test_routing.py::test_build_values_multidict[list-1-TypeError] PASSED
tests/test_routing.py::test_build_values_multidict[list-value6-TypeError] PASSED
tests/test_routing.py::test_build_values_multidict[list-value7-/1] PASSED
tests/test_routing.py::test_build_values_multidict[list-value8-/1.None.2] PASSED
tests/test_routing.py::test_build_append_unknown_dict[None-] PASSED
tests/test_routing.py::test_build_append_unknown_dict[value1-] PASSED
tests/test_routing.py::test_build_append_unknown_dict[value2-] PASSED
tests/test_routing.py::test_build_append_unknown_dict[-?v=] PASSED
tests/test_routing.py::test_build_append_unknown_dict[value4-?v=] PASSED
tests/test_routing.py::test_build_append_unknown_dict[0-?v=0] PASSED
tests/test_routing.py::test_build_append_unknown_dict[1.0-?v=1.0] PASSED
tests/test_routing.py::test_build_append_unknown_dict[value7-?v=1&v=2] PASSED
tests/test_routing.py::test_build_append_unknown_dict[value8-?v=1&v=2] PASSED
tests/test_routing.py::test_build_append_unknown_dict[value9-?v=1&v=&v=2] PASSED
tests/test_routing.py::test_build_append_unknown_dict[1+2-?v=1%2B2] PASSED
tests/test_routing.py::test_build_append_unknown_multidict[None-] PASSED
tests/test_routing.py::test_build_append_unknown_multidict[value1-] PASSED
tests/test_routing.py::test_build_append_unknown_multidict[value2-] PASSED
tests/test_routing.py::test_build_append_unknown_multidict[-?v=] PASSED
tests/test_routing.py::test_build_append_unknown_multidict[value4-?v=] PASSED
tests/test_routing.py::test_build_append_unknown_multidict[0-?v=0] PASSED
tests/test_routing.py::test_build_append_unknown_multidict[1.0-?v=1.0] PASSED
tests/test_routing.py::test_build_append_unknown_multidict[value7-?v=1&v=2] PASSED
tests/test_routing.py::test_build_append_unknown_multidict[value8-?v=1&v=2] PASSED
tests/test_routing.py::test_build_append_unknown_multidict[value9-?v=1&v=&v=2] PASSED
tests/test_routing.py::test_build_drop_none PASSED
tests/test_routing.py::test_method_fallback PASSED
tests/test_routing.py::test_implicit_head PASSED
tests/test_routing.py::test_pass_str_as_router_methods PASSED
tests/test_routing.py::test_protocol_joining_bug PASSED
tests/test_routing.py::test_allowed_methods_querying PASSED
tests/test_routing.py::test_external_building_with_port PASSED
tests/test_routing.py::test_external_building_with_port_bind_to_environ PASSED
tests/test_routing.py::test_external_building_with_port_bind_to_environ_wrong_servername PASSED
tests/test_routing.py::test_bind_long_idna_name_with_port PASSED
tests/test_routing.py::test_converter_parser PASSED
tests/test_routing.py::test_alias_redirects PASSED
tests/test_routing.py::test_double_defaults[] PASSED
tests/test_routing.py::test_double_defaults[/aaa] PASSED
tests/test_routing.py::test_host_matching PASSED
tests/test_routing.py::test_host_matching_building PASSED
tests/test_routing.py::test_server_name_casing PASSED
tests/test_routing.py::test_redirect_request_exception_code PASSED
tests/test_routing.py::test_redirect_path_quoting PASSED
tests/test_routing.py::test_unicode_rules PASSED
tests/test_routing.py::test_empty_path_info PASSED
tests/test_routing.py::test_both_bind_and_match_path_info_are_none PASSED
tests/test_routing.py::test_map_repr PASSED
tests/test_routing.py::test_empty_subclass_rules_with_custom_kwargs PASSED
tests/test_routing.py::test_finding_closest_match_by_endpoint PASSED
tests/test_routing.py::test_finding_closest_match_by_values PASSED
tests/test_routing.py::test_finding_closest_match_by_method PASSED
tests/test_routing.py::test_finding_closest_match_when_none_exist PASSED
tests/test_routing.py::test_error_message_without_suggested_rule PASSED
tests/test_routing.py::test_error_message_suggestion PASSED
tests/test_routing.py::test_no_memory_leak_from_Rule_builder PASSED
tests/test_routing.py::test_build_url_with_arg_self PASSED
tests/test_routing.py::test_build_url_with_arg_keyword PASSED
tests/test_routing.py::test_build_url_same_endpoint_multiple_hosts PASSED
tests/test_routing.py::test_rule_websocket_methods PASSED
tests/test_routing.py::test_path_weighting PASSED
tests/test_routing.py::test_newline_match PASSED
tests/test_routing.py::test_weighting PASSED
tests/test_routing.py::test_strict_slashes_false PASSED
tests/test_routing.py::test_invalid_rule PASSED
tests/test_routing.py::test_multiple_converters_per_part PASSED
tests/test_routing.py::test_static_regex_escape PASSED
tests/test_routing.py::test_regex PASSED
tests/test_security.py::test_default_password_method PASSED
tests/test_security.py::test_scrypt PASSED
tests/test_security.py::test_pbkdf2 PASSED
tests/test_security.py::test_salted_hashes PASSED
tests/test_security.py::test_require_salt PASSED
tests/test_security.py::test_invalid_method PASSED
tests/test_security.py::test_safe_join[b/c-a/b/c] PASSED
tests/test_security.py::test_safe_join[../b/c-None] PASSED
tests/test_security.py::test_safe_join[b\\c-a/b\\c] PASSED
tests/test_security.py::test_safe_join[//b/c-None] PASSED
tests/test_security.py::test_safe_join_os_sep PASSED
tests/test_security.py::test_safe_join_empty_trusted PASSED
tests/test_send_file.py::test_path[path0] PASSED
tests/test_send_file.py::test_path[$(@D)/tests/res/index.html] PASSED
tests/test_send_file.py::test_x_sendfile PASSED
tests/test_send_file.py::test_last_modified PASSED
tests/test_send_file.py::test_object[<lambda>0] PASSED
tests/test_send_file.py::test_object[<lambda>1] PASSED
tests/test_send_file.py::test_object_without_mimetype PASSED
tests/test_send_file.py::test_object_mimetype_from_name PASSED
tests/test_send_file.py::test_text_mode_fails[<lambda>0] PASSED
tests/test_send_file.py::test_text_mode_fails[<lambda>1] PASSED
tests/test_send_file.py::test_disposition_name[False-inline] PASSED
tests/test_send_file.py::test_disposition_name[True-attachment] PASSED
tests/test_send_file.py::test_object_attachment_requires_name PASSED
tests/test_send_file.py::test_non_ascii_name[index.html-index.html-None] PASSED
tests/test_send_file.py::test_non_ascii_name[\xd1and\xfa\uff0fping\xfcino.txt-"Nandu/pinguino.txt"-%C3%91and%C3%BA%EF%BC%8Fping%C3%BCino.txt] PASSED
tests/test_send_file.py::test_non_ascii_name[V\xf6gel.txt-Vogel.txt-V%C3%B6gel.txt] PASSED
tests/test_send_file.py::test_non_ascii_name[\u0442\u0435:/\u0441\u0442-":/"-%D1%82%D0%B5%3A%2F%D1%81%D1%82] PASSED
tests/test_send_file.py::test_non_ascii_name[(\u0442\u0435\u0441\u0442.txt-"(.txt"-%28%D1%82%D0%B5%D1%81%D1%82.txt] PASSED
tests/test_send_file.py::test_non_ascii_name[(test.txt-"(test.txt"-None] PASSED
tests/test_send_file.py::test_no_cache_conditional_default PASSED
tests/test_send_file.py::test_max_age[0-False] PASSED
tests/test_send_file.py::test_max_age[60-True] PASSED
tests/test_send_file.py::test_etag PASSED
tests/test_send_file.py::test_content_encoding[True] PASSED
tests/test_send_file.py::test_content_encoding[False] PASSED
tests/test_send_file.py::test_from_directory[$(@D)/tests/res-test.txt] PASSED
tests/test_send_file.py::test_from_directory[directory1-path1] PASSED
tests/test_send_file.py::test_from_directory_not_found[../res/test.txt] PASSED
tests/test_send_file.py::test_from_directory_not_found[nothing.txt] PASSED
tests/test_send_file.py::test_from_directory_not_found[null\x00.txt] PASSED
tests/test_send_file.py::test_root_path PASSED
tests/test_send_file.py::test_max_age_callable PASSED
tests/test_serving.py::test_watchdog_reloader_ignores_opened PASSED
tests/test_serving.py::test_watchdog_reloader_ignores_closed_no_write PASSED
tests/test_serving.py::test_windows_get_args_for_reloading PASSED
tests/test_serving.py::test_exclude_patterns[_find_stat_paths] PASSED
tests/test_serving.py::test_exclude_patterns[_find_watchdog_paths] PASSED
tests/test_serving.py::test_port_is_int PASSED
tests/test_test.py::test_cookie_forging PASSED
tests/test_test.py::test_set_cookie_app PASSED
tests/test_test.py::test_cookiejar_stores_cookie PASSED
tests/test_test.py::test_no_initial_cookie PASSED
tests/test_test.py::test_resent_cookie PASSED
tests/test_test.py::test_disable_cookies PASSED
tests/test_test.py::test_cookie_for_different_path PASSED
tests/test_test.py::test_cookie_default_path PASSED
tests/test_test.py::test_environ_builder_basics PASSED
tests/test_test.py::test_environ_builder_data PASSED
tests/test_test.py::test_environ_builder_json PASSED
tests/test_test.py::test_environ_builder_headers PASSED
tests/test_test.py::test_environ_builder_headers_content_type PASSED
tests/test_test.py::test_envrion_builder_multiple_headers PASSED
tests/test_test.py::test_environ_builder_paths PASSED
tests/test_test.py::test_environ_builder_content_type PASSED
tests/test_test.py::test_basic_auth PASSED
tests/test_test.py::test_auth_object PASSED
tests/test_test.py::test_environ_builder_stream_switch PASSED
tests/test_test.py::test_environ_builder_unicode_file_mix PASSED
tests/test_test.py::test_environ_builder_empty_file PASSED
tests/test_test.py::test_create_environ PASSED
tests/test_test.py::test_create_environ_query_string_error PASSED
tests/test_test.py::test_builder_from_environ PASSED
tests/test_test.py::test_file_closing PASSED
tests/test_test.py::test_follow_redirect PASSED
tests/test_test.py::test_follow_local_redirect PASSED
tests/test_test.py::test_follow_redirect_body[302-False] PASSED
tests/test_test.py::test_follow_redirect_body[301-False] PASSED
tests/test_test.py::test_follow_redirect_body[307-True] PASSED
tests/test_test.py::test_follow_redirect_body[308-True] PASSED
tests/test_test.py::test_follow_external_redirect PASSED
tests/test_test.py::test_follow_external_redirect_on_same_subdomain PASSED
tests/test_test.py::test_follow_redirect_loop PASSED
tests/test_test.py::test_follow_redirect_non_root_base_url PASSED
tests/test_test.py::test_follow_redirect_exhaust_intermediate PASSED
tests/test_test.py::test_redirects_are_tracked PASSED
tests/test_test.py::test_cookie_across_redirect PASSED
tests/test_test.py::test_path_info_script_name_unquoting PASSED
tests/test_test.py::test_multi_value_submit PASSED
tests/test_test.py::test_iri_support PASSED
tests/test_test.py::test_run_wsgi_apps[True-True] PASSED
tests/test_test.py::test_run_wsgi_apps[True-False] PASSED
tests/test_test.py::test_run_wsgi_apps[False-True] PASSED
tests/test_test.py::test_run_wsgi_apps[False-False] PASSED
tests/test_test.py::test_lazy_start_response_empty_response_app[True-True] PASSED
tests/test_test.py::test_lazy_start_response_empty_response_app[True-False] PASSED
tests/test_test.py::test_lazy_start_response_empty_response_app[False-True] PASSED
tests/test_test.py::test_lazy_start_response_empty_response_app[False-False] PASSED
tests/test_test.py::test_run_wsgi_app_closing_iterator PASSED
tests/test_test.py::test_multiple_cookies PASSED
tests/test_test.py::test_correct_open_invocation_on_redirect PASSED
tests/test_test.py::test_correct_encoding PASSED
tests/test_test.py::test_full_url_requests_with_args PASSED
tests/test_test.py::test_delete_requests_with_form PASSED
tests/test_test.py::test_post_with_file_descriptor PASSED
tests/test_test.py::test_content_type PASSED
tests/test_test.py::test_raw_request_uri PASSED
tests/test_test.py::test_no_content_type_header_addition PASSED
tests/test_test.py::test_client_response_wrapper PASSED
tests/test_urls.py::test_iri_support PASSED
tests/test_urls.py::test_iri_safe_quoting PASSED
tests/test_urls.py::test_quoting_of_local_urls PASSED
tests/test_urls.py::test_iri_to_uri_idempotence_ascii_only PASSED
tests/test_urls.py::test_iri_to_uri_idempotence_non_ascii PASSED
tests/test_urls.py::test_uri_to_iri_idempotence_ascii_only PASSED
tests/test_urls.py::test_uri_to_iri_idempotence_non_ascii PASSED
tests/test_urls.py::test_iri_to_uri_to_iri PASSED
tests/test_urls.py::test_uri_to_iri_to_uri PASSED
tests/test_urls.py::test_uri_iri_normalization[http://f\xf6\xf1.com/\u2610/fred?utf8=\u2713] PASSED
tests/test_urls.py::test_uri_iri_normalization[http://xn--f-rgao.com/\u2610/fred?utf8=\u2713] PASSED
tests/test_urls.py::test_uri_iri_normalization[http://xn--f-rgao.com/%E2%98%90/fred?utf8=%E2%9C%93_0] PASSED
tests/test_urls.py::test_uri_iri_normalization[http://xn--f-rgao.com/%E2%98%90/fred?utf8=%E2%9C%93_1] PASSED
tests/test_urls.py::test_uri_iri_normalization[http://f\xf6\xf1.com/\u2610/fred?utf8=%E2%9C%93] PASSED
tests/test_urls.py::test_uri_to_iri_dont_unquote_space PASSED
tests/test_urls.py::test_iri_to_uri_dont_quote_valid_code_points PASSED
tests/test_urls.py::test_itms_services PASSED
tests/test_utils.py::test_redirect[http://example.com-None-http://example.com] PASSED
tests/test_utils.py::test_redirect[/f\xfc\xfcb\xe4r-305-/f%C3%BC%C3%BCb%C3%A4r] PASSED
tests/test_utils.py::test_redirect[http://\u2603.example.com/-307-http://xn--n3h.example.com/] PASSED
tests/test_utils.py::test_redirect[itms-services://?url=abc-None-itms-services://?url=abc] PASSED
tests/test_utils.py::test_redirect_xss PASSED
tests/test_utils.py::test_redirect_with_custom_response_class PASSED
tests/test_utils.py::test_cached_property PASSED
tests/test_utils.py::test_can_set_cached_property PASSED
tests/test_utils.py::test_invalidate_cached_property PASSED
tests/test_utils.py::test_inspect_treats_cached_property_as_property PASSED
tests/test_utils.py::test_environ_property PASSED
tests/test_utils.py::test_import_string PASSED
tests/test_utils.py::test_import_string_provides_traceback PASSED
tests/test_utils.py::test_import_string_attribute_error PASSED
tests/test_utils.py::test_find_modules PASSED
tests/test_utils.py::test_header_set_duplication_bug PASSED
tests/test_utils.py::test_append_slash_redirect[False-foo-http://example.org/app-http://example.org/app/foo/] PASSED
tests/test_utils.py::test_append_slash_redirect[False-/foo-http://example.org/app-http://example.org/app/foo/] PASSED
tests/test_utils.py::test_append_slash_redirect[False-/foo/bar-http://example.org/-http://example.org/foo/bar/] PASSED
tests/test_utils.py::test_append_slash_redirect[False-/foo/bar-http://example.org/app-http://example.org/app/foo/bar/] PASSED
tests/test_utils.py::test_append_slash_redirect[False-/foo?baz-http://example.org/-http://example.org/foo/?baz] PASSED
tests/test_utils.py::test_append_slash_redirect[False-/foo/-http://example.org/-http://example.org/foo/] PASSED
tests/test_utils.py::test_append_slash_redirect[False-/foo/-http://example.org/app-http://example.org/app/foo/] PASSED
tests/test_utils.py::test_append_slash_redirect[False-/-http://example.org/-http://example.org/] PASSED
tests/test_utils.py::test_append_slash_redirect[False-/-http://example.org/app-http://example.org/app/] PASSED
tests/test_utils.py::test_append_slash_redirect[True-foo-http://example.org/app-http://example.org/app/foo/] PASSED
tests/test_utils.py::test_append_slash_redirect[True-/foo-http://example.org/app-http://example.org/app/foo/] PASSED
tests/test_utils.py::test_append_slash_redirect[True-/foo/bar-http://example.org/-http://example.org/foo/bar/] PASSED
tests/test_utils.py::test_append_slash_redirect[True-/foo/bar-http://example.org/app-http://example.org/app/foo/bar/] PASSED
tests/test_utils.py::test_append_slash_redirect[True-/foo?baz-http://example.org/-http://example.org/foo/?baz] PASSED
tests/test_utils.py::test_append_slash_redirect[True-/foo/-http://example.org/-http://example.org/foo/] PASSED
tests/test_utils.py::test_append_slash_redirect[True-/foo/-http://example.org/app-http://example.org/app/foo/] PASSED
tests/test_utils.py::test_append_slash_redirect[True-/-http://example.org/-http://example.org/] PASSED
tests/test_utils.py::test_append_slash_redirect[True-/-http://example.org/app-http://example.org/app/] PASSED
tests/test_utils.py::test_cached_property_doc PASSED
tests/test_utils.py::test_secure_filename PASSED
tests/test_wrappers.py::test_base_request PASSED
tests/test_wrappers.py::test_query_string_is_bytes PASSED
tests/test_wrappers.py::test_request_repr PASSED
tests/test_wrappers.py::test_access_route PASSED
tests/test_wrappers.py::test_url_request_descriptors PASSED
tests/test_wrappers.py::test_url_request_descriptors_query_quoting PASSED
tests/test_wrappers.py::test_url_request_descriptors_hosts PASSED
tests/test_wrappers.py::test_authorization PASSED
tests/test_wrappers.py::test_authorization_with_unicode PASSED
tests/test_wrappers.py::test_request_application PASSED
tests/test_wrappers.py::test_request_access_control PASSED
tests/test_wrappers.py::test_response_access_control PASSED
tests/test_wrappers.py::test_base_response PASSED
tests/test_wrappers.py::test_response_set_status_code[200-200 OK] PASSED
tests/test_wrappers.py::test_response_set_status_code[404-404 NOT FOUND] PASSED
tests/test_wrappers.py::test_response_set_status_code[588-588 UNKNOWN] PASSED
tests/test_wrappers.py::test_response_set_status_code[999-999 UNKNOWN] PASSED
tests/test_wrappers.py::test_response_set_status[404-404-404 NOT FOUND] PASSED
tests/test_wrappers.py::test_response_set_status[588-588-588 UNKNOWN] PASSED
tests/test_wrappers.py::test_response_set_status[999-999-999 UNKNOWN] PASSED
tests/test_wrappers.py::test_response_set_status[200 OK-200-200 OK] PASSED
tests/test_wrappers.py::test_response_set_status[999 WTF-999-999 WTF] PASSED
tests/test_wrappers.py::test_response_set_status[wtf-0-0 wtf] PASSED
tests/test_wrappers.py::test_response_set_status[200 TEA POT-200-200 TEA POT] PASSED
tests/test_wrappers.py::test_response_set_status[200-200-200 OK] PASSED
tests/test_wrappers.py::test_response_set_status[400-400-400 BAD REQUEST] PASSED
tests/test_wrappers.py::test_response_init_status_empty_string PASSED
tests/test_wrappers.py::test_type_forcing PASSED
tests/test_wrappers.py::test_accept PASSED
tests/test_wrappers.py::test_etag_request PASSED
tests/test_wrappers.py::test_user_agent PASSED
tests/test_wrappers.py::test_stream_wrapping PASSED
tests/test_wrappers.py::test_data_descriptor_triggers_parsing PASSED
tests/test_wrappers.py::test_get_data_method_parsing_caching_behavior PASSED
tests/test_wrappers.py::test_etag_response PASSED
tests/test_wrappers.py::test_etag_response_412 PASSED
tests/test_wrappers.py::test_range_request_basic PASSED
tests/test_wrappers.py::test_range_request_out_of_bound PASSED
tests/test_wrappers.py::test_range_request_with_file PASSED
tests/test_wrappers.py::test_range_request_with_complete_file PASSED
tests/test_wrappers.py::test_range_request_without_complete_length[None] PASSED
tests/test_wrappers.py::test_range_request_without_complete_length[0] PASSED
tests/test_wrappers.py::test_invalid_range_request PASSED
tests/test_wrappers.py::test_etag_response_freezing PASSED
tests/test_wrappers.py::test_authenticate PASSED
tests/test_wrappers.py::test_authenticate_quoted_qop PASSED
tests/test_wrappers.py::test_response_stream PASSED
tests/test_wrappers.py::test_common_response_descriptors PASSED
tests/test_wrappers.py::test_common_request_descriptors PASSED
tests/test_wrappers.py::test_request_mimetype_always_lowercase PASSED
tests/test_wrappers.py::test_shallow_mode PASSED
tests/test_wrappers.py::test_form_parsing_failed PASSED
tests/test_wrappers.py::test_file_closing PASSED
tests/test_wrappers.py::test_file_closing_with PASSED
tests/test_wrappers.py::test_response_streamed PASSED
tests/test_wrappers.py::test_response_iter_wrapping PASSED
tests/test_wrappers.py::test_response_freeze PASSED
tests/test_wrappers.py::test_response_content_length_uses_encode PASSED
tests/test_wrappers.py::test_other_method_payload PASSED
tests/test_wrappers.py::test_urlfication PASSED
tests/test_wrappers.py::test_new_response_iterator_behavior PASSED
tests/test_wrappers.py::test_form_data_ordering PASSED
tests/test_wrappers.py::test_values PASSED
tests/test_wrappers.py::test_storage_classes PASSED
tests/test_wrappers.py::test_response_headers_passthrough PASSED
tests/test_wrappers.py::test_response_304_no_content_length PASSED
tests/test_wrappers.py::test_ranges PASSED
tests/test_wrappers.py::test_csp PASSED
tests/test_wrappers.py::test_auto_content_length PASSED
tests/test_wrappers.py::test_stream_content_length PASSED
tests/test_wrappers.py::test_disabled_auto_content_length PASSED
tests/test_wrappers.py::test_location_header_autocorrect[False-/test-/test] PASSED
tests/test_wrappers.py::test_location_header_autocorrect[False-/\\\\test.example?q-/%5C%5Ctest.example?q] PASSED
tests/test_wrappers.py::test_location_header_autocorrect[True-/test-http://localhost/test] PASSED
tests/test_wrappers.py::test_location_header_autocorrect[True-test-http://localhost/a/b/test] PASSED
tests/test_wrappers.py::test_location_header_autocorrect[True-./test-http://localhost/a/b/test] PASSED
tests/test_wrappers.py::test_location_header_autocorrect[True-../test-http://localhost/a/test] PASSED
tests/test_wrappers.py::test_204_and_1XX_response_has_no_content_length PASSED
tests/test_wrappers.py::test_malformed_204_response_has_no_content_length PASSED
tests/test_wrappers.py::test_request_method_case_sensitivity PASSED
tests/test_wrappers.py::test_write_length PASSED
tests/test_wrappers.py::test_stream_zip PASSED
tests/test_wrappers.py::TestSetCookie::test_secure PASSED
tests/test_wrappers.py::TestSetCookie::test_httponly PASSED
tests/test_wrappers.py::TestSetCookie::test_secure_and_httponly PASSED
tests/test_wrappers.py::TestSetCookie::test_samesite PASSED
tests/test_wrappers.py::TestJSON::test_request PASSED
tests/test_wrappers.py::TestJSON::test_response PASSED
tests/test_wrappers.py::TestJSON::test_bad_content_type PASSED
tests/test_wrappers.py::TestJSON::test_bad_data PASSED
tests/test_wrappers.py::TestJSON::test_cache_disabled PASSED
tests/test_wrappers.py::test_response_coop PASSED
tests/test_wrappers.py::test_response_coep PASSED
tests/test_wsgi.py::test_get_host[host] PASSED
tests/test_wsgi.py::test_get_host[host, strip http port] PASSED
tests/test_wsgi.py::test_get_host[host, strip https port] PASSED
tests/test_wsgi.py::test_get_host[host, custom port] PASSED
tests/test_wsgi.py::test_get_host[prefer host] PASSED
tests/test_wsgi.py::test_get_host[name, ignore http port] PASSED
tests/test_wsgi.py::test_get_host[name, ignore https port] PASSED
tests/test_wsgi.py::test_get_host[name, custom port] PASSED
tests/test_wsgi.py::test_get_host[ignore x-forwarded-host] PASSED
tests/test_wsgi.py::test_get_host_validate_trusted_hosts PASSED
tests/test_wsgi.py::test_responder PASSED
tests/test_wsgi.py::test_path_info_and_script_name_fetching PASSED
tests/test_wsgi.py::test_limited_stream PASSED
tests/test_wsgi.py::test_limited_stream_json_load PASSED
tests/test_wsgi.py::test_limited_stream_disconnection PASSED
tests/test_wsgi.py::test_limited_stream_read_with_raw_io PASSED
tests/test_wsgi.py::test_get_host_fallback PASSED
tests/test_wsgi.py::test_get_current_url_unicode PASSED
tests/test_wsgi.py::test_get_current_url_invalid_utf8 PASSED
tests/test_wsgi.py::test_range_wrapper PASSED
tests/test_wsgi.py::test_closing_iterator PASSED

======== 923 passed, 25 deselected ========
  py$(PYV): OK
  congratulations :)