pocketpy/tests/043_str_splitlines.py
Rob McMullen a5f9c21b0f Added str.splitlines
* uses same algorithm as CPython, supports all CPython eol characters
  in https://docs.python.org/3/library/stdtypes.html#str.splitlines
2026-06-27 12:57:50 -07:00

60 lines
2.5 KiB
Python

try:
''.splitlines(5)
exit(1)
except TypeError:
pass
try:
''.splitlines(5, 5)
exit(1)
except TypeError:
pass
assert ''.splitlines() == []
assert ''.splitlines(False) == []
assert ''.splitlines(True) == []
assert '\n'.splitlines() == ['']
assert '\r'.splitlines() == ['']
assert '\r\n'.splitlines() == ['']
assert '\v'.splitlines() == ['']
assert '\f'.splitlines() == ['']
assert '\x1c'.splitlines() == ['']
assert '\x1d'.splitlines() == ['']
assert '\x1e'.splitlines() == ['']
assert b'\xe2\x80\xa8'.decode().splitlines() == ['']
assert b'\xe2\x80\xa9'.decode().splitlines() == ['']
assert '🥕'.splitlines() == ['🥕']
all_ends = ['\n', '\r', '\r\n', '\v', '\f', '\x1c', '\x1d', '\x1e', b'\xe2\x80\xa8'.decode(), b'\xe2\x80\xa9'.decode()]
for eol in all_ends:
assert (eol).splitlines() == ['']
assert (eol).splitlines(False) == ['']
assert (eol).splitlines(True) == [eol]
for text in ['a', 'a b', 'abc\tdef', '🥕 and 🍋', '测试123测试']:
assert (text).splitlines(False) == [text]
assert (text).splitlines(True) == [text]
assert (text + eol).splitlines(False) == [text]
assert (text + eol).splitlines(True) == [text + eol]
assert (eol + eol).splitlines(False) == ['', '']
assert (eol + eol).splitlines(True) == [eol, eol]
assert (eol + text).splitlines(False) == ['', text]
assert (eol + text).splitlines(True) == [eol, text]
assert (text + eol + eol + eol + eol).splitlines(False) == [text, '', '', '']
assert (text + eol + eol + eol + eol).splitlines(True) == [text + eol, eol, eol, eol]
assert (eol + eol + text + eol + eol + eol + eol).splitlines(False) == ['', '', text, '', '', '']
assert (eol + eol + text + eol + eol + eol + eol).splitlines(True) == [eol, eol, text + eol, eol, eol, eol]
assert (text + eol + text).splitlines(False) == [text, text]
assert (text + eol + text).splitlines(True) == [text + eol, text]
assert (text + eol + text + eol).splitlines(False) == [text, text]
assert (text + eol + text + eol).splitlines(True) == [text + eol, text + eol]
assert '\r\r\n'.splitlines() == ['', '']
assert '\r\r\n'.splitlines(True) == ['\r', '\r\n']
assert '\n\r\r\n'.splitlines() == ['', '', '']
assert '\n\r\r\n'.splitlines(True) == ['\n', '\r', '\r\n']
assert '\n\r\r\n\n'.splitlines() == ['', '', '', '']
assert '\n\r\r\n\n'.splitlines(True) == ['\n', '\r', '\r\n', '\n']
assert ''.join(all_ends).splitlines() == [''] * len(all_ends)
assert ''.join(all_ends).splitlines(True) == all_ends