BAEL-3462 Univosity Parsers (#9222)

* BAEL-3462 CSV Univosity Example

* Added a row processor example
This commit is contained in:
Amy DeGregorio
2020-05-17 14:17:51 -04:00
committed by GitHub
parent 832b32210c
commit c66c60bcff
10 changed files with 374 additions and 0 deletions
@@ -0,0 +1,112 @@
package com.baeldung.univocity;
import static org.junit.Assert.assertEquals;
import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
import com.baeldung.univocity.model.Product;
public class ParsingServiceUnitTest {
@Test
public void givenCsvFile_thenParsedResultsShouldBeReturned() {
ParsingService parsingService = new ParsingService();
List<String[]> productData = parsingService.parseCsvFile("src/test/resources/productList.csv");
assertEquals(3, productData.size());
assertEquals(3, productData.get(0).length);
assertEquals("A8993-10", productData.get(0)[0]);
assertEquals("Extra large widget", productData.get(0)[1]);
assertEquals("35.42", productData.get(0)[2]);
assertEquals("D-2938-1", productData.get(1)[0]);
assertEquals("Winding widget \"Deluxe Model\"", productData.get(1)[1]);
assertEquals("245.99", productData.get(1)[2]);
assertEquals("R3212-32", productData.get(2)[0]);
assertEquals("Standard widget", productData.get(2)[1]);
assertEquals("2.34", productData.get(2)[2]);
}
@Test
public void givenFixedWidthFile_thenParsedResultsShouldBeReturned() {
ParsingService parsingService = new ParsingService();
List<String[]> productData = parsingService.parseFixedWidthFile("src/test/resources/productList.txt");
// Note: any extra spaces on the end will cause a null line to be added
assertEquals(3, productData.size());
assertEquals(3, productData.get(0).length);
assertEquals("A8993-10", productData.get(0)[0]);
assertEquals("Extra large widget", productData.get(0)[1]);
assertEquals("35.42", productData.get(0)[2]);
assertEquals("D-2938-1", productData.get(1)[0]);
assertEquals("Winding widget \"Deluxe Model\"", productData.get(1)[1]);
assertEquals("245.99", productData.get(1)[2]);
assertEquals("R3212-32", productData.get(2)[0]);
assertEquals("Standard widget", productData.get(2)[1]);
assertEquals("2.34", productData.get(2)[2]);
}
@Test
public void givenDataAndCsvOutputType_thenCsvFileProduced() {
OutputService outputService = new OutputService();
List<Object[]> productData = new ArrayList<>();
productData.add(new Object[] { "1000-3-0", "Widget No. 96", "5.67" });
productData.add(new Object[] { "G930-M-P", "1/4\" Wocket", ".67" });
productData.add(new Object[] { "8080-0-M", "No. 54 Jumbo Widget", "35.74" });
outputService.writeData(productData, OutputService.OutputType.CSV, "src/test/resources/outputProductList.csv");
ParsingService parsingService = new ParsingService();
List<String[]> writtenData = parsingService.parseCsvFile("src/test/resources/outputProductList.csv");
assertEquals(3, writtenData.size());
assertEquals(3, writtenData.get(0).length);
}
@Test
public void givenDataAndFixedWidthOutputType_thenFixedWidthFileProduced() {
OutputService outputService = new OutputService();
List<Object[]> productData = new ArrayList<>();
productData.add(new Object[] { "1000-3-0", "Widget No. 96", "5.67" });
productData.add(new Object[] { "G930-M-P", "1/4\" Wocket", ".67" });
productData.add(new Object[] { "8080-0-M", "No. 54 Jumbo Widget", "35.74" });
outputService.writeData(productData, OutputService.OutputType.FIXED_WIDTH, "src/test/resources/outputProductList.txt");
ParsingService parsingService = new ParsingService();
List<String[]> writtenData = parsingService.parseFixedWidthFile("src/test/resources/outputProductList.txt");
assertEquals(3, writtenData.size());
assertEquals(3, writtenData.get(0).length);
}
@Test
public void givenCsvFile_thenCsvFileParsedIntoBeans() {
ParsingService parsingService = new ParsingService();
List<Product> products = parsingService.parseCsvFileIntoBeans("src/test/resources/productListWithHeaders.csv");
assertEquals(2, products.size());
assertEquals("Product [Product Number: 99-378AG, Description: Wocket Widget #42, Unit Price: 3.56]", products.get(0)
.toString());
assertEquals("Product [Product Number: TB-333-0, Description: Turbine Widget replacement kit, Unit Price: 800.99]", products.get(1)
.toString());
}
@Test
public void givenLisOfProduct_thenWriteFixedWidthFile() {
OutputService outputService = new OutputService();
Product product = new Product();
product.setProductNumber("007-PPG0");
product.setDescription("3/8\" x 1\" Wocket");
product.setUnitPrice(45.99f);
List<Product> products = new ArrayList<>();
products.add(product);
outputService.writeBeanToFixedWidthFile(products, "src/test/resources/productListWithHeaders.txt");
ParsingService parsingService = new ParsingService();
List<String[]> writtenData = parsingService.parseFixedWidthFile("src/test/resources/productListWithHeaders.txt");
assertEquals(2, writtenData.size());
assertEquals(3, writtenData.get(0).length);
}
@Test
public void givenLargeCsvFile_thenParsedDataShouldBeReturned() {
ParsingService parsingService = new ParsingService();
List<String[]> productData = parsingService.parseCsvFileInBatches("src/test/resources/largeProductList.csv");
assertEquals(36, productData.size());
}
}
@@ -0,0 +1,36 @@
A8993-10,"Extra large widget",35.42
D-2938-1,"Winding widget ""Deluxe Model""",245.99
R3212-32,"Standard widget",2.34
A8993-10,"Extra large widget",35.42
D-2938-1,"Winding widget ""Deluxe Model""",245.99
R3212-32,"Standard widget",2.34
A8993-10,"Extra large widget",35.42
D-2938-1,"Winding widget ""Deluxe Model""",245.99
R3212-32,"Standard widget",2.34
A8993-10,"Extra large widget",35.42
D-2938-1,"Winding widget ""Deluxe Model""",245.99
R3212-32,"Standard widget",2.34
A8993-10,"Extra large widget",35.42
D-2938-1,"Winding widget ""Deluxe Model""",245.99
R3212-32,"Standard widget",2.34
A8993-10,"Extra large widget",35.42
D-2938-1,"Winding widget ""Deluxe Model""",245.99
R3212-32,"Standard widget",2.34
A8993-10,"Extra large widget",35.42
D-2938-1,"Winding widget ""Deluxe Model""",245.99
R3212-32,"Standard widget",2.34
A8993-10,"Extra large widget",35.42
D-2938-1,"Winding widget ""Deluxe Model""",245.99
R3212-32,"Standard widget",2.34
A8993-10,"Extra large widget",35.42
D-2938-1,"Winding widget ""Deluxe Model""",245.99
R3212-32,"Standard widget",2.34
A8993-10,"Extra large widget",35.42
D-2938-1,"Winding widget ""Deluxe Model""",245.99
R3212-32,"Standard widget",2.34
A8993-10,"Extra large widget",35.42
D-2938-1,"Winding widget ""Deluxe Model""",245.99
R3212-32,"Standard widget",2.34
A8993-10,"Extra large widget",35.42
D-2938-1,"Winding widget ""Deluxe Model""",245.99
R3212-32,"Standard widget",2.34
1 A8993-10 Extra large widget 35.42
2 D-2938-1 Winding widget "Deluxe Model" 245.99
3 R3212-32 Standard widget 2.34
4 A8993-10 Extra large widget 35.42
5 D-2938-1 Winding widget "Deluxe Model" 245.99
6 R3212-32 Standard widget 2.34
7 A8993-10 Extra large widget 35.42
8 D-2938-1 Winding widget "Deluxe Model" 245.99
9 R3212-32 Standard widget 2.34
10 A8993-10 Extra large widget 35.42
11 D-2938-1 Winding widget "Deluxe Model" 245.99
12 R3212-32 Standard widget 2.34
13 A8993-10 Extra large widget 35.42
14 D-2938-1 Winding widget "Deluxe Model" 245.99
15 R3212-32 Standard widget 2.34
16 A8993-10 Extra large widget 35.42
17 D-2938-1 Winding widget "Deluxe Model" 245.99
18 R3212-32 Standard widget 2.34
19 A8993-10 Extra large widget 35.42
20 D-2938-1 Winding widget "Deluxe Model" 245.99
21 R3212-32 Standard widget 2.34
22 A8993-10 Extra large widget 35.42
23 D-2938-1 Winding widget "Deluxe Model" 245.99
24 R3212-32 Standard widget 2.34
25 A8993-10 Extra large widget 35.42
26 D-2938-1 Winding widget "Deluxe Model" 245.99
27 R3212-32 Standard widget 2.34
28 A8993-10 Extra large widget 35.42
29 D-2938-1 Winding widget "Deluxe Model" 245.99
30 R3212-32 Standard widget 2.34
31 A8993-10 Extra large widget 35.42
32 D-2938-1 Winding widget "Deluxe Model" 245.99
33 R3212-32 Standard widget 2.34
34 A8993-10 Extra large widget 35.42
35 D-2938-1 Winding widget "Deluxe Model" 245.99
36 R3212-32 Standard widget 2.34
@@ -0,0 +1,3 @@
A8993-10,"Extra large widget",35.42
D-2938-1,"Winding widget ""Deluxe Model""",245.99
R3212-32,"Standard widget",2.34
1 A8993-10 Extra large widget 35.42
2 D-2938-1 Winding widget "Deluxe Model" 245.99
3 R3212-32 Standard widget 2.34
@@ -0,0 +1,3 @@
A8993-10Extra large widget 35.42
D-2938-1Winding widget "Deluxe Model" 245.99
R3212-32Standard widget 2.34
@@ -0,0 +1,3 @@
product_no, description, unit_price
99-378AG,Wocket Widget #42,3.56
TB-333-0,Turbine Widget replacement kit,800.99
1 product_no description unit_price
2 99-378AG Wocket Widget #42 3.56
3 TB-333-0 Turbine Widget replacement kit 800.99
@@ -0,0 +1,2 @@
product_description unit_price
007-PPG03/8" x 1" Wocket 45.99