fix: fixed errors and tests
This commit is contained in:
@@ -14,7 +14,7 @@ import org.apache.commons.csv.CSVParser;
|
|||||||
import org.apache.commons.csv.CSVRecord;
|
import org.apache.commons.csv.CSVRecord;
|
||||||
import ru.project.student.Student;
|
import ru.project.student.Student;
|
||||||
import ru.project.student.StudentBuilder;
|
import ru.project.student.StudentBuilder;
|
||||||
public class StudentCsvReader implements Iterator<Student> {
|
public class StudentCsvReader implements Iterator<Student>, AutoCloseable {
|
||||||
private static final String GROUP_NUMBER = "groupNumber";
|
private static final String GROUP_NUMBER = "groupNumber";
|
||||||
private static final String AVERAGE_GRADE = "averageGrade";
|
private static final String AVERAGE_GRADE = "averageGrade";
|
||||||
private static final String RECORD_BOOK_NUMBER = "recordBookNumber";
|
private static final String RECORD_BOOK_NUMBER = "recordBookNumber";
|
||||||
@@ -29,7 +29,7 @@ import ru.project.student.StudentBuilder;
|
|||||||
CSVFormat format = CSVFormat.DEFAULT.builder()
|
CSVFormat format = CSVFormat.DEFAULT.builder()
|
||||||
.setHeader()
|
.setHeader()
|
||||||
.setSkipHeaderRecord(true)
|
.setSkipHeaderRecord(true)
|
||||||
.build();
|
.get();
|
||||||
this.parser = CSVParser.parse(path, StandardCharsets.UTF_8, format);
|
this.parser = CSVParser.parse(path, StandardCharsets.UTF_8, format);
|
||||||
validateHeader(parser.getHeaderMap());
|
validateHeader(parser.getHeaderMap());
|
||||||
this.records = parser.iterator();
|
this.records = parser.iterator();
|
||||||
|
|||||||
@@ -1,22 +1,17 @@
|
|||||||
package ru.project.io;
|
package ru.project.io;
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import java.io.IOException;
|
||||||
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.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.util.NoSuchElementException;
|
import java.util.NoSuchElementException;
|
||||||
import org.junit.jupiter.api.BeforeAll;
|
import java.util.Spliterators;
|
||||||
import org.junit.jupiter.api.BeforeEach;
|
import java.util.stream.StreamSupport;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import org.junit.jupiter.api.io.TempDir;
|
import org.junit.jupiter.api.io.TempDir;
|
||||||
import ru.project.student.Student;
|
import ru.project.student.Student;
|
||||||
import ru.project.collection.MyLinkedList;
|
|
||||||
import ru.project.collection.MyList;
|
import ru.project.collection.MyList;
|
||||||
import ru.project.collectors.MyCollectors;
|
import ru.project.collectors.MyCollectors;
|
||||||
import ru.project.collectors.MyListCollector;
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
class StudentCsvReaderTest {
|
class StudentCsvReaderTest {
|
||||||
@TempDir
|
@TempDir
|
||||||
Path tempDir;
|
Path tempDir;
|
||||||
@@ -25,8 +20,8 @@ class StudentCsvReaderTest {
|
|||||||
Path csv = tempDir.resolve("students.csv");
|
Path csv = tempDir.resolve("students.csv");
|
||||||
String content = String.join("\n",
|
String content = String.join("\n",
|
||||||
"groupNumber,averageGrade,recordBookNumber",
|
"groupNumber,averageGrade,recordBookNumber",
|
||||||
"M10,4.5,12345", // валидно: 1 буква + 2 цифры
|
"M10,4.5,12345",
|
||||||
"B05,3.8,12346" // валидно
|
"B05,3.8,12346"
|
||||||
);
|
);
|
||||||
Files.writeString(csv, content, StandardCharsets.UTF_8);
|
Files.writeString(csv, content, StandardCharsets.UTF_8);
|
||||||
try (var reader = new StudentCsvReader(csv.toAbsolutePath())) {
|
try (var reader = new StudentCsvReader(csv.toAbsolutePath())) {
|
||||||
@@ -67,14 +62,15 @@ class StudentCsvReaderTest {
|
|||||||
M101,4.5
|
M101,4.5
|
||||||
""";
|
""";
|
||||||
Files.writeString(csv, content, StandardCharsets.UTF_8);
|
Files.writeString(csv, content, StandardCharsets.UTF_8);
|
||||||
var reader = new StudentCsvReader(csv.toAbsolutePath());
|
try (var reader = new StudentCsvReader(csv.toAbsolutePath())) {
|
||||||
assertTrue(reader.hasNext());
|
assertTrue(reader.hasNext());
|
||||||
// следующая строка имеет только 2 колонки
|
|
||||||
IllegalArgumentException ex = assertThrows(
|
IllegalArgumentException ex = assertThrows(
|
||||||
IllegalArgumentException.class,
|
IllegalArgumentException.class,
|
||||||
reader::next
|
reader::next
|
||||||
);
|
);
|
||||||
assertTrue(ex.getMessage().contains("Expected 3 columns"));
|
assertTrue(ex.getMessage().contains("Expected 3 columns"));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@Test
|
@Test
|
||||||
void shouldTestparseErrorThrowsExceptionWithDetails() throws IOException {
|
void shouldTestparseErrorThrowsExceptionWithDetails() throws IOException {
|
||||||
@@ -84,14 +80,15 @@ class StudentCsvReaderTest {
|
|||||||
M101,not-a-number,12345
|
M101,not-a-number,12345
|
||||||
""";
|
""";
|
||||||
Files.writeString(csv, content, StandardCharsets.UTF_8);
|
Files.writeString(csv, content, StandardCharsets.UTF_8);
|
||||||
|
try (var reader = new StudentCsvReader(csv.toAbsolutePath())) {
|
||||||
|
assertTrue(reader.hasNext());
|
||||||
|
|
||||||
var reader = new StudentCsvReader(csv.toAbsolutePath());
|
IllegalArgumentException ex = assertThrows(
|
||||||
assertTrue(reader.hasNext());
|
IllegalArgumentException.class,
|
||||||
IllegalArgumentException ex = assertThrows(
|
reader::next
|
||||||
IllegalArgumentException.class,
|
);
|
||||||
reader::next
|
assertTrue(ex.getMessage().contains("cannot parse averageGrade"));
|
||||||
);
|
}
|
||||||
assertTrue(ex.getMessage().contains("cannot parse averageGrade"));
|
|
||||||
}
|
}
|
||||||
@Test
|
@Test
|
||||||
void shouldTestemptyDataAfterHeaderThrowsNoSuchElement() throws IOException {
|
void shouldTestemptyDataAfterHeaderThrowsNoSuchElement() throws IOException {
|
||||||
@@ -100,17 +97,22 @@ class StudentCsvReaderTest {
|
|||||||
groupNumber,averageGrade,recordBookNumber
|
groupNumber,averageGrade,recordBookNumber
|
||||||
""";
|
""";
|
||||||
Files.writeString(csv, content, StandardCharsets.UTF_8);
|
Files.writeString(csv, content, StandardCharsets.UTF_8);
|
||||||
var reader = new StudentCsvReader(csv.toAbsolutePath());
|
|
||||||
assertFalse(reader.hasNext());
|
// ИСПРАВЛЕНО: добавлен try-with-resources
|
||||||
assertThrows(NoSuchElementException.class, reader::next);
|
try (var reader = new StudentCsvReader(csv.toAbsolutePath())) {
|
||||||
|
assertFalse(reader.hasNext());
|
||||||
|
|
||||||
|
assertThrows(NoSuchElementException.class, reader::next);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@Test
|
@Test
|
||||||
void shouldTestrelativePathThrowsException() {
|
void shouldTestrelativePathThrowsException() {
|
||||||
Path relative = Path.of("relative-path.csv");
|
Path relative = Path.of("relative-path.csv");
|
||||||
|
|
||||||
IllegalArgumentException ex = assertThrows(
|
IllegalArgumentException ex = assertThrows(
|
||||||
IllegalArgumentException.class,
|
IllegalArgumentException.class,
|
||||||
() -> new StudentCsvReader(relative)
|
() -> new StudentCsvReader(relative)
|
||||||
);
|
);
|
||||||
assertTrue(ex.getMessage().contains("absolute"));
|
assertTrue(ex.getMessage().contains("absolute"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user