You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by eb...@apache.org on 2012/03/07 19:21:53 UTC

svn commit: r1298033 - in /commons/sandbox/csv/trunk/src: main/java/org/apache/commons/csv/CSVParser.java test/java/org/apache/commons/csv/CSVLexerTest.java test/java/org/apache/commons/csv/CSVParserTest.java

Author: ebourg
Date: Wed Mar  7 18:21:52 2012
New Revision: 1298033

URL: http://svn.apache.org/viewvc?rev=1298033&view=rev
Log:
Extracted the lexer from CSVParser in a distinct class (suggested by Bob Smith)

Added:
    commons/sandbox/csv/trunk/src/test/java/org/apache/commons/csv/CSVLexerTest.java   (with props)
Modified:
    commons/sandbox/csv/trunk/src/main/java/org/apache/commons/csv/CSVParser.java
    commons/sandbox/csv/trunk/src/test/java/org/apache/commons/csv/CSVParserTest.java

Modified: commons/sandbox/csv/trunk/src/main/java/org/apache/commons/csv/CSVParser.java
URL: http://svn.apache.org/viewvc/commons/sandbox/csv/trunk/src/main/java/org/apache/commons/csv/CSVParser.java?rev=1298033&r1=1298032&r2=1298033&view=diff
==============================================================================
--- commons/sandbox/csv/trunk/src/main/java/org/apache/commons/csv/CSVParser.java (original)
+++ commons/sandbox/csv/trunk/src/main/java/org/apache/commons/csv/CSVParser.java Wed Mar  7 18:21:52 2012
@@ -25,7 +25,9 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.NoSuchElementException;
 
-import static org.apache.commons.csv.CSVParser.Token.Type.*;
+import org.apache.commons.csv.CSVLexer.Token;
+
+import static org.apache.commons.csv.CSVLexer.Token.Type.*;
 
 /**
  * Parses CSV files according to the specified configuration.
@@ -59,65 +61,16 @@ import static org.apache.commons.csv.CSV
  */
 public class CSVParser implements Iterable<String[]> {
 
-    /** length of the initial token (content-)buffer */
-    private static final int INITIAL_TOKEN_LENGTH = 50;
-
     /** Immutable empty String array. */
     private static final String[] EMPTY_STRING_ARRAY = new String[0];
 
-    /** The input stream */
-    private final ExtendedBufferedReader in;
-
-    private final CSVFormat format;
-
+    private CSVLexer lexer;
+    
     // the following objects are shared to reduce garbage
     
     /** A record buffer for getLine(). Grows as necessary and is reused. */
     private final List<String> record = new ArrayList<String>();
     private final Token reusableToken = new Token();
-    private final CharBuffer wsBuf = new CharBuffer();
-
-    /**
-     * Token is an internal token representation.
-     * <p/>
-     * It is used as contract between the lexer and the parser.
-     */
-    static class Token {
-
-        enum Type {
-            /** Token has no valid content, i.e. is in its initialized state. */
-            INVALID,
-            
-            /** Token with content, at beginning or in the middle of a line. */
-            TOKEN,
-            
-            /** Token (which can have content) when end of file is reached. */
-            EOF,
-            
-            /** Token with content when end of a line is reached. */
-            EORECORD
-        }
-        
-        /** Token type */
-        Type type = INVALID;
-        
-        /** The content buffer. */
-        CharBuffer content = new CharBuffer(INITIAL_TOKEN_LENGTH);
-        
-        /** Token ready flag: indicates a valid token with content (ready for the parser). */
-        boolean isReady;
-
-        Token reset() {
-            content.clear();
-            type = INVALID;
-            isReady = false;
-            return this;
-        }
-    }
-
-    // ======================================================
-    //  the constructor
-    // ======================================================
 
     /**
      * CSV parser using the default {@link CSVFormat}.
@@ -139,8 +92,7 @@ public class CSVParser implements Iterab
             input = new UnicodeUnescapeReader(input);
         }
         
-        this.in = new ExtendedBufferedReader(input);
-        this.format = format;
+        this.lexer = new CSVLexer(format, new ExtendedBufferedReader(input));
     }
 
     /**
@@ -153,9 +105,6 @@ public class CSVParser implements Iterab
         this(new StringReader(input), format);
     }
 
-    // ======================================================
-    //  the parser
-    // ======================================================
 
     /**
      * Parses the CSV according to the given format and returns the content
@@ -191,7 +140,7 @@ public class CSVParser implements Iterab
         record.clear();
         while (true) {
             reusableToken.reset();
-            nextToken(reusableToken);
+            lexer.nextToken(reusableToken);
             switch (reusableToken.type) {
                 case TOKEN:
                     record.add(reusableToken.content.toString());
@@ -274,12 +223,69 @@ public class CSVParser implements Iterab
      * @return current line number
      */
     public int getLineNumber() {
-        return in.getLineNumber();
+        return lexer.getLineNumber();
     }
+}
 
