New issue 3012: io.IncrementalNewlineDecoder.newlines behaves differently than 
CPython's
https://bitbucket.org/pypy/pypy/issues/3012/ioincrementalnewlinedecodernewlines

Joshua Oreman:

When io.IncrementalNewlineDecoder in translate mode is fed input one character 
at a time, it does correctly translate “\\r\\n” sequences to “\\n”, but does 
not record “\\r\\n” in its newlines attribute \(which I understand is intended 
to represent the newline sequences that were encountered in the input\). 
Reproducer:

```
import io
import codecs

info = codecs.lookup("utf-8")
inner_decoder = info.incrementaldecoder("strict")
outer_decoder = io.IncrementalNewlineDecoder(inner_decoder, True)
msg = b"The quick brown fox jumps over the lazy dog.\r\n\n\r\r\n\n"
decoded = ""
for ch in msg:
    decoded += outer_decoder.decode(bytes([ch]))
decoded += outer_decoder.decode(b"", final=True)
assert decoded == "The quick brown fox jumps over the lazy dog.\n\n\n\n\n"
assert set(outer_decoder.newlines) == {"\r", "\n", "\r\n"}
```

This passes on CPython but fails on PyPy-3.6 v7.1.1: on the last line, 
outer\_decoder.newlines contains “\\r” and “\\n” but not “\\r\\n”.

There is no issue in non-translating mode; the newlines property does wind up 
containing all three sequences in that case.


_______________________________________________
pypy-issue mailing list
pypy-issue@python.org
https://mail.python.org/mailman/listinfo/pypy-issue

Reply via email to