You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@turbine.apache.org by he...@apache.org on 2005/09/11 19:26:37 UTC

svn commit: r280154 - in /jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src: java/org/apache/turbine/util/parser/CSVParser.java java/org/apache/turbine/util/parser/DataStreamParser.java test/org/apache/turbine/util/parser/CSVParserTest.java

Author: henning
Date: Sun Sep 11 10:26:30 2005
New Revision: 280154

URL: http://svn.apache.org/viewcvs?rev=280154&view=rev
Log:
- rework ReadColumnNames method. 
- cover remaining methods with UnitTests.

Modified:
    jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/java/org/apache/turbine/util/parser/CSVParser.java
    jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/java/org/apache/turbine/util/parser/DataStreamParser.java
    jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/test/org/apache/turbine/util/parser/CSVParserTest.java

Modified: jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/java/org/apache/turbine/util/parser/CSVParser.java
URL: http://svn.apache.org/viewcvs/jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/java/org/apache/turbine/util/parser/CSVParser.java?rev=280154&r1=280153&r2=280154&view=diff
==============================================================================
--- jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/java/org/apache/turbine/util/parser/CSVParser.java (original)
+++ jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/java/org/apache/turbine/util/parser/CSVParser.java Sun Sep 11 10:26:30 2005
@@ -42,6 +42,7 @@
  *
  * @author <a href="mailto:sean@informage.net">Sean Legassick</a>
  * @author <a href="mailto:martin@mvdb.net">Martin van den Bemt</a>
+ * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
  * @version $Id$
  */
 public class CSVParser extends DataStreamParser

