@@ -1164,6 +1164,34 @@ public void testIterator() throws Exception {
11641164 }
11651165 }
11661166
1167+ @ ParameterizedTest
1168+ @ ValueSource (longs = { -1 , 0 , 1 , 2 , 3 , 4 , 5 , Long .MAX_VALUE })
1169+ public void testIteratorMaxRows (final long maxRows ) throws Exception {
1170+ final Reader in = new StringReader ("a,b,c\n 1,2,3\n x,y,z" );
1171+ try (CSVParser parser = CSVFormat .DEFAULT .builder ().setMaxRows (maxRows ).get ().parse (in )) {
1172+ final Iterator <CSVRecord > iterator = parser .iterator ();
1173+ assertTrue (iterator .hasNext ());
1174+ assertThrows (UnsupportedOperationException .class , iterator ::remove );
1175+ assertArrayEquals (new String [] { "a" , "b" , "c" }, iterator .next ().values ());
1176+ final boolean noLimit = maxRows <= 0 ;
1177+ final int fixtureLen = 3 ;
1178+ final long expectedLen = noLimit ? fixtureLen : Math .min (fixtureLen , maxRows );
1179+ if (expectedLen > 1 ) {
1180+ assertTrue (iterator .hasNext ());
1181+ assertArrayEquals (new String [] { "1" , "2" , "3" }, iterator .next ().values ());
1182+ }
1183+ assertEquals (expectedLen > 2 , iterator .hasNext ());
1184+ // again
1185+ assertEquals (expectedLen > 2 , iterator .hasNext ());
1186+ if (expectedLen == fixtureLen ) {
1187+ assertTrue (iterator .hasNext ());
1188+ assertArrayEquals (new String [] { "x" , "y" , "z" }, iterator .next ().values ());
1189+ }
1190+ assertFalse (iterator .hasNext ());
1191+ assertThrows (NoSuchElementException .class , iterator ::next );
1192+ }
1193+ }
1194+
11671195 @ Test
11681196 public void testIteratorSequenceBreaking () throws IOException {
11691197 final String fiveRows = "1\n 2\n 3\n 4\n 5\n " ;
0 commit comments