From 712fe6c112bb4c444975438508b12c0ce91f6d9d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=93=D0=B0=D0=B4=D0=B6=D0=B8=D0=BA=D1=83=D1=80=D0=B1?= =?UTF-8?q?=D0=B0=D0=BD=D0=BE=D0=B2=20=D0=A2=D0=B5=D0=BC=D0=B8=D1=80=D0=BB?= =?UTF-8?q?=D0=B0=D0=BD?= Date: Tue, 1 Sep 2026 17:11:08 +0300 Subject: [PATCH] fix: fixed errors and tests --- .../java/ru/project/io/StudentCsvReader.java | 4 +- .../ru/project/io/StudentCsvReaderTest.java | 62 ++++++++++--------- 2 files changed, 34 insertions(+), 32 deletions(-) diff --git a/app/src/main/java/ru/project/io/StudentCsvReader.java b/app/src/main/java/ru/project/io/StudentCsvReader.java index 8dc2bb5..5974c04 100644 --- a/app/src/main/java/ru/project/io/StudentCsvReader.java +++ b/app/src/main/java/ru/project/io/StudentCsvReader.java @@ -14,7 +14,7 @@ import org.apache.commons.csv.CSVParser; import org.apache.commons.csv.CSVRecord; import ru.project.student.Student; import ru.project.student.StudentBuilder; - public class StudentCsvReader implements Iterator { + public class StudentCsvReader implements Iterator, AutoCloseable { private static final String GROUP_NUMBER = "groupNumber"; private static final String AVERAGE_GRADE = "averageGrade"; private static final String RECORD_BOOK_NUMBER = "recordBookNumber"; @@ -29,7 +29,7 @@ import ru.project.student.StudentBuilder; CSVFormat format = CSVFormat.DEFAULT.builder() .setHeader() .setSkipHeaderRecord(true) - .build(); + .get(); this.parser = CSVParser.parse(path, StandardCharsets.UTF_8, format); validateHeader(parser.getHeaderMap()); this.records = parser.iterator(); diff --git a/app/src/test/java/ru/project/io/StudentCsvReaderTest.java b/app/src/test/java/ru/project/io/StudentCsvReaderTest.java index ed1bb02..3541f35 100644 --- a/app/src/test/java/ru/project/io/StudentCsvReaderTest.java +++ b/app/src/test/java/ru/project/io/StudentCsvReaderTest.java @@ -1,22 +1,17 @@ package ru.project.io; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotEquals; -import static org.junit.jupiter.api.Assertions.assertThrows; -import static org.junit.jupiter.api.Assertions.assertTrue; -import java.io.UncheckedIOException; +import java.io.IOException; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.util.NoSuchElementException; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.BeforeEach; +import java.util.Spliterators; +import java.util.stream.StreamSupport; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; import ru.project.student.Student; -import ru.project.collection.MyLinkedList; import ru.project.collection.MyList; import ru.project.collectors.MyCollectors; -import ru.project.collectors.MyListCollector; +import static org.junit.jupiter.api.Assertions.*; class StudentCsvReaderTest { @TempDir Path tempDir; @@ -25,8 +20,8 @@ class StudentCsvReaderTest { Path csv = tempDir.resolve("students.csv"); String content = String.join("\n", "groupNumber,averageGrade,recordBookNumber", - "M10,4.5,12345", // валидно: 1 буква + 2 цифры - "B05,3.8,12346" // валидно + "M10,4.5,12345", + "B05,3.8,12346" ); Files.writeString(csv, content, StandardCharsets.UTF_8); try (var reader = new StudentCsvReader(csv.toAbsolutePath())) { @@ -67,14 +62,15 @@ class StudentCsvReaderTest { M101,4.5 """; Files.writeString(csv, content, StandardCharsets.UTF_8); - var reader = new StudentCsvReader(csv.toAbsolutePath()); - assertTrue(reader.hasNext()); - // следующая строка имеет только 2 колонки - IllegalArgumentException ex = assertThrows( - IllegalArgumentException.class, - reader::next - ); - assertTrue(ex.getMessage().contains("Expected 3 columns")); + try (var reader = new StudentCsvReader(csv.toAbsolutePath())) { + assertTrue(reader.hasNext()); + + IllegalArgumentException ex = assertThrows( + IllegalArgumentException.class, + reader::next + ); + assertTrue(ex.getMessage().contains("Expected 3 columns")); + } } @Test void shouldTestparseErrorThrowsExceptionWithDetails() throws IOException { @@ -84,14 +80,15 @@ class StudentCsvReaderTest { M101,not-a-number,12345 """; Files.writeString(csv, content, StandardCharsets.UTF_8); + try (var reader = new StudentCsvReader(csv.toAbsolutePath())) { + assertTrue(reader.hasNext()); - var reader = new StudentCsvReader(csv.toAbsolutePath()); - assertTrue(reader.hasNext()); - IllegalArgumentException ex = assertThrows( - IllegalArgumentException.class, - reader::next - ); - assertTrue(ex.getMessage().contains("cannot parse averageGrade")); + IllegalArgumentException ex = assertThrows( + IllegalArgumentException.class, + reader::next + ); + assertTrue(ex.getMessage().contains("cannot parse averageGrade")); + } } @Test void shouldTestemptyDataAfterHeaderThrowsNoSuchElement() throws IOException { @@ -100,17 +97,22 @@ class StudentCsvReaderTest { groupNumber,averageGrade,recordBookNumber """; Files.writeString(csv, content, StandardCharsets.UTF_8); - var reader = new StudentCsvReader(csv.toAbsolutePath()); - assertFalse(reader.hasNext()); - assertThrows(NoSuchElementException.class, reader::next); + + // ИСПРАВЛЕНО: добавлен try-with-resources + try (var reader = new StudentCsvReader(csv.toAbsolutePath())) { + assertFalse(reader.hasNext()); + + assertThrows(NoSuchElementException.class, reader::next); + } } @Test void shouldTestrelativePathThrowsException() { Path relative = Path.of("relative-path.csv"); + IllegalArgumentException ex = assertThrows( IllegalArgumentException.class, () -> new StudentCsvReader(relative) ); assertTrue(ex.getMessage().contains("absolute")); } -} + } \ No newline at end of file