Modified: jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/java/org/apache/turbine/util/parser/DataStreamParser.java
URL: http://svn.apache.org/viewcvs/jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/java/org/apache/turbine/util/parser/DataStreamParser.java?rev=280154&r1=280153&r2=280154&view=diff
==============================================================================
--- jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/java/org/apache/turbine/util/parser/DataStreamParser.java (original)
+++ jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/java/org/apache/turbine/util/parser/DataStreamParser.java Sun Sep 11 10:26:30 2005
@@ -23,13 +23,11 @@
 import java.io.StreamTokenizer;
 
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
 import java.util.NoSuchElementException;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
 /**
  * DataStreamParser is used to parse a stream with a fixed format and
  * generate ValueParser objects which can be used to extract the values
@@ -51,18 +49,11 @@
  *
  * @author <a href="mailto:sean@informage.net">Sean Legassick</a>
  * @author <a href="mailto:martin@mvdb.net">Martin van den Bemt</a>
+ * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
  * @version $Id$
  */
 public abstract class DataStreamParser implements Iterator
 {
-    /** Logging */
-    private static Log log = LogFactory.getLog(DataStreamParser.class);
-
-    /**
-     * Conditional compilation flag.
-     */
-    private static final boolean DEBUG = false;
-
     /**
      * The constant for empty fields
      */
@@ -71,7 +62,7 @@
     /**
      * The list of column names.
      */
-    private List columnNames;
+    private List columnNames = Collections.EMPTY_LIST;
 
     /**
      * The stream tokenizer for reading values from the input reader.
@@ -110,19 +101,21 @@
     public DataStreamParser(Reader in, List columnNames,
                             String characterEncoding)
     {
-        this.columnNames = columnNames;
+        setColumnNames(columnNames);
+
         this.characterEncoding = characterEncoding;
 
         if (this.characterEncoding == null)
         {
-            // try and get the characterEncoding from the reader
-            this.characterEncoding = "US-ASCII";
-            try
+            if (in instanceof InputStreamReader)
             {
                 this.characterEncoding = ((InputStreamReader) in).getEncoding();
             }
-            catch (ClassCastException e)
+
+            if (this.characterEncoding == null)
             {
+                // try and get the characterEncoding from the reader
+                this.characterEncoding = "US-ASCII";
             }
         }
 
@@ -169,7 +162,19 @@
      */
     public void setColumnNames(List columnNames)
     {
-        this.columnNames = columnNames;
+        if (columnNames != null)
+        {
+            this.columnNames = columnNames;
+        }
+    }
+
+    /**
+     * get the list of column names.
+     *
+     */
+    public List getColumnNames()
+    {
+        return columnNames;
     }
 
     /**
@@ -182,37 +187,52 @@
     public void readColumnNames()
             throws IOException
     {
-        columnNames = new ArrayList();
-        int lastTtype = 0;
-        int fieldCounter = 1;
-
-        neverRead = false;
-        tokenizer.nextToken();
-        while (tokenizer.ttype == StreamTokenizer.TT_WORD || tokenizer.ttype == StreamTokenizer.TT_EOL
-                || tokenizer.ttype == '"' || tokenizer.ttype == fieldSeparator)
+        List columnNames = new ArrayList();
+        int fieldCounter = 0;
+
+        if (hasNextRow())
         {
-            if (tokenizer.ttype != fieldSeparator && tokenizer.ttype != StreamTokenizer.TT_EOL)
-            {
-                columnNames.add(tokenizer.sval);
-                fieldCounter++;
-            }
-            else if (tokenizer.ttype == fieldSeparator && lastTtype == fieldSeparator)
-            {
-                // we have an empty field name
-                columnNames.add(EMPTYFIELDNAME + fieldCounter);
-                fieldCounter++;
-            }
-            else if (lastTtype == fieldSeparator && tokenizer.ttype == StreamTokenizer.TT_EOL)
-            {
-                columnNames.add(EMPTYFIELDNAME + fieldCounter);
-                break;
-            }
-            else if (tokenizer.ttype == StreamTokenizer.TT_EOL)
+            String colName = null;
+            boolean foundEol = false;
+
+            while(!foundEol)
             {
-                break;
+                tokenizer.nextToken();
+
+                if (tokenizer.ttype == '"'
+                        || tokenizer.ttype == StreamTokenizer.TT_WORD)
+                {
+                    // tokenizer.ttype is either '"' or TT_WORD
+                    colName = tokenizer.sval;
+                }
+                else
+                {
+                    // fieldSeparator, EOL or EOF
+                    fieldCounter++;
+
+                    if (colName == null)
+                    {
+                        colName = EMPTYFIELDNAME + fieldCounter;
+                    }
+
+                    columnNames.add(colName);
+                    colName = null;
+                }
+
+                // EOL and EOF are checked independently from existing fields.
+                if (tokenizer.ttype == StreamTokenizer.TT_EOL)
+                {
+                    foundEol = true;
+                }
+                else if (tokenizer.ttype == StreamTokenizer.TT_EOF)
+                {
+                    // Keep this token in the tokenizer for hasNext()
+                    tokenizer.pushBack();
+                    foundEol = true;
+                }
             }
-            lastTtype = tokenizer.ttype;
-            tokenizer.nextToken();
+
+            setColumnNames(columnNames);
         }
     }
 
@@ -323,7 +343,7 @@
         }
         catch (IOException e)
         {
-            log.error("IOException in CSVParser.hasNext", e);
+            throw new RuntimeException(e);
         }
 
         return hasNext;
@@ -347,8 +367,7 @@
         }
         catch (IOException e)
         {
-            log.error("IOException in CSVParser.next", e);
-            throw new NoSuchElementException();
+            throw new RuntimeException(e);
         }
 
         return nextRow;

Modified: jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/test/org/apache/turbine/util/parser/CSVParserTest.java
URL: http://svn.apache.org/viewcvs/jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/test/org/apache/turbine/util/parser/CSVParserTest.java?rev=280154&r1=280153&r2=280154&view=diff
==============================================================================
--- jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/test/org/apache/turbine/util/parser/CSVParserTest.java (original)
+++ jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/test/org/apache/turbine/util/parser/CSVParserTest.java Sun Sep 11 10:26:30 2005
@@ -16,10 +16,17 @@
  * limitations under the License.
  */
 
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
 import java.io.Reader;
 import java.io.StringReader;
 import java.util.Arrays;
+import java.util.Iterator;
 import java.util.List;
+import java.util.NoSuchElementException;
 
 import junit.framework.TestSuite;
 
@@ -65,6 +72,8 @@
 
         ValueParser vp = (ValueParser) p.next();
 
+        assertEquals("Wrong character encoding set", "UTF-8", vp.getCharacterEncoding());
+
         assertFalse(p.hasNext());
 
         for (int i = 0; i < fields.length; i ++)
@@ -479,6 +488,432 @@
 
         assertFalse(p.hasNext());
         assertEquals("Value does not match", "\"", vp.getString(fields[0]));
+    }
+
+    public void testExceptions()
+    {
+        String readLine = "0,1,2,3,4,5,6,7,8,9\n";
+
+        String [] fields = { "eins", "zwei", "drei", "vier", "fuenf", "sechs", "sieben", "acht", "neun", "null", };
+
+        Reader myReader = new StringReader(readLine);
+
+        List fieldNames = Arrays.asList(fields);
+
+        DataStreamParser p = new CSVParser(myReader, fieldNames, "UTF-8");
+
+        assertTrue(p.hasNext());
+
+        p.next();
+
+        try
+        {
+            p.remove();
+            fail("remove() succeeded!");
+        }
+        catch (Exception e)
+        {
+            assertEquals("Wrong Exception thrown", UnsupportedOperationException.class, e.getClass());
+        }
+
+        assertFalse(p.hasNext());
+
+        try
+        {
+            p.next();
+            fail("next() succeeded!");
+        }
+        catch (Exception e)
+        {
+            assertEquals("Wrong Exception thrown", NoSuchElementException.class, e.getClass());
+        }
+    }
+
+    public void testEncodingFromReader()
+    {
+        String readLine = "0,1,2,3,4,5,6,7,8,9\n";
+
+        String [] fields = { "eins", "zwei", "drei", "vier", "fuenf", "sechs", "sieben", "acht", "neun", "null", };
+        int [] values = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
+
+        Reader myReader = new StringReader(readLine);
+
+        List fieldNames = Arrays.asList(fields);
+
+        DataStreamParser p = new CSVParser(myReader, fieldNames, null);
+
+        assertTrue(p.hasNext());
+
+        ValueParser vp = (ValueParser) p.next();
+
+        assertEquals("Wrong character encoding set", "US-ASCII", vp.getCharacterEncoding());
+
+        assertFalse(p.hasNext());
+
+        for (int i = 0; i < fields.length; i ++)
+        {
+            assertEquals("Value does not match", Integer.toString(values[i]), vp.getString(fields[i]));
+            assertEquals("Value does not match", values[i], vp.getInt(fields[i]));
+        }
+    }
+
+    public void testEncodingFromStream()
+        throws Exception
+    {
+        String readLine = "0,1,2,3,4,5,6,7,8,9\n";
+
+        String [] fields = { "eins", "zwei", "drei", "vier", "fuenf", "sechs", "sieben", "acht", "neun", "null", };
+        int [] values = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
+
+        File myFile = File.createTempFile("turbine", null, null);
+
+        assertNotNull(myFile);
+
+        myFile.deleteOnExit();
+
+        FileOutputStream fos = new FileOutputStream(myFile);
+
+        assertNotNull(fos);
+
+        OutputStreamWriter osw = new OutputStreamWriter(fos, "ISO-8859-1");
+        assertNotNull(osw);
+
+        osw.write(readLine, 0, readLine.length());
+        osw.flush();
+        fos.flush();
+        osw.close();
+        fos.close();
+
+        FileInputStream fis = new FileInputStream(myFile);
+        assertNotNull(fis);
+
+        InputStreamReader myReader = new InputStreamReader(fis, "ISO-8859-1");
+        assertNotNull(myReader);
+
+        List fieldNames = Arrays.asList(fields);
+
+        DataStreamParser p = new CSVParser(myReader, fieldNames, null);
+
+        assertTrue(p.hasNext());
+
+        ValueParser vp = (ValueParser) p.next();
+
+        assertEquals("Wrong character encoding set", myReader.getEncoding(), vp.getCharacterEncoding());
+
+        assertFalse(p.hasNext());
+
+        for (int i = 0; i < fields.length; i ++)
+        {
+            assertEquals("Value does not match", Integer.toString(values[i]), vp.getString(fields[i]));
+            assertEquals("Value does not match", values[i], vp.getInt(fields[i]));
+        }
+    }
+
+    public void testSetColumnNames()
+    {
+        String readLine = "0,1,2,3,4,5,6,7,8,9\n";
+
+        String [] fields = { "eins", "zwei", "drei", "vier", "fuenf", "sechs", "sieben", "acht", "neun", "null", };
+        int [] values = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
+
+        Reader myReader = new StringReader(readLine);
+
+        DataStreamParser p = new CSVParser(myReader, null, null);
+
+        assertTrue(p.hasNext());
+
+        p.setColumnNames(Arrays.asList(fields));
+
+        ValueParser vp = (ValueParser) p.next();
+
+        assertEquals("Wrong character encoding set", "US-ASCII", vp.getCharacterEncoding());
+
+        assertFalse(p.hasNext());
+
+        for (int i = 0; i < fields.length; i ++)
+        {
+            assertEquals("Value does not match", Integer.toString(values[i]), vp.getString(fields[i]));
+            assertEquals("Value does not match", values[i], vp.getInt(fields[i]));
+        }
+    }
+
+    public void testEmptyColumnNames()
+            throws Exception
+    {
+        String readLine = 
+                "eins,zwei,drei,vier,fuenf,sechs,sieben,acht,neun,null\n"
+                + "0,1,2,3,4,5,6,7,8,9\n";
+
+        String [] fields = { "eins", "zwei", "drei", "vier", "fuenf", "sechs", "sieben", "acht", "neun", "null", };
+
+        Reader myReader = new StringReader(readLine);
+
+        List fieldNames = Arrays.asList(fields);
+
+        DataStreamParser p = new CSVParser(myReader, null, "UTF-8");
+
+        assertNotNull(p.getColumnNames());
+        assertEquals("Number of columns is not 0", 0, p.getColumnNames().size());
+
+        p.setColumnNames(fieldNames);
+        assertNotNull(p.getColumnNames());
+        assertEquals("Number of columns is not the number of set fields", fieldNames.size(), p.getColumnNames().size());
+
+        int cnt = 0;
+        for (Iterator it = p.getColumnNames().iterator(); it.hasNext(); )
+        {
+            assertEquals("Column name does not match", ((String) it.next()), fields[cnt++]);
+        }
+    }
+
+    public void testReadColumnNames()
+            throws Exception
+    {
+        String readLine = 
+                "eins,zwei,drei,vier,fuenf,sechs,sieben,acht,neun,null\n"
+                + "0,1,2,3,4,5,6,7,8,9\n";
+
+        String [] fields = { "eins", "zwei", "drei", "vier", "fuenf", "sechs", "sieben", "acht", "neun", "null", };
+        int [] values = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
+
+        Reader myReader = new StringReader(readLine);
+
+        List fieldNames = Arrays.asList(fields);
+
+        DataStreamParser p = new CSVParser(myReader, null, "UTF-8");
+
+        assertTrue(p.hasNext());
+
+        p.readColumnNames();
+
+        assertEquals("Number of columns is not the number of set fields", fieldNames.size(), p.getColumnNames().size());
+        int cnt = 0;
+        for (Iterator it = p.getColumnNames().iterator(); it.hasNext(); )
+        {
+            assertEquals("Column name does not match", ((String) it.next()), fields[cnt++]);
+        }
+
+        assertTrue(p.hasNext());
+
+        ValueParser vp = (ValueParser) p.next();
+
+        assertEquals("Wrong character encoding set", "UTF-8", vp.getCharacterEncoding());
+
+        assertFalse(p.hasNext());
+
+        for (int i = 0; i < fields.length; i ++)
+        {
+            assertEquals("Value does not match", Integer.toString(values[i]), vp.getString(fields[i]));
+            assertEquals("Value does not match", values[i], vp.getInt(fields[i]));
+        }
+    }
+
+    public void testJustReadColumnNames()
+            throws Exception
+    {
+        String readLine = 
+                "eins,zwei,drei,vier,fuenf,sechs,sieben,acht,neun,null\n";
+
+        String [] fields = { "eins", "zwei", "drei", "vier", "fuenf", "sechs", "sieben", "acht", "neun", "null", };
+
+        Reader myReader = new StringReader(readLine);
+
+        List fieldNames = Arrays.asList(fields);
+
+        DataStreamParser p = new CSVParser(myReader, null, "UTF-8");
+
+        assertTrue(p.hasNext());
+
+        p.readColumnNames();
+
+        assertEquals("Number of columns is not the number of set fields", fieldNames.size(), p.getColumnNames().size());
+        int cnt = 0;
+        for (Iterator it = p.getColumnNames().iterator(); it.hasNext(); )
+        {
+            assertEquals("Column name does not match", ((String) it.next()), fields[cnt++]);
+        }
+
+        assertFalse(p.hasNext());
+    }
+
+    public void testJustReadColumnNamesEOF()
+            throws Exception
+    {
+        String readLine = 
+                "eins,zwei,drei,vier,fuenf,sechs,sieben,acht,neun,null";
+
+        String [] fields = { "eins", "zwei", "drei", "vier", "fuenf", "sechs", "sieben", "acht", "neun", "null", };
+
+        Reader myReader = new StringReader(readLine);
+
+        List fieldNames = Arrays.asList(fields);
+
+        DataStreamParser p = new CSVParser(myReader, null, "UTF-8");
+
+        assertTrue(p.hasNext());
+
+        p.readColumnNames();
+
+        assertEquals("Number of columns is not the number of set fields", fieldNames.size(), p.getColumnNames().size());
+        int cnt = 0;
+        for (Iterator it = p.getColumnNames().iterator(); it.hasNext(); )
+        {
+            assertEquals("Column name does not match", ((String) it.next()), fields[cnt++]);
+        }
+
+        assertFalse(p.hasNext());
+    }
+
+    public void testJustReadColumnNamesQuoted()
+            throws Exception
+    {
+        String readLine = 
+                "\"eins\",\"zwei\",\"drei\",\"vier\",\"fuenf\",\"sechs\",\"sieben\",\"acht\",\"neun\",\"null\"\n";
+
+        String [] fields = { "eins", "zwei", "drei", "vier", "fuenf", "sechs", "sieben", "acht", "neun", "null", };
+
+        Reader myReader = new StringReader(readLine);
+
+        List fieldNames = Arrays.asList(fields);
+
+        DataStreamParser p = new CSVParser(myReader, null, "UTF-8");
+
+        assertTrue(p.hasNext());
+
+        p.readColumnNames();
+
+        assertEquals("Number of columns is not the number of set fields", fieldNames.size(), p.getColumnNames().size());
+        int cnt = 0;
+        for (Iterator it = p.getColumnNames().iterator(); it.hasNext(); )
+        {
+            assertEquals("Column name does not match", ((String) it.next()), fields[cnt++]);
+        }
+
+        assertFalse(p.hasNext());
+    }
+
+    public void testJustReadColumnNamesQuotedEOF()
+            throws Exception
+    {
+        String readLine = 
+                "\"eins\",\"zwei\",\"drei\",\"vier\",\"fuenf\",\"sechs\",\"sieben\",\"acht\",\"neun\",\"null\"";
+
+        String [] fields = { "eins", "zwei", "drei", "vier", "fuenf", "sechs", "sieben", "acht", "neun", "null", };
+
+        Reader myReader = new StringReader(readLine);
+
+        List fieldNames = Arrays.asList(fields);
+
+        DataStreamParser p = new CSVParser(myReader, null, "UTF-8");
+
+        assertTrue(p.hasNext());
+
+        p.readColumnNames();
+
+        assertEquals("Number of columns is not the number of set fields", fieldNames.size(), p.getColumnNames().size());
+        int cnt = 0;
+        for (Iterator it = p.getColumnNames().iterator(); it.hasNext(); )
+        {
+            assertEquals("Column name does not match", ((String) it.next()), fields[cnt++]);
+        }
+
+        assertFalse(p.hasNext());
+    }
+    public void testJustReadColumnNamesQuotedMissing()
+            throws Exception
+    {
+        String readLine = 
+                "\"eins\",\"zwei\",\"drei\",\"vier\",\"fuenf\",\"sechs\",\"sieben\",\"acht\",\"neun\",\"null\n";
+
+        String [] fields = { "eins", "zwei", "drei", "vier", "fuenf", "sechs", "sieben", "acht", "neun", "null", };
+
+        Reader myReader = new StringReader(readLine);
+
+        List fieldNames = Arrays.asList(fields);
+
+        DataStreamParser p = new CSVParser(myReader, null, "UTF-8");
+
+        assertTrue(p.hasNext());
+
+        p.readColumnNames();
+
+        assertEquals("Number of columns is not the number of set fields", fieldNames.size(), p.getColumnNames().size());
+        int cnt = 0;
+        for (Iterator it = p.getColumnNames().iterator(); it.hasNext(); )
+        {
+            assertEquals("Column name does not match", ((String) it.next()), fields[cnt++]);
+        }
+
+        assertFalse(p.hasNext());
+    }
+
+    public void testColumnNamesMissing()
+            throws Exception
+    {
+        String readLine = 
+                "eins,zwei,drei,vier,,sechs,,acht,neun,\n";
+
+        String [] fields = { "eins", "zwei", "drei", "vier", "UNKNOWNFIELD5", "sechs", "UNKNOWNFIELD7", "acht", "neun", "UNKNOWNFIELD10", };
+
+        Reader myReader = new StringReader(readLine);
+
+        List fieldNames = Arrays.asList(fields);
+
+        DataStreamParser p = new CSVParser(myReader, null, "UTF-8");
+
+        assertTrue(p.hasNext());
+
+        p.readColumnNames();
+
+        assertEquals("Number of columns is not the number of set fields", fieldNames.size(), p.getColumnNames().size());
+        int cnt = 0;
+        for (Iterator it = p.getColumnNames().iterator(); it.hasNext(); )
+        {
+            assertEquals("Column name does not match", ((String) it.next()), fields[cnt++]);
+        }
+
+        assertFalse(p.hasNext());
+    }
+
+    public void testAllColumnNamesMissing()
+            throws Exception
+    {
+        String readLine = 
+                ",,,\n0,1,2,3,4,5,6,7,8,9\n";
+
+        String [] fields = { "UNKNOWNFIELD1", "UNKNOWNFIELD2", "UNKNOWNFIELD3", "UNKNOWNFIELD4", };
+        int [] values = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
+
+        Reader myReader = new StringReader(readLine);
+
+        List fieldNames = Arrays.asList(fields);
+
+        DataStreamParser p = new CSVParser(myReader, null, "UTF-8");
+
+        assertTrue(p.hasNext());
+
+        p.readColumnNames();
+
+        assertEquals("Number of columns is not the number of set fields", fieldNames.size(), p.getColumnNames().size());
+        int cnt = 0;
+        for (Iterator it = p.getColumnNames().iterator(); it.hasNext(); )
+        {
+            assertEquals("Column name does not match", ((String) it.next()), fields[cnt++]);
+        }
+
+        assertTrue(p.hasNext());
+
+        ValueParser vp = (ValueParser) p.next();
+
+        assertEquals("Wrong character encoding set", "UTF-8", vp.getCharacterEncoding());
+
+        assertFalse(p.hasNext());
+
+        for (int i = 0; i < fields.length; i ++)
+        {
+            assertEquals("Value does not match", Integer.toString(values[i]), vp.getString(fields[i]));
+            assertEquals("Value does not match", values[i], vp.getInt(fields[i]));
+        }
     }
 
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: turbine-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: turbine-dev-help@jakarta.apache.org