1   
2   
3   
4   
5   
6   
7   
8   
9   
10  
11  
12  
13  
14  
15  
16  package org.supercsv.io.dozer;
17  
18  import static org.junit.Assert.assertEquals;
19  import static org.junit.Assert.fail;
20  
21  import java.io.IOException;
22  import java.io.StringWriter;
23  import java.io.Writer;
24  import java.util.Arrays;
25  
26  import org.dozer.DozerBeanMapper;
27  import org.junit.After;
28  import org.junit.Before;
29  import org.junit.Test;
30  import org.supercsv.cellprocessor.FmtBool;
31  import org.supercsv.cellprocessor.Optional;
32  import org.supercsv.cellprocessor.constraint.NotNull;
33  import org.supercsv.cellprocessor.ift.CellProcessor;
34  import org.supercsv.mock.dozer.Answer;
35  import org.supercsv.mock.dozer.SurveyResponse;
36  import org.supercsv.prefs.CsvPreference;
37  
38  
39  
40  
41  
42  
43  public class CsvDozerBeanWriterTest {
44  	
45  	private static final CsvPreference PREFS = CsvPreference.EXCEL_PREFERENCE;
46  	
47  	private static final String[] FIELD_MAPPING = new String[] { "age", "consentGiven", "answers[0].questionNo",
48  		"answers[0].answer", "answers[1].questionNo", "answers[1].answer", "answers[2].questionNo", "answers[2].answer" };
49  	
50  	private static final CellProcessor[] PROCESSORS = new CellProcessor[] { new NotNull(), new FmtBool("Y", "N"),
51  		new Optional(), new Optional(), new Optional(), new Optional(), new Optional(), new Optional() };
52  	
53  	private static final String CSV = "age,consentGiven,questionNo1,answer1,questionNo2,answer2,questionNo3,answer3\n"
54  		+ "66,true,1,Twelve,2,Albert Einstein?,3,Big Bang Theory\n" + "32,true,1,,2,Superman,3,Stargate\n"
55  		+ "19,true,1,\"Um, how am I supposed to know?\",2,Me,3,\"Last question, can I go now?\"\n" + "4,false,,,,,,\n";
56  	
57  	private static final String PROCESSORS_CSV = "age,consentGiven,questionNo1,answer1,questionNo2,answer2,questionNo3,answer3\n"
58  		+ "66,Y,1,Twelve,2,Albert Einstein?,3,Big Bang Theory\n"
59  		+ "32,Y,1,,2,Superman,3,Stargate\n"
60  		+ "19,Y,1,\"Um, how am I supposed to know?\",2,Me,3,\"Last question, can I go now?\"\n" + "4,N,,,,,,\n";
61  	
62  	private Writer writer;
63  	
64  	private CsvDozerBeanWriter beanWriter;
65  	private CsvDozerBeanWriter beanWriterWithMapper;
66  	private CsvDozerBeanWriter beanWriterWithConfiguredMapper;
67  	private DozerBeanMapper beanMapper;
68  	private DozerBeanMapper configuredBeanMapper;
69  	
70  	private SurveyResponse response1;
71  	private SurveyResponse response2;
72  	private SurveyResponse response3;
73  	private SurveyResponse response4;
74  	
75  	
76  
77  
78  	@Before
79  	public void setUp() {
80  		writer = new StringWriter();
81  		beanWriter = new CsvDozerBeanWriter(writer, PREFS);
82  		
83  		beanMapper = new DozerBeanMapper();
84  		beanWriterWithMapper = new CsvDozerBeanWriter(writer, PREFS, beanMapper);
85  		
86  		configuredBeanMapper = new DozerBeanMapper(Arrays.asList("reference.xml"));
87  		beanWriterWithConfiguredMapper = new CsvDozerBeanWriter(writer, PREFS, configuredBeanMapper);
88  	}
89  	
90  	
91  
92  
93  	@After
94  	public void tearDown() throws IOException {
95  		beanWriter.close();
96  		beanWriterWithMapper.close();
97  		beanWriterWithConfiguredMapper.close();
98  	}
99  	
100 	
101 
102 
103 	@Before
104 	public void createResponses() {
105 		response1 = new SurveyResponse(66, true, Arrays.asList(new Answer(1, "Twelve"), new Answer(2,
106 			"Albert Einstein?"), new Answer(3, "Big Bang Theory")));
107 		response2 = new SurveyResponse(32, true, Arrays.asList(new Answer(1, null), new Answer(2, "Superman"),
108 			new Answer(3, "Stargate")));
109 		response3 = new SurveyResponse(19, true, Arrays.asList(new Answer(1, "Um, how am I supposed to know?"),
110 			new Answer(2, "Me"), new Answer(3, "Last question, can I go now?")));
111 		response4 = new SurveyResponse(4, false, null);
112 	}
113 	
114 	
115 
116 
117 	@Test
118 	public void testWriteWithBeanWriter() throws IOException {
119 		testWrite(beanWriter, false, false);
120 	}
121 	
122 	
123 
124 
125 	@Test
126 	public void testWriteWithBeanWriterUsingProcessors() throws IOException {
127 		testWrite(beanWriter, true, false);
128 	}
129 	
130 	
131 
132 
133 	@Test
134 	public void testWriteWithBeanWriterCustomMapper() throws IOException {
135 		testWrite(beanWriterWithMapper, false, false);
136 	}
137 	
138 	
139 
140 
141 	@Test
142 	public void testWriteWithBeanWriterCustomMapperUsingProcessors() throws IOException {
143 		testWrite(beanWriterWithMapper, true, false);
144 	}
145 	
146 	
147 
148 
149 	@Test
150 	public void testWriteWithBeanWriterConfiguredMapper() throws IOException {
151 		testWrite(beanWriterWithConfiguredMapper, false, true);
152 	}
153 	
154 	
155 
156 
157 	@Test
158 	public void testWriteWithBeanWriterConfiguredMapperUsingProcessors() throws IOException {
159 		testWrite(beanWriterWithConfiguredMapper, true, true);
160 	}
161 	
162 	
163 
164 
165 
166 
167 
168 
169 
170 
171 
172 
173 	private void testWrite(final CsvDozerBeanWriter beanWriter, final boolean useProcessors, final boolean configured)
174 		throws IOException {
175 		
176 		if (!configured){
177 			beanWriter.configureBeanMapping(SurveyResponse.class, FIELD_MAPPING);
178 		}
179 		
180 		beanWriter.writeHeader("age", "consentGiven", "questionNo1", "answer1", "questionNo2", "answer2",
181 			"questionNo3", "answer3");
182 		
183 		if( useProcessors ) {
184 			beanWriter.write(response1, PROCESSORS);
185 			beanWriter.write(response2, PROCESSORS);
186 			beanWriter.write(response3, PROCESSORS);
187 			beanWriter.write(response4, PROCESSORS);
188 			beanWriter.flush();
189 			assertEquals(PROCESSORS_CSV, writer.toString());
190 			
191 		} else {
192 			beanWriter.write(response1);
193 			beanWriter.write(response2);
194 			beanWriter.write(response3);
195 			beanWriter.write(response4);
196 			beanWriter.flush();
197 			assertEquals(CSV, writer.toString());
198 		}
199 		
200 	}
201 	
202 	
203 
204 
205 	@Test
206 	public void testConstructorsWithNulls() {
207 		
208 		
209 		try {
210 			new CsvDozerBeanWriter((Writer) null, PREFS);
211 			fail("should have thrown NullPointerException");
212 		}
213 		catch(NullPointerException e) {}
214 		
215 		
216 		try {
217 			new CsvDozerBeanWriter(writer, null);
218 			fail("should have thrown NullPointerException");
219 		}
220 		catch(NullPointerException e) {}
221 		
222 		
223 		try {
224 			new CsvDozerBeanWriter((Writer) null, PREFS, beanMapper);
225 			fail("should have thrown NullPointerException");
226 		}
227 		catch(NullPointerException e) {}
228 		
229 		
230 		try {
231 			new CsvDozerBeanWriter(writer, null, beanMapper);
232 			fail("should have thrown NullPointerException");
233 		}
234 		catch(NullPointerException e) {}
235 		
236 		
237 		try {
238 			new CsvDozerBeanWriter(writer, PREFS, null);
239 			fail("should have thrown NullPointerException");
240 		}
241 		catch(NullPointerException e) {}
242 		
243 	}
244 	
245 	
246 
247 
248 	@Test(expected = NullPointerException.class)
249 	public void testConfigureBeanMappingWithNullClazz() {
250 		beanWriter.configureBeanMapping(null, FIELD_MAPPING);
251 	}
252 	
253 	
254 
255 
256 	@Test(expected = NullPointerException.class)
257 	public void testConfigureBeanMappingWithNullFieldMapping() {
258 		beanWriter.configureBeanMapping(SurveyResponse.class, null);
259 	}
260 	
261 	
262 
263 
264 	@Test(expected = NullPointerException.class)
265 	public void testConfigureBeanMappingWithNullFieldMappingElement() {
266 		beanWriter.configureBeanMapping(SurveyResponse.class, new String[] { "age", null, "consentGiven" });
267 	}
268 	
269 	
270 
271 
272 	@Test(expected = NullPointerException.class)
273 	public void testWriteWithNullClazz() throws IOException {
274 		beanWriter.write(null);
275 	}
276 	
277 	
278 
279 
280 	@Test(expected = NullPointerException.class)
281 	public void testWriteWithProcessorsWithNullClazz() throws IOException {
282 		beanWriter.write(null, PROCESSORS);
283 	}
284 	
285 	
286 
287 
288 	@Test(expected = NullPointerException.class)
289 	public void testWriteWithProcessorsWithNullProcessors() throws IOException {
290 		beanWriter.write(SurveyResponse.class, (CellProcessor[]) null);
291 	}
292 	
293 }