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.prefs;
17  
18  import static org.junit.Assert.assertEquals;
19  import static org.junit.Assert.assertFalse;
20  import static org.junit.Assert.assertNull;
21  import static org.junit.Assert.assertTrue;
22  import static org.supercsv.prefs.CsvPreference.EXCEL_NORTH_EUROPE_PREFERENCE;
23  import static org.supercsv.prefs.CsvPreference.EXCEL_PREFERENCE;
24  import static org.supercsv.prefs.CsvPreference.STANDARD_PREFERENCE;
25  import static org.supercsv.prefs.CsvPreference.TAB_PREFERENCE;
26  
27  import org.junit.Test;
28  import org.supercsv.encoder.DefaultCsvEncoder;
29  import org.supercsv.quote.AlwaysQuoteMode;
30  import org.supercsv.quote.NormalQuoteMode;
31  
32  /**
33   * Tests the CsvPreference class.
34   * 
35   * @author James Bassett
36   */
37  public class CsvPreferenceTest {
38  	
39  	/**
40  	 * Tests the constant values.
41  	 */
42  	@Test
43  	public void testConstants() {
44  		assertEquals('"', STANDARD_PREFERENCE.getQuoteChar());
45  		assertEquals(',', STANDARD_PREFERENCE.getDelimiterChar());
46  		assertEquals("\r\n", STANDARD_PREFERENCE.getEndOfLineSymbols());
47  		
48  		assertEquals('"', EXCEL_PREFERENCE.getQuoteChar());
49  		assertEquals(',', EXCEL_PREFERENCE.getDelimiterChar());
50  		assertEquals("\n", EXCEL_PREFERENCE.getEndOfLineSymbols());
51  		
52  		assertEquals('"', EXCEL_NORTH_EUROPE_PREFERENCE.getQuoteChar());
53  		assertEquals(';', EXCEL_NORTH_EUROPE_PREFERENCE.getDelimiterChar());
54  		assertEquals("\n", EXCEL_NORTH_EUROPE_PREFERENCE.getEndOfLineSymbols());
55  		
56  		assertEquals('"', TAB_PREFERENCE.getQuoteChar());
57  		assertEquals('\t', TAB_PREFERENCE.getDelimiterChar());
58  		assertEquals("\n", TAB_PREFERENCE.getEndOfLineSymbols());
59  	}
60  	
61  	/**
62  	 * Tests a custom CsvPreference with default optional values.
63  	 */
64  	@Test
65  	public void testCustomPreferenceWithDefaults() {
66  		final CsvPreference custom = new CsvPreference.Builder('"', ',', "\n").build();
67  		assertEquals('"', custom.getQuoteChar());
68  		assertEquals(',', custom.getDelimiterChar());
69  		assertEquals("\n", custom.getEndOfLineSymbols());
70  		assertFalse(custom.isSurroundingSpacesNeedQuotes());
71  		assertNull(custom.getCommentMatcher());
72  		assertTrue(custom.getEncoder() instanceof DefaultCsvEncoder);
73  		assertTrue(custom.getQuoteMode() instanceof NormalQuoteMode);
74  	}
75  	
76  	/**
77  	 * Tests a custom CsvPreference with supplied optional values.
78  	 */
79  	@Test
80  	public void testCustomPreference() {
81  		final CsvPreference custom = new CsvPreference.Builder('"', ',', "\n").surroundingSpacesNeedQuotes(true)
82  			.useEncoder(new DefaultCsvEncoder()).useQuoteMode(new AlwaysQuoteMode()).build();
83  		assertEquals('"', custom.getQuoteChar());
84  		assertEquals(',', custom.getDelimiterChar());
85  		assertEquals("\n", custom.getEndOfLineSymbols());
86  		assertTrue(custom.isSurroundingSpacesNeedQuotes());
87  		assertTrue(custom.getEncoder() instanceof DefaultCsvEncoder);
88  		assertTrue(custom.getQuoteMode() instanceof AlwaysQuoteMode);
89  	}
90  	
91  	/**
92  	 * Tests a custom CsvPreference based on an existing constant with default optional values.
93  	 */
94  	@Test
95  	public void testCustomPreferenceBasedOnExistingWithDefaults() {
96  		final CsvPreference custom = new CsvPreference.Builder(EXCEL_PREFERENCE).build();
97  		assertEquals(EXCEL_PREFERENCE.getQuoteChar(), custom.getQuoteChar());
98  		assertEquals(EXCEL_PREFERENCE.getDelimiterChar(), custom.getDelimiterChar());
99  		assertEquals(EXCEL_PREFERENCE.getEndOfLineSymbols(), custom.getEndOfLineSymbols());
100 		assertEquals(EXCEL_PREFERENCE.isSurroundingSpacesNeedQuotes(), custom.isSurroundingSpacesNeedQuotes());
101 		assertEquals(EXCEL_PREFERENCE.getEncoder(), custom.getEncoder());
102 		assertEquals(EXCEL_PREFERENCE.getQuoteMode(), custom.getQuoteMode());
103 	}
104 	
105 	/**
106 	 * Tests a custom CsvPreference based on an existing constant with supplied optional values.
107 	 */
108 	@Test
109 	public void testCustomPreferenceBasedOnExisting() {
110 		final CsvPreference custom = new CsvPreference.Builder(EXCEL_PREFERENCE).surroundingSpacesNeedQuotes(true)
111 			.useEncoder(new DefaultCsvEncoder()).useQuoteMode(new AlwaysQuoteMode()).build();
112 		assertEquals(EXCEL_PREFERENCE.getQuoteChar(), custom.getQuoteChar());
113 		assertEquals(EXCEL_PREFERENCE.getDelimiterChar(), custom.getDelimiterChar());
114 		assertEquals(EXCEL_PREFERENCE.getEndOfLineSymbols(), custom.getEndOfLineSymbols());
115 		assertTrue(custom.isSurroundingSpacesNeedQuotes());
116 		assertTrue(custom.getEncoder() instanceof DefaultCsvEncoder);
117 		assertTrue(custom.getQuoteMode() instanceof AlwaysQuoteMode);
118 	}
119 	
120 	/**
121 	 * Tests a custom CsvPreference with identical quote and delimiter chars (should throw an exception).
122 	 */
123 	@Test(expected = IllegalArgumentException.class)
124 	public void testCustomPreferenceWithInvalidQuoteAndDelimeterChars() {
125 		new CsvPreference.Builder('|', '|', "\n").build();
126 	}
127 	
128 	/**
129 	 * Tests construction with null end of line symbols (should throw an exception).
130 	 */
131 	@Test(expected = NullPointerException.class)
132 	public void testConstructorWithNullEolSymbols() {
133 		new CsvPreference.Builder('"', ',', null).build();
134 	}
135 	
136 	/**
137 	 * Tests construction with null end of line symbols (should throw an exception).
138 	 */
139 	@Test(expected = NullPointerException.class)
140 	public void testSkipCommentsWithNullCommentMatcher() {
141 		new CsvPreference.Builder(EXCEL_PREFERENCE).skipComments(null).build();
142 	}
143 	
144 	/**
145 	 * Tests construction with null encoder (should throw an exception).
146 	 */
147 	@Test(expected = NullPointerException.class)
148 	public void testUseEncoderWithNull() {
149 		new CsvPreference.Builder(EXCEL_PREFERENCE).useEncoder(null).build();
150 	}
151 	
152 	/**
153 	 * Tests construction with null quote mode (should throw an exception).
154 	 */
155 	@Test(expected = NullPointerException.class)
156 	public void testUseQuoteModeWithNull() {
157 		new CsvPreference.Builder(EXCEL_PREFERENCE).useQuoteMode(null).build();
158 	}
159 }