-    // ======================================================
-    //  the lexer(s)
-    // ======================================================
+
+class CSVLexer {
+
+    /** length of the initial token (content-)buffer */
+    private static final int INITIAL_TOKEN_LENGTH = 50;
+    
+    private final CharBuffer wsBuf = new CharBuffer();
+    
+    private CSVFormat format;
+    
+    /** The input stream */
+    private ExtendedBufferedReader in;
+
+    /**
+     * Token is an internal token representation.
+     * <p/>
+     * It is used as contract between the lexer and the parser.
+     */
+    static class Token {
+
+        enum Type {
+            /** Token has no valid content, i.e. is in its initialized state. */
+            INVALID,
+            
+            /** Token with content, at beginning or in the middle of a line. */
+            TOKEN,
+            
+            /** Token (which can have content) when end of file is reached. */
+            EOF,
+            
+            /** Token with content when end of a line is reached. */
+            EORECORD
+        }
+        
+        /** Token type */
+        Type type = INVALID;
+        
+        /** The content buffer. */
+        CharBuffer content = new CharBuffer(INITIAL_TOKEN_LENGTH);
+        
+        /** Token ready flag: indicates a valid token with content (ready for the parser). */
+        boolean isReady;
+
+        Token reset() {
+            content.clear();
+            type = INVALID;
+            isReady = false;
+            return this;
+        }
+    }
+
+    CSVLexer(CSVFormat format, ExtendedBufferedReader in) {
+        this.format = format;
+        this.in = in;
+    }
+
+    public int getLineNumber() {
+        return in.getLineNumber();
+    }
 
     /**
      * Returns the next token.
@@ -504,19 +510,6 @@ public class CSVParser implements Iterab
     }
 
     /**
-     * Obtain the specified CSV format.
-     *
-     * @return format currently being used
-     */
-    public CSVFormat getFormat() {
-        return this.format;
-    }
-
-    // ======================================================
-    //  Character class checker
-    // ======================================================
-
-    /**
      * @return true if the given char is a whitespace character
      */
     private boolean isWhitespace(int c) {

Added: commons/sandbox/csv/trunk/src/test/java/org/apache/commons/csv/CSVLexerTest.java
URL: http://svn.apache.org/viewvc/commons/sandbox/csv/trunk/src/test/java/org/apache/commons/csv/CSVLexerTest.java?rev=1298033&view=auto
==============================================================================
--- commons/sandbox/csv/trunk/src/test/java/org/apache/commons/csv/CSVLexerTest.java (added)
+++ commons/sandbox/csv/trunk/src/test/java/org/apache/commons/csv/CSVLexerTest.java Wed Mar  7 18:21:52 2012
@@ -0,0 +1,167 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.commons.csv;
+
+import java.io.IOException;
+import java.io.StringReader;
+
+import junit.framework.TestCase;
+import org.apache.commons.csv.CSVLexer.Token;
+
+import static org.apache.commons.csv.CSVLexer.Token.Type.*;
+
+public class CSVLexerTest extends TestCase {
+    
+    private CSVLexer getLexer(String input, CSVFormat format) {
+        return new CSVLexer(format, new ExtendedBufferedReader(new StringReader(input)));
+    }
+
+    private void assertTokenEquals(Token.Type expectedType, String expectedContent, Token token) {
+        assertEquals("Token type", expectedType, token.type);
+        assertEquals("Token content", expectedContent, token.content.toString());
+    }
+    
+    // Single line (without comment)
+    public void testNextToken1() throws IOException {
+        String code = "abc,def, hijk,  lmnop,   qrst,uv ,wxy   ,z , ,";
+        CSVLexer parser = getLexer(code, CSVFormat.DEFAULT);
+        assertTokenEquals(TOKEN, "abc", parser.nextToken(new Token()));
+        assertTokenEquals(TOKEN, "def", parser.nextToken(new Token()));
+        assertTokenEquals(TOKEN, "hijk", parser.nextToken(new Token()));
+        assertTokenEquals(TOKEN, "lmnop", parser.nextToken(new Token()));
+        assertTokenEquals(TOKEN, "qrst", parser.nextToken(new Token()));
+        assertTokenEquals(TOKEN, "uv", parser.nextToken(new Token()));
+        assertTokenEquals(TOKEN, "wxy", parser.nextToken(new Token()));
+        assertTokenEquals(TOKEN, "z", parser.nextToken(new Token()));
+        assertTokenEquals(TOKEN, "", parser.nextToken(new Token()));
+        assertTokenEquals(EOF, "", parser.nextToken(new Token()));
+    }
+
+    // multiline including comments (and empty lines)
+    public void testNextToken2() throws IOException {
+        /*   file:   1,2,3,
+        *           a,b x,c
+        *
+        *           # this is a comment
+        *           d,e,
+        *
+        */
+        String code = "1,2,3,\na,b x,c\n#foo\n\nd,e,\n\n";
+        CSVFormat format = CSVFormat.DEFAULT.withCommentStart('#');
+        
+        CSVLexer parser = getLexer(code, format);
+
+
+        assertTokenEquals(TOKEN, "1", parser.nextToken(new Token()));
+        assertTokenEquals(TOKEN, "2", parser.nextToken(new Token()));
+        assertTokenEquals(TOKEN, "3", parser.nextToken(new Token()));
+        assertTokenEquals(EORECORD, "", parser.nextToken(new Token()));
+        assertTokenEquals(TOKEN, "a", parser.nextToken(new Token()));
+        assertTokenEquals(TOKEN, "b x", parser.nextToken(new Token()));
+        assertTokenEquals(EORECORD, "c", parser.nextToken(new Token()));
+        assertTokenEquals(EORECORD, "", parser.nextToken(new Token()));
+        assertTokenEquals(TOKEN, "d", parser.nextToken(new Token()));
+        assertTokenEquals(TOKEN, "e", parser.nextToken(new Token()));
+        assertTokenEquals(EORECORD, "", parser.nextToken(new Token()));
+        assertTokenEquals(EOF, "", parser.nextToken(new Token()));
+        assertTokenEquals(EOF, "", parser.nextToken(new Token()));
+
+    }
+
+    // simple token with escaping
+    public void testNextToken3() throws IOException {
+        /* file: a,\,,b
+        *       \,,
+        */
+        String code = "a,\\,,b\n\\,,";
+        CSVFormat format = CSVFormat.DEFAULT.withCommentStart('#');
+        CSVLexer parser = getLexer(code, format);
+
+        assertTokenEquals(TOKEN, "a", parser.nextToken(new Token()));
+        // an unquoted single backslash is not an escape char
+        assertTokenEquals(TOKEN, "\\", parser.nextToken(new Token()));
+        assertTokenEquals(TOKEN, "", parser.nextToken(new Token()));
+        assertTokenEquals(EORECORD, "b", parser.nextToken(new Token()));
+        // an unquoted single backslash is not an escape char
+        assertTokenEquals(TOKEN, "\\", parser.nextToken(new Token()));
+        assertTokenEquals(TOKEN, "", parser.nextToken(new Token()));
+        assertTokenEquals(EOF, "", parser.nextToken(new Token()));
+    }
+
+    // encapsulator tokenizer (sinle line)
+    public void testNextToken4() throws IOException {
+        /* file:  a,"foo",b
+        *        a,   " foo",b
+        *        a,"foo "   ,b     // whitespace after closing encapsulator
+        *        a,  " foo " ,b
+        */
+        String code = "a,\"foo\",b\na,   \" foo\",b\na,\"foo \"  ,b\na,  \" foo \"  ,b";
+        CSVLexer parser = getLexer(code, CSVFormat.DEFAULT);
+        assertTokenEquals(TOKEN, "a", parser.nextToken(new Token()));
+        assertTokenEquals(TOKEN, "foo", parser.nextToken(new Token()));
+        assertTokenEquals(EORECORD, "b", parser.nextToken(new Token()));
+        assertTokenEquals(TOKEN, "a", parser.nextToken(new Token()));
+        assertTokenEquals(TOKEN, " foo", parser.nextToken(new Token()));
+        assertTokenEquals(EORECORD, "b", parser.nextToken(new Token()));
+        assertTokenEquals(TOKEN, "a", parser.nextToken(new Token()));
+        assertTokenEquals(TOKEN, "foo ", parser.nextToken(new Token()));
+        assertTokenEquals(EORECORD, "b", parser.nextToken(new Token()));
+        assertTokenEquals(TOKEN, "a", parser.nextToken(new Token()));
+        assertTokenEquals(TOKEN, " foo ", parser.nextToken(new Token()));
+//      assertTokenEquals(EORECORD, "b", parser.nextToken(new Token()));
+        assertTokenEquals(EOF, "b", parser.nextToken(new Token()));
+    }
+
+    // encapsulator tokenizer (multi line, delimiter in string)
+    public void testNextToken5() throws IOException {
+        String code = "a,\"foo\n\",b\n\"foo\n  baar ,,,\"\n\"\n\t \n\"";
+        CSVLexer parser = getLexer(code, CSVFormat.DEFAULT);
+        assertTokenEquals(TOKEN, "a", parser.nextToken(new Token()));
+        assertTokenEquals(TOKEN, "foo\n", parser.nextToken(new Token()));
+        assertTokenEquals(EORECORD, "b", parser.nextToken(new Token()));
+        assertTokenEquals(EORECORD, "foo\n  baar ,,,", parser.nextToken(new Token()));
+        assertTokenEquals(EOF, "\n\t \n", parser.nextToken(new Token()));
+
+    }
+
+    // change delimiters, comment, encapsulater
+    public void testNextToken6() throws IOException {
+        /* file: a;'b and \' more
+        *       '
+        *       !comment;;;;
+        *       ;;
+        */
+        String code = "a;'b and '' more\n'\n!comment;;;;\n;;";
+        CSVFormat format = new CSVFormat(';', '\'', '!');
+        CSVLexer parser = getLexer(code, format);
+        assertTokenEquals(TOKEN, "a", parser.nextToken(new Token()));
+        assertTokenEquals(EORECORD, "b and ' more\n", parser.nextToken(new Token()));
+    }
+
+    // From SANDBOX-153
+    public void testDelimiterIsWhitespace() throws IOException {
+        String code = "one\ttwo\t\tfour \t five\t six";
+        CSVLexer parser = getLexer(code, CSVFormat.TDF);
+        assertTokenEquals(TOKEN, "one", parser.nextToken(new Token()));
+        assertTokenEquals(TOKEN, "two", parser.nextToken(new Token()));
+        assertTokenEquals(TOKEN, "", parser.nextToken(new Token()));
+        assertTokenEquals(TOKEN, "four", parser.nextToken(new Token()));
+        assertTokenEquals(TOKEN, "five", parser.nextToken(new Token()));
+        assertTokenEquals(EOF, "six", parser.nextToken(new Token()));
+    }
+}

Propchange: commons/sandbox/csv/trunk/src/test/java/org/apache/commons/csv/CSVLexerTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/sandbox/csv/trunk/src/test/java/org/apache/commons/csv/CSVLexerTest.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Modified: commons/sandbox/csv/trunk/src/test/java/org/apache/commons/csv/CSVParserTest.java
URL: http://svn.apache.org/viewvc/commons/sandbox/csv/trunk/src/test/java/org/apache/commons/csv/CSVParserTest.java?rev=1298033&r1=1298032&r2=1298033&view=diff
==============================================================================
--- commons/sandbox/csv/trunk/src/test/java/org/apache/commons/csv/CSVParserTest.java (original)
+++ commons/sandbox/csv/trunk/src/test/java/org/apache/commons/csv/CSVParserTest.java Wed Mar  7 18:21:52 2012
@@ -28,8 +28,6 @@ import java.util.NoSuchElementException;
 
 import junit.framework.TestCase;
 
-import static org.apache.commons.csv.CSVParser.Token.Type.*;
-
 /**
  * CSVParserTest
  *
@@ -41,168 +39,7 @@ import static org.apache.commons.csv.CSV
  */
 public class CSVParserTest extends TestCase {
 
-    /**
-     * TestCSVParser.
-     */
-    class TestCSVParser extends CSVParser {
-        /**
-         * Test parser to investigate the type of the internal Token.
-         *
-         * @param in a Reader
-         */
-        TestCSVParser(Reader in) {
-            super(in);
-        }
-
-        TestCSVParser(Reader in, CSVFormat format) {
-            super(in, format);
-        }
-
-        /**
-         * Calls super.nextToken() and prints out a String representation of token
-         * type and content.
-         *
-         * @return String representation of token type and content
-         * @throws IOException like {@link CSVParser#nextToken(Token)}
-         */
-        public String testNextToken() throws IOException {
-            Token t = super.nextToken(new Token());
-            return t.type.name() + ";" + t.content + ";";
-        }
-    }
-
-    // ======================================================
-    //   lexer tests
-    // ======================================================
-
-    // Single line (without comment)
-    public void testNextToken1() throws IOException {
-        String code = "abc,def, hijk,  lmnop,   qrst,uv ,wxy   ,z , ,";
-        TestCSVParser parser = new TestCSVParser(new StringReader(code));
-        assertEquals(TOKEN + ";abc;", parser.testNextToken());
-        assertEquals(TOKEN + ";def;", parser.testNextToken());
-        assertEquals(TOKEN + ";hijk;", parser.testNextToken());
-        assertEquals(TOKEN + ";lmnop;", parser.testNextToken());
-        assertEquals(TOKEN + ";qrst;", parser.testNextToken());
-        assertEquals(TOKEN + ";uv;", parser.testNextToken());
-        assertEquals(TOKEN + ";wxy;", parser.testNextToken());
-        assertEquals(TOKEN + ";z;", parser.testNextToken());
-        assertEquals(TOKEN + ";;", parser.testNextToken());
-        assertEquals(EOF + ";;", parser.testNextToken());
-    }
-
-    // multiline including comments (and empty lines)
-    public void testNextToken2() throws IOException {
-        /*   file:   1,2,3,
-        *           a,b x,c
-        *
-        *           # this is a comment
-        *           d,e,
-        *
-        */
-        String code = "1,2,3,\na,b x,c\n#foo\n\nd,e,\n\n";
-        CSVFormat format = CSVFormat.DEFAULT.withCommentStart('#');
-        
-        TestCSVParser parser = new TestCSVParser(new StringReader(code), format);
-
-
-        assertEquals(TOKEN + ";1;", parser.testNextToken());
-        assertEquals(TOKEN + ";2;", parser.testNextToken());
-        assertEquals(TOKEN + ";3;", parser.testNextToken());
-        assertEquals(EORECORD + ";;", parser.testNextToken());
-        assertEquals(TOKEN + ";a;", parser.testNextToken());
-        assertEquals(TOKEN + ";b x;", parser.testNextToken());
-        assertEquals(EORECORD + ";c;", parser.testNextToken());
-        assertEquals(EORECORD + ";;", parser.testNextToken());
-        assertEquals(TOKEN + ";d;", parser.testNextToken());
-        assertEquals(TOKEN + ";e;", parser.testNextToken());
-        assertEquals(EORECORD + ";;", parser.testNextToken());
-        assertEquals(EOF + ";;", parser.testNextToken());
-        assertEquals(EOF + ";;", parser.testNextToken());
-
-    }
-
-    // simple token with escaping
-    public void testNextToken3() throws IOException {
-        /* file: a,\,,b
-        *       \,,
-        */
-        String code = "a,\\,,b\n\\,,";
-        CSVFormat format = CSVFormat.DEFAULT.withCommentStart('#');
-        TestCSVParser parser = new TestCSVParser(new StringReader(code), format);
-
-        assertEquals(TOKEN + ";a;", parser.testNextToken());
-        // an unquoted single backslash is not an escape char
-        assertEquals(TOKEN + ";\\;", parser.testNextToken());
-        assertEquals(TOKEN + ";;", parser.testNextToken());
-        assertEquals(EORECORD + ";b;", parser.testNextToken());
-        // an unquoted single backslash is not an escape char
-        assertEquals(TOKEN + ";\\;", parser.testNextToken());
-        assertEquals(TOKEN + ";;", parser.testNextToken());
-        assertEquals(EOF + ";;", parser.testNextToken());
-    }
-
-    // encapsulator tokenizer (sinle line)
-    public void testNextToken4() throws IOException {
-        /* file:  a,"foo",b
-        *        a,   " foo",b
-        *        a,"foo "   ,b     // whitespace after closing encapsulator
-        *        a,  " foo " ,b
-        */
-        String code =
-                "a,\"foo\",b\na,   \" foo\",b\na,\"foo \"  ,b\na,  \" foo \"  ,b";
-        TestCSVParser parser = new TestCSVParser(new StringReader(code));
-        assertEquals(TOKEN + ";a;", parser.testNextToken());
-        assertEquals(TOKEN + ";foo;", parser.testNextToken());
-        assertEquals(EORECORD + ";b;", parser.testNextToken());
-        assertEquals(TOKEN + ";a;", parser.testNextToken());
-        assertEquals(TOKEN + "; foo;", parser.testNextToken());
-        assertEquals(EORECORD + ";b;", parser.testNextToken());
-        assertEquals(TOKEN + ";a;", parser.testNextToken());
-        assertEquals(TOKEN + ";foo ;", parser.testNextToken());
-        assertEquals(EORECORD + ";b;", parser.testNextToken());
-        assertEquals(TOKEN + ";a;", parser.testNextToken());
-        assertEquals(TOKEN + "; foo ;", parser.testNextToken());
-//     assertEquals(EORECORD + ";b;", parser.testNextToken());
-        assertEquals(EOF + ";b;", parser.testNextToken());
-    }
-
-    // encapsulator tokenizer (multi line, delimiter in string)
-    public void testNextToken5() throws IOException {
-        String code =
-                "a,\"foo\n\",b\n\"foo\n  baar ,,,\"\n\"\n\t \n\"";
-        TestCSVParser parser = new TestCSVParser(new StringReader(code));
-        assertEquals(TOKEN + ";a;", parser.testNextToken());
-        assertEquals(TOKEN + ";foo\n;", parser.testNextToken());
-        assertEquals(EORECORD + ";b;", parser.testNextToken());
-        assertEquals(EORECORD + ";foo\n  baar ,,,;",
-                parser.testNextToken());
-        assertEquals(EOF + ";\n\t \n;", parser.testNextToken());
-
-    }
-
-    // change delimiters, comment, encapsulater
-    public void testNextToken6() throws IOException {
-        /* file: a;'b and \' more
-        *       '
-        *       !comment;;;;
-        *       ;;
-        */
-        String code = "a;'b and '' more\n'\n!comment;;;;\n;;";
-        TestCSVParser parser = new TestCSVParser(new StringReader(code), new CSVFormat(';', '\'', '!'));
-        assertEquals(TOKEN + ";a;", parser.testNextToken());
-        assertEquals(
-                EORECORD + ";b and ' more\n;",
-                parser.testNextToken());
-    }
-
-
-    // ======================================================
-    //   parser tests
-    // ======================================================
-
-    String code =
-            "a,b,c,d\n"
+    String code = "a,b,c,d\n"
                     + " a , b , 1 2 \n"
                     + "\"foo baar\", b,\n"
                     // + "   \"foo\n,,\n\"\",,\n\\\"\",d,e\n";
@@ -455,8 +292,8 @@ public class CSVParserTest extends TestC
                 + "";
         String[][] res = {
                 {" ", " ", " "},         // 1
-                {" \t ", "  ", " "},         // 2
-                {" / ", " , ", " ,"},         //3
+                {" \t ", "  ", " "},     // 2
+                {" / ", " , ", " ,"},    // 3
         };
 
 
@@ -552,18 +389,6 @@ public class CSVParserTest extends TestC
         assertEquals(3, data.length);
     }
 
-    // From SANDBOX-153
-    public void testDelimiterIsWhitespace() throws IOException {
-        String code = "one\ttwo\t\tfour \t five\t six";
-        TestCSVParser parser = new TestCSVParser(new StringReader(code), CSVFormat.TDF);
-        assertEquals(TOKEN + ";one;", parser.testNextToken());
-        assertEquals(TOKEN + ";two;", parser.testNextToken());
-        assertEquals(TOKEN + ";;", parser.testNextToken());
-        assertEquals(TOKEN + ";four;", parser.testNextToken());
-        assertEquals(TOKEN + ";five;", parser.testNextToken());
-        assertEquals(EOF + ";six;", parser.testNextToken());
-    }
-
     public void testForEach() {
         List<String[]> records = new ArrayList<String[]>();