From: <zep...@us...> - 2006-10-24 17:33:30
|
Revision: 117 http://svn.sourceforge.net/pzfilereader/?rev=117&view=rev Author: zepernick Date: 2006-10-24 10:33:24 -0700 (Tue, 24 Oct 2006) Log Message: ----------- expanded upon the tests. Made a little more generic. There is an array of delimiters and qualifiers which we can fill in for whatever we want to test. Implemented Benoit's formating suggestions. Modified Paths: -------------- trunk/PZFileReader/src/test/java/net/sf/pzfilereader/parserutils/ParserUtilsSplitLineTest.java Added Paths: ----------- trunk/PZFileReader/src/test/java/net/sf/pzfilereader/utilities/UnitTestUtils.java Modified: trunk/PZFileReader/src/test/java/net/sf/pzfilereader/parserutils/ParserUtilsSplitLineTest.java =================================================================== --- trunk/PZFileReader/src/test/java/net/sf/pzfilereader/parserutils/ParserUtilsSplitLineTest.java 2006-10-24 17:33:17 UTC (rev 116) +++ trunk/PZFileReader/src/test/java/net/sf/pzfilereader/parserutils/ParserUtilsSplitLineTest.java 2006-10-24 17:33:24 UTC (rev 117) @@ -3,6 +3,7 @@ import java.util.List; import net.sf.pzfilereader.util.ParserUtils; +import net.sf.pzfilereader.utilities.UnitTestUtils; import junit.framework.TestCase; /** @@ -10,40 +11,119 @@ * a List of Strings. Each element of the list represents a column created * by the parser from the delimited String. * - * @author zepernick + * @author Paul Zepernick */ public class ParserUtilsSplitLineTest extends TestCase{ - final String[] delimitedDataNoBreaks = {"Column 1","Column 2", "Column 3", "Column 4", "Column 5"}; - final String[] delimitedDataWithBreaks = {"Column 1","Column 2", "Column 3", "Column 4", "Column 5"}; + private static final String[] DELIMITED_DATA_NO_BREAKS = {"Column 1","Column 2", "Column 3", "Column 4", "Column 5"}; + private static final String[] DELIMITED_DATA_WITH_BREAKS = {"Column 1 \r\n\r\n Test After Break \r\n Another Break", + "Column 2", + "Column 3 \r\n\r\n Test After Break", + "Column 4", + "Column 5 \r\n\r\n Test After Break\r\n Another Break"}; + //TODO think of a situation that actually breaks the parse. This still works because of the way it is coded + //to handle the excel CSV. Excel CSV has some elements qualified and others not + private static final String DELIMITED_BAD_DATA = "\"column 1\",\"column 2 ,\"column3\""; + //0 = delimiter + //1 = qualifier + private static final String[][] DELIM_QUAL_PAIR = { + {",","\""}, + {"\t","\""}, + {"|","\""}, + {"_","\""}, + {",",null}, + {"|",null}, + {"\t",null}, + }; + /** - * Test CSV without any line breaks + * Test without any line breaks * */ - public void testCSVNoLineBreaks(){ - - final String delimiter = ","; - final String qualifier = "\""; - final StringBuffer txtToParse = new StringBuffer(); - for (int i = 0; i < delimitedDataNoBreaks.length; i++){ - if (i > 0){ - txtToParse.append(delimiter); + public void testNoLineBreaks(){ + //loop down all delimiter qualifier pairs to test + for (int i = 0; i < DELIM_QUAL_PAIR.length; i++){ + final String d = DELIM_QUAL_PAIR[i][0]; + final String q = DELIM_QUAL_PAIR[i][1]; + + final String txtToParse; + if (q == null){ + txtToParse = UnitTestUtils.buildDelimString(DELIMITED_DATA_NO_BREAKS, + d.charAt(0)); + }else{ + txtToParse = UnitTestUtils.buildDelimString(DELIMITED_DATA_NO_BREAKS, + d.charAt(0), + q.charAt(0)); } - txtToParse.append(qualifier + delimitedDataNoBreaks[i] + qualifier); + + final List splitLineResults = ParserUtils.splitLine(txtToParse.toString(), + d, q); + + + //check to make sure we have the same amount of elements which were expected + assertEquals("Did Not Get Amount Of Elements Expected (d = " + d + " q = " + q + ")", + DELIMITED_DATA_NO_BREAKS.length, splitLineResults.size()); + + //loop through each value and compare what came back + for (int j = 0 ; j < DELIMITED_DATA_NO_BREAKS.length; j ++){ + assertEquals("Data Element Value Does Not Match (d = " + d + " q = " + q + ")", + DELIMITED_DATA_NO_BREAKS[j], (String)splitLineResults.get(j)); + } } - List splitLineResults = ParserUtils.splitLine(txtToParse.toString(), delimiter, qualifier); + } + + /** + * Test without any line breaks + * + */ + public void testLineBreaks(){ + //loop down all delimiter qualifier pairs to test + for (int i = 0; i < DELIM_QUAL_PAIR.length; i++){ + final String d = DELIM_QUAL_PAIR[i][0]; + final String q = DELIM_QUAL_PAIR[i][1]; + + final String txtToParse; + if (DELIM_QUAL_PAIR[i][1] == null){ + txtToParse = UnitTestUtils.buildDelimString(DELIMITED_DATA_WITH_BREAKS, + DELIM_QUAL_PAIR[i][0].charAt(0)); + }else{ + txtToParse = UnitTestUtils.buildDelimString(DELIMITED_DATA_WITH_BREAKS, + DELIM_QUAL_PAIR[i][0].charAt(0), + DELIM_QUAL_PAIR[i][1].charAt(0)); + } - //check to make sure we have the same amount of elements which were expected - assertEquals(delimitedDataNoBreaks.length, splitLineResults.size()); - - //loop through each value and compare what came back - for (int i = 0 ; i < delimitedDataNoBreaks.length; i ++){ - assertEquals(delimitedDataNoBreaks[i], (String)splitLineResults.get(i)); + final List splitLineResults = ParserUtils.splitLine(txtToParse.toString(), + DELIM_QUAL_PAIR[i][0], DELIM_QUAL_PAIR[i][1]); + + + //check to make sure we have the same amount of elements which were expected + assertEquals("Did Not Get Amount Of Elements Expected (d = " + d + " q = " + q + ")", + DELIMITED_DATA_WITH_BREAKS.length, splitLineResults.size()); + + //loop through each value and compare what came back + for (int j = 0 ; j < DELIMITED_DATA_WITH_BREAKS.length; j ++){ + assertEquals("Data Element Value Does Not Match (d = " + d + " q = " + q + ")", + DELIMITED_DATA_WITH_BREAKS[j], (String)splitLineResults.get(j)); + } + } + } + + /** + * Test to make sure we get the correct amount of elements for malformed data + * + * @param args + */ + public void testMalformedData(){ + final List splitLineResults = ParserUtils.splitLine(DELIMITED_BAD_DATA, + ",", "\""); + assertEquals("Expecting 2 Data Elements From The Malformed Data", + 2, splitLineResults.size()); + } public static void main(final String[] args) { Added: trunk/PZFileReader/src/test/java/net/sf/pzfilereader/utilities/UnitTestUtils.java =================================================================== --- trunk/PZFileReader/src/test/java/net/sf/pzfilereader/utilities/UnitTestUtils.java (rev 0) +++ trunk/PZFileReader/src/test/java/net/sf/pzfilereader/utilities/UnitTestUtils.java 2006-10-24 17:33:24 UTC (rev 117) @@ -0,0 +1,50 @@ +package net.sf.pzfilereader.utilities; + +/** + * Static utility methods for Junit tests + * + * @author Paul Zepernick + */ +public class UnitTestUtils { + + /** + * Builds a delimited qualified string containing the elements passed in + * + * @param elements + * Elements To Include In Delimited String + * @param delimiter + * @param qualifier + * @return String + */ + public static String buildDelimString(final String[] elements, final char delimiter, final char qualifier){ + final StringBuffer sb = new StringBuffer(); + for (int i = 0; i < elements.length; i++){ + if (i > 0){ + sb.append(delimiter); + } + sb.append(qualifier).append(elements[i]).append(qualifier); + } + + + return sb.toString(); + } + + /** Builds a delimited string containing the elements passed in + * + * @param elements + * Elements To Include In Delimited String + * @param delimiter + * @return String + */ + public static String buildDelimString(final String[] elements, final char delimiter){ + final StringBuffer sb = new StringBuffer(); + for (int i = 0; i < elements.length; i++){ + if (i > 0){ + sb.append(delimiter); + } + } + + + return sb.toString(); + } +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |