@@ -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\n 1,2,3\n 4,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]
6685fn 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\n 1,2,3\n 4,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\n 1,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]
118173fn 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\n 1,2,3\n 4,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