Skip to content

Commit 40ea13e

Browse files
committed
lazycsv: Add missing tests for corner cases
1 parent 6f51b28 commit 40ea13e

File tree

1 file changed

+81
-0
lines changed

1 file changed

+81
-0
lines changed

crates/lazycsv/tests/main.rs

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,25 @@ fn basic() {
6161
assert_csv!(csv, EOF);
6262
}
6363

64+
#[cfg(feature = "alloc")]
65+
#[test]
66+
fn no_trailing_newline() {
67+
let mut csv = Csv::new(b"a,b,c\n1,2,3\n4,5,6");
68+
69+
assert_csv!(csv, Cell(b"a"));
70+
assert_csv!(csv, Cell(b"b"));
71+
assert_csv!(csv, Cell(b"c"));
72+
assert_csv!(csv, LineEnd);
73+
assert_csv!(csv, Cell(b"1"));
74+
assert_csv!(csv, Cell(b"2"));
75+
assert_csv!(csv, Cell(b"3"));
76+
assert_csv!(csv, LineEnd);
77+
assert_csv!(csv, Cell(b"4"));
78+
assert_csv!(csv, Cell(b"5"));
79+
assert_csv!(csv, Cell(b"6"));
80+
assert_csv!(csv, EOF);
81+
}
82+
6483
#[cfg(feature = "alloc")]
6584
#[test]
6685
fn dequote() {
@@ -113,6 +132,42 @@ fn into_rows() {
113132
assert!(iter.next().is_none());
114133
}
115134

135+
#[cfg(feature = "alloc")]
136+
#[test]
137+
fn into_rows_no_trailing_newline() {
138+
let mut iter = Csv::new(b"a,b,c\n1,2,3\n4,5,6").into_rows();
139+
140+
let [a, b, c] = iter.next().unwrap().unwrap();
141+
assert_eq_cell!(a, b"a");
142+
assert_eq_cell!(b, b"b");
143+
assert_eq_cell!(c, b"c");
144+
145+
let [a, b, c] = iter.next().unwrap().unwrap();
146+
assert_eq_cell!(a, b"1");
147+
assert_eq_cell!(b, b"2");
148+
assert_eq_cell!(c, b"3");
149+
150+
let [a, b, c] = iter.next().unwrap().unwrap();
151+
assert_eq_cell!(a, b"4");
152+
assert_eq_cell!(b, b"5");
153+
assert_eq_cell!(c, b"6");
154+
155+
assert!(iter.next().is_none());
156+
}
157+
158+
#[cfg(feature = "alloc")]
159+
#[test]
160+
fn into_rows_malformed() {
161+
let mut iter = Csv::new(b"a,b,c\n1,2").into_rows();
162+
163+
let [a, b, c] = iter.next().unwrap().unwrap();
164+
assert_eq_cell!(a, b"a");
165+
assert_eq_cell!(b, b"b");
166+
assert_eq_cell!(c, b"c");
167+
168+
assert!(iter.next().unwrap().is_err());
169+
}
170+
116171
#[cfg(feature = "alloc")]
117172
#[test]
118173
fn into_rows_with_range() {
@@ -138,3 +193,29 @@ fn into_rows_with_range() {
138193

139194
assert!(iter.next().is_none());
140195
}
196+
197+
#[cfg(feature = "alloc")]
198+
#[test]
199+
fn into_rows_with_range_no_trailing_newline() {
200+
let mut iter = Csv::new(b"a,b,c\n1,2,3\n4,5,6").into_rows_with_range();
201+
202+
let ([a, b, c], range) = iter.next().unwrap().unwrap();
203+
assert_eq_cell!(a, b"a");
204+
assert_eq_cell!(b, b"b");
205+
assert_eq_cell!(c, b"c");
206+
assert_eq!(range, 0..6); // "a,b,c\n"
207+
208+
let ([a, b, c], range) = iter.next().unwrap().unwrap();
209+
assert_eq_cell!(a, b"1");
210+
assert_eq_cell!(b, b"2");
211+
assert_eq_cell!(c, b"3");
212+
assert_eq!(range, 6..12); // "1,2,3\n"
213+
214+
let ([a, b, c], range) = iter.next().unwrap().unwrap();
215+
assert_eq_cell!(a, b"4");
216+
assert_eq_cell!(b, b"5");
217+
assert_eq_cell!(c, b"6");
218+
assert_eq!(range, 12..17); // "4,5,6"
219+
220+
assert!(iter.next().is_none());
221+
}

0 commit comments

Comments
 (0)