Skip to content

Commit 967952d

Browse files
committed
Fix str.splitlines() for \r
1 parent 199c75b commit 967952d

File tree

2 files changed

+6
-4
lines changed

2 files changed

+6
-4
lines changed

Lib/test/string_tests.py

-2
Original file line numberDiff line numberDiff line change
@@ -950,8 +950,6 @@ def test_title(self):
950950
self.checkequal('Getint', "getInt", 'title')
951951
self.checkraises(TypeError, 'hello', 'title', 42)
952952

953-
# TODO: RUSTPYTHON
954-
@unittest.expectedFailure
955953
def test_splitlines(self):
956954
self.checkequal(['abc', 'def', '', 'ghi'], "abc\ndef\n\rghi", 'splitlines')
957955
self.checkequal(['abc', 'def', '', 'ghi'], "abc\ndef\n\r\nghi", 'splitlines')

vm/src/obj/objstr.rs

+6-2
Original file line numberDiff line numberDiff line change
@@ -797,11 +797,15 @@ impl PyString {
797797
let keepends = args.keepends.unwrap_or(false);
798798
let mut elements = vec![];
799799
let mut curr = "".to_owned();
800-
for ch in self.value.chars() {
801-
if ch == '\n' {
800+
let mut chars = self.value.chars().peekable();
801+
while let Some(ch) = chars.next() {
802+
if ch == '\n' || ch == '\r' {
802803
if keepends {
803804
curr.push(ch);
804805
}
806+
if ch == '\r' && chars.peek() == Some(&'\n') {
807+
continue;
808+
}
805809
elements.push(vm.ctx.new_str(curr.clone()));
806810
curr.clear();
807811
} else {

0 commit comments

Comments
 (0)