()
| 950 | |
| 951 | |
| 952 | def test_new_response_iterator_behavior(): |
| 953 | req = wrappers.Request.from_values() |
| 954 | resp = wrappers.Response("Hello Wörld!") |
| 955 | |
| 956 | def get_content_length(resp): |
| 957 | headers = resp.get_wsgi_headers(req.environ) |
| 958 | return headers.get("content-length", type=int) |
| 959 | |
| 960 | def generate_items(): |
| 961 | yield "Hello " |
| 962 | yield "Wörld!" |
| 963 | |
| 964 | # werkzeug encodes when set to `data` now, which happens |
| 965 | # if a string is passed to the response object. |
| 966 | assert resp.response == ["Hello Wörld!".encode()] |
| 967 | assert resp.get_data() == "Hello Wörld!".encode() |
| 968 | assert get_content_length(resp) == 13 |
| 969 | assert not resp.is_streamed |
| 970 | assert resp.is_sequence |
| 971 | |
| 972 | # try the same for manual assignment |
| 973 | resp.set_data("Wörd") |
| 974 | assert resp.response == ["Wörd".encode()] |
| 975 | assert resp.get_data() == "Wörd".encode() |
| 976 | assert get_content_length(resp) == 5 |
| 977 | assert not resp.is_streamed |
| 978 | assert resp.is_sequence |
| 979 | |
| 980 | # automatic generator sequence conversion |
| 981 | resp.response = generate_items() |
| 982 | assert resp.is_streamed |
| 983 | assert not resp.is_sequence |
| 984 | assert resp.get_data() == "Hello Wörld!".encode() |
| 985 | assert resp.response == [b"Hello ", "Wörld!".encode()] |
| 986 | assert not resp.is_streamed |
| 987 | assert resp.is_sequence |
| 988 | |
| 989 | # automatic generator sequence conversion |
| 990 | resp.response = generate_items() |
| 991 | resp.implicit_sequence_conversion = False |
| 992 | assert resp.is_streamed |
| 993 | assert not resp.is_sequence |
| 994 | pytest.raises(RuntimeError, lambda: resp.get_data()) |
| 995 | resp.make_sequence() |
| 996 | assert resp.get_data() == "Hello Wörld!".encode() |
| 997 | assert resp.response == [b"Hello ", "Wörld!".encode()] |
| 998 | assert not resp.is_streamed |
| 999 | assert resp.is_sequence |
| 1000 | |
| 1001 | # stream makes it a list no matter how the conversion is set |
| 1002 | for val in True, False: |
| 1003 | resp.implicit_sequence_conversion = val |
| 1004 | resp.response = ("foo", "bar") |
| 1005 | assert resp.is_sequence |
| 1006 | resp.stream.write("baz") |
| 1007 | assert resp.response == ["foo", "bar", "baz"] |
| 1008 | |
| 1009 |
nothing calls this directly
no test coverage detected