From 3acdb6a6f8da331f7e3c94530b4ec7add431c8d1 Mon Sep 17 00:00:00 2001 From: Nikollai Date: Sun, 12 Apr 2026 16:34:20 +0200 Subject: [PATCH] Changelog renamed StockFileReader Added toString method to stock class Created test for CSVStockFileParser Fixed issue where CSVStockFileParser would only accept incorrect formats --- .../controller/fileIO/CSVStockFileParser.java | 9 +++-- ...mationReader.java => StockFileReader.java} | 10 +++-- src/main/java/millions/model/Stock.java | 5 +++ .../java/millions/CSVStockFileParserTest.java | 40 +++++++++++++++++++ 4 files changed, 56 insertions(+), 8 deletions(-) rename src/main/java/millions/controller/fileIO/{StockInformationReader.java => StockFileReader.java} (68%) create mode 100644 src/test/java/millions/CSVStockFileParserTest.java diff --git a/src/main/java/millions/controller/fileIO/CSVStockFileParser.java b/src/main/java/millions/controller/fileIO/CSVStockFileParser.java index 15742db..536e142 100644 --- a/src/main/java/millions/controller/fileIO/CSVStockFileParser.java +++ b/src/main/java/millions/controller/fileIO/CSVStockFileParser.java @@ -19,15 +19,16 @@ public CSVStockFileParser(List lines) { } // returns true if all entries have exactly 3 data points - private static boolean verifyCSV(List lines) { + public boolean verifyCSV(List lines) { return lines.stream() - .filter(l -> !(l.startsWith("#") || l.isEmpty())) - .anyMatch(l -> l.split(",").length != 3); + .filter(l -> !(l.startsWith("#") || l.isBlank())) + .noneMatch(l -> l.split(",").length != 3); + } public List parse() { List stocks = new ArrayList<>(); - lines.forEach(l -> { + lines.stream().filter(l -> !((l.startsWith("#") || l.isBlank()))).forEach(l -> { String[] split = l.split(","); String symbol = split[0]; String company = split[1]; diff --git a/src/main/java/millions/controller/fileIO/StockInformationReader.java b/src/main/java/millions/controller/fileIO/StockFileReader.java similarity index 68% rename from src/main/java/millions/controller/fileIO/StockInformationReader.java rename to src/main/java/millions/controller/fileIO/StockFileReader.java index 38a2173..22852cf 100644 --- a/src/main/java/millions/controller/fileIO/StockInformationReader.java +++ b/src/main/java/millions/controller/fileIO/StockFileReader.java @@ -1,18 +1,20 @@ package millions.controller.fileIO; import java.io.*; +import java.nio.file.Path; import java.util.ArrayList; import java.util.List; -public class StockInformationReader { - private final File file; +public class StockFileReader { + private final Path filePath; - public StockInformationReader(File file) { - this.file = file; + public StockFileReader(Path path) { + this.filePath = path; } public List readFile() { + File file = new File(filePath.toString()); List lines = new ArrayList<>(); try (Reader reader = new FileReader(file); BufferedReader bufferedReader = new BufferedReader(reader)) { lines = bufferedReader.readAllLines(); diff --git a/src/main/java/millions/model/Stock.java b/src/main/java/millions/model/Stock.java index feff8bb..2a67d74 100644 --- a/src/main/java/millions/model/Stock.java +++ b/src/main/java/millions/model/Stock.java @@ -73,4 +73,9 @@ public BigDecimal getLatestPriceChange() { return currentPrice.subtract(lastPrice); } + + @Override + public String toString() { + return "Stock [symbol: " + symbol + ", company: " + company + ", prices: " + prices + "]"; + } } diff --git a/src/test/java/millions/CSVStockFileParserTest.java b/src/test/java/millions/CSVStockFileParserTest.java new file mode 100644 index 0000000..2b53311 --- /dev/null +++ b/src/test/java/millions/CSVStockFileParserTest.java @@ -0,0 +1,40 @@ +package millions; + +import millions.controller.fileIO.CSVStockFileParser; +import millions.controller.fileIO.StockFileReader; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; + +public class CSVStockFileParserTest { + @TempDir + static Path tempDir; + + static Path sharedFile; + + @BeforeAll + public static void setUpTestFile() throws Exception { + sharedFile = Files.createFile(tempDir.resolve("file.csv")); + String string = "# Top 500 US Stocks by Market Cap\n"; + string += "# Ticker,Name,Price\n"; + string += "\n"; + string += "NVDA,Nvidia,191.27\n"; + string += "AAPL,Apple Inc.,276.43\n"; + string += "MSFT,Microsoft,404.68\n"; + Files.writeString(sharedFile, string); + } + + @Test + public void parseStockFileTest(){ + StockFileReader stockFileReader = new StockFileReader(sharedFile); + stockFileReader.readFile().forEach(System.out::println); + + CSVStockFileParser parser = new CSVStockFileParser(stockFileReader.readFile()); + parser.parse().forEach(s -> System.out.println(s.toString())); + } +}