View Javadoc
1   /*
2    * Copyright 2007 Kasper B. Graversen
3    * 
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    * 
8    *     http://www.apache.org/licenses/LICENSE-2.0
9    * 
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  package org.supercsv.encoder;
17  
18  import static org.junit.Assert.assertEquals;
19  
20  import org.junit.Before;
21  import org.junit.Test;
22  import org.supercsv.encoder.DefaultCsvEncoder;
23  import org.supercsv.prefs.CsvPreference;
24  import org.supercsv.quote.AlwaysQuoteMode;
25  import org.supercsv.util.CsvContext;
26  
27  /**
28   * Tests the DefaultCsvEncoder class.
29   * 
30   * @author James Bassett
31   */
32  public class DefaultCsvEncoderTest {
33  	
34  	private static final CsvPreference PREFS = CsvPreference.STANDARD_PREFERENCE;
35  	private static final CsvPreference SURROUNDING_SPACES_REQUIRE_QUOTES_PREFS = new CsvPreference.Builder(
36  		CsvPreference.STANDARD_PREFERENCE).surroundingSpacesNeedQuotes(true).build();
37  	private static final CsvPreference ALWAYS_QUOTE_PREFS = new CsvPreference.Builder(CsvPreference.STANDARD_PREFERENCE)
38  		.useQuoteMode(new AlwaysQuoteMode()).build();
39  	
40  	private DefaultCsvEncoder csvEncoder;
41  	
42  	/**
43  	 * Sets up the DefaultCsvEncoder.
44  	 */
45  	@Before
46  	public void setUp() {
47  		this.csvEncoder = new DefaultCsvEncoder();
48  	}
49  	
50  	/**
51  	 * Tests the encode() method with various preferences.
52  	 */
53  	@Test
54  	public void testEncode() {
55  		
56  		final CsvContext context = new CsvContext(1, 1, 1);
57  		
58  		final String empty = "";
59  		assertEquals("", csvEncoder.encode(empty, context, PREFS));
60  		assertEquals("", csvEncoder.encode(empty, context, SURROUNDING_SPACES_REQUIRE_QUOTES_PREFS));
61  		assertEquals("\"\"", csvEncoder.encode(empty, context, ALWAYS_QUOTE_PREFS));
62  		
63  		final String space = " ";
64  		assertEquals(" ", csvEncoder.encode(space, context, PREFS));
65  		assertEquals("\" \"", csvEncoder.encode(space, context, SURROUNDING_SPACES_REQUIRE_QUOTES_PREFS));
66  		assertEquals("\" \"", csvEncoder.encode(space, context, ALWAYS_QUOTE_PREFS));
67  		
68  		final String leadingSpace = " leading space";
69  		assertEquals(leadingSpace, csvEncoder.encode(leadingSpace, context, PREFS));
70  		assertEquals("\" leading space\"",
71  			csvEncoder.encode(leadingSpace, context, SURROUNDING_SPACES_REQUIRE_QUOTES_PREFS));
72  		assertEquals("\" leading space\"", csvEncoder.encode(leadingSpace, context, ALWAYS_QUOTE_PREFS));
73  		
74  		final String trailingSpace = "trailing space ";
75  		assertEquals(trailingSpace, csvEncoder.encode(trailingSpace, context, PREFS));
76  		assertEquals("\"trailing space \"",
77  			csvEncoder.encode(trailingSpace, context, SURROUNDING_SPACES_REQUIRE_QUOTES_PREFS));
78  		assertEquals("\"trailing space \"", csvEncoder.encode(trailingSpace, context, ALWAYS_QUOTE_PREFS));
79  		
80  		final String normal = "just a normal phrase";
81  		assertEquals(normal, csvEncoder.encode(normal, context, PREFS));
82  		assertEquals(normal, csvEncoder.encode(normal, context, SURROUNDING_SPACES_REQUIRE_QUOTES_PREFS));
83  		assertEquals("\"just a normal phrase\"", csvEncoder.encode(normal, context, ALWAYS_QUOTE_PREFS));
84  		
85  		final String comma = "oh look, a comma";
86  		assertEquals("\"oh look, a comma\"", csvEncoder.encode(comma, context, PREFS));
87  		assertEquals("\"oh look, a comma\"", csvEncoder.encode(comma, context, SURROUNDING_SPACES_REQUIRE_QUOTES_PREFS));
88  		assertEquals("\"oh look, a comma\"", csvEncoder.encode(comma, context, ALWAYS_QUOTE_PREFS));
89  		
90  		final String quoted = "\"Watch out for quotes\", he said";
91  		assertEquals("\"\"\"Watch out for quotes\"\", he said\"", csvEncoder.encode(quoted, context, PREFS));
92  		assertEquals("\"\"\"Watch out for quotes\"\", he said\"",
93  			csvEncoder.encode(quoted, context, SURROUNDING_SPACES_REQUIRE_QUOTES_PREFS));
94  		assertEquals("\"\"\"Watch out for quotes\"\", he said\"",
95  			csvEncoder.encode(quoted, context, ALWAYS_QUOTE_PREFS));
96  		
97  		final String twoLines = "text that spans\ntwo lines";
98  		int lineNumber = context.getLineNumber();
99  		assertEquals("\"text that spans\r\ntwo lines\"", csvEncoder.encode(twoLines, context, PREFS));
100 		assertEquals(++lineNumber, context.getLineNumber());
101 		assertEquals("\"text that spans\r\ntwo lines\"",
102 			csvEncoder.encode(twoLines, context, SURROUNDING_SPACES_REQUIRE_QUOTES_PREFS));
103 		assertEquals(++lineNumber, context.getLineNumber());
104 		assertEquals("\"text that spans\r\ntwo lines\"", csvEncoder.encode(twoLines, context, ALWAYS_QUOTE_PREFS));
105 		assertEquals(++lineNumber, context.getLineNumber());
106 		
107 		final String quotesTwoLines = "text \"with quotes\" that spans\ntwo lines";
108 		assertEquals("\"text \"\"with quotes\"\" that spans\r\ntwo lines\"",
109 			csvEncoder.encode(quotesTwoLines, context, PREFS));
110 		assertEquals(++lineNumber, context.getLineNumber());
111 		assertEquals("\"text \"\"with quotes\"\" that spans\r\ntwo lines\"",
112 			csvEncoder.encode(quotesTwoLines, context, SURROUNDING_SPACES_REQUIRE_QUOTES_PREFS));
113 		assertEquals(++lineNumber, context.getLineNumber());
114 		assertEquals("\"text \"\"with quotes\"\" that spans\r\ntwo lines\"",
115 			csvEncoder.encode(quotesTwoLines, context, ALWAYS_QUOTE_PREFS));
116 		assertEquals(++lineNumber, context.getLineNumber());
117 	}
118 	
119 }