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;
17  
18  import static org.junit.Assert.assertEquals;
19  
20  import java.util.Arrays;
21  import java.util.Calendar;
22  import java.util.Date;
23  import java.util.List;
24  
25  import org.supercsv.cellprocessor.FmtBool;
26  import org.supercsv.cellprocessor.FmtDate;
27  import org.supercsv.cellprocessor.Optional;
28  import org.supercsv.cellprocessor.ParseBool;
29  import org.supercsv.cellprocessor.ParseDate;
30  import org.supercsv.cellprocessor.ParseInt;
31  import org.supercsv.cellprocessor.ParseLong;
32  import org.supercsv.cellprocessor.ift.CellProcessor;
33  import org.supercsv.mock.CustomerBean;
34  import org.supercsv.mock.CustomerStringBean;
35  import org.supercsv.util.CsvContext;
36  
37  /**
38   * Utility methods and constants for tests.
39   * 
40   * @author James Bassett
41   */
42  public class SuperCsvTestUtils {
43  	
44  	public static final CsvContext ANONYMOUS_CSVCONTEXT = new CsvContext(1, 2, 3);
45  	
46  	/** the complete header for testing */
47  	public static final String[] HEADER = new String[] { "customerNo", "firstName", "lastName", "birthDate",
48  		"mailingAddress", "married", "numberOfKids", "favouriteQuote", "email", "loyaltyPoints" };
49  	public static final String HEADER_CSV = "customerNo,firstName,lastName,birthDate,mailingAddress,married,"
50  		+ "numberOfKids,favouriteQuote,email,loyaltyPoints";
51  	
52  	/** partial header for testing partial reading (only a few columns are mapped) */
53  	public static final String[] PARTIAL_HEADER = new String[] { null, "firstName", "lastName", null, null, null, null,
54  		null, "email", null };
55  	
56  	/** the processors to use for CSV reading tests */
57  	public static final CellProcessor[] READ_PROCESSORS = new CellProcessor[] { null, null, null,
58  		new ParseDate("dd/MM/yyyy"), null, new Optional(new ParseBool()), new Optional(new ParseInt()), null, null,
59  		new ParseLong() };
60  	
61  	/** the processors to use for CSV writing tests */
62  	public static final CellProcessor[] WRITE_PROCESSORS = new CellProcessor[] { null, null, null,
63  		new FmtDate("dd/MM/yyyy"), null, new Optional(new FmtBool("Y", "N")), null, null, null, null };
64  	
65  	// each line in the CSV file and it's corresponding CustomerBean/CustomerStringBeans for testing
66  	public static final String JOHN_CSV = "1,John,Dunbar,13/06/1945,\"1600 Amphitheatre Parkway\r\nMountain View, CA 94043\r\nUnited States\","
67  		+ ",,\"\"\"May the Force be with you.\"\" - Star Wars\",jdunbar@gmail.com,0";
68  	public static final CustomerBean JOHN = new CustomerBean("1", "John", "Dunbar", date(1945, 6, 13),
69  		"1600 Amphitheatre Parkway\nMountain View, CA 94043\nUnited States", null, null,
70  		"\"May the Force be with you.\" - Star Wars", "jdunbar@gmail.com", 0L);
71  	public static final CustomerStringBean JOHN_STRING = new CustomerStringBean(JOHN);
72  	
73  	public static final String BOB_CSV = "2,Bob,Down,25/02/1919,\"1601 Willow Rd.\r\nMenlo Park, CA 94025\r\nUnited States\","
74  		+ "Y,0,\"\"\"Frankly, my dear, I don't give a damn.\"\" - Gone With The Wind\",bobdown@hotmail.com,123456";
75  	public static final CustomerBean BOB = new CustomerBean("2", "Bob", "Down", date(1919, 2, 25),
76  		"1601 Willow Rd.\nMenlo Park, CA 94025\nUnited States", true, 0,
77  		"\"Frankly, my dear, I don't give a damn.\" - Gone With The Wind", "bobdown@hotmail.com", 123456L);
78  	public static final CustomerStringBean BOB_STRING = new CustomerStringBean(BOB);
79  	
80  	public static final String ALICE_CSV = "3,Alice,Wunderland,08/08/1985,\"One Microsoft Way\r\nRedmond, WA 98052-6399\r\nUnited States\","
81  		+ "Y,0,\"\"\"Play it, Sam. Play \"\"As Time Goes By.\"\"\"\" - Casablanca\",throughthelookingglass@yahoo.com,2255887799";
82  	public static final CustomerBean ALICE = new CustomerBean("3", "Alice", "Wunderland", date(1985, 8, 8),
83  		"One Microsoft Way\nRedmond, WA 98052-6399\nUnited States", true, 0,
84  		"\"Play it, Sam. Play \"As Time Goes By.\"\" - Casablanca", "throughthelookingglass@yahoo.com", 2255887799L);
85  	public static final CustomerStringBean ALICE_STRING = new CustomerStringBean(ALICE);
86  	
87  	public static final String BILL_CSV = "4,Bill,Jobs,10/07/1973,\"2701 San Tomas Expressway\r\nSanta Clara, CA 95050\r\nUnited States\","
88  		+ "Y,3,\"\"\"You've got to ask yourself one question: \"\"Do I feel lucky?\"\" Well, do ya, punk?\"\" - Dirty Harry\",billy34@hotmail.com,36";
89  	public static final CustomerBean BILL = new CustomerBean("4", "Bill", "Jobs", date(1973, 7, 10),
90  		"2701 San Tomas Expressway\nSanta Clara, CA 95050\nUnited States", true, 3,
91  		"\"You've got to ask yourself one question: \"Do I feel lucky?\" Well, do ya, punk?\" - Dirty Harry",
92  		"billy34@hotmail.com", 36L);
93  	public static final CustomerStringBean BILL_STRING = new CustomerStringBean(BILL);
94  	
95  	public static final String MIRANDA_CSV = "5,Miranda,Feist,03/01/1999,\"2-4 Rue du Sablon\r\nMorges, 1110\r\nSwitzerland\","
96  		+ ",,\"\"\"You had me at \"\"hello.\"\"\"\" - Jerry Maguire\",miranda_feist@gmail.com,54623";
97  	public static final CustomerBean MIRANDA = new CustomerBean("5", "Miranda", "Feist", date(1999, 1, 3),
98  		"2-4 Rue du Sablon\nMorges, 1110\nSwitzerland", null, null, "\"You had me at \"hello.\"\" - Jerry Maguire",
99  		"miranda_feist@gmail.com", 54623L);
100 	public static final CustomerStringBean MIRANDA_STRING = new CustomerStringBean(MIRANDA);
101 	
102 	public static final String STEVE_CSV = "6,Steve,Gates,31/12/2000,\"701 First Avenue\r\nSunnyvale, CA 94089\r\nUnited States\","
103 		+ "N,0,\"\"\"Gentlemen, you can't fight in here! This is the War Room!\"\" - Dr Strangelove\",stevengates@yahoo.com,1341512";
104 	public static final CustomerBean STEVE = new CustomerBean("6", "Steve", "Gates", date(2000, 12, 31),
105 		"701 First Avenue\nSunnyvale, CA 94089\nUnited States", false, 0,
106 		"\"Gentlemen, you can't fight in here! This is the War Room!\" - Dr Strangelove", "stevengates@yahoo.com",
107 		1341512L);
108 	public static final CustomerStringBean STEVE_STRING = new CustomerStringBean(STEVE);
109 	
110 	public static final String ADA_CSV = "7,Ada,Von Trappe,18/11/1956,\"One Dell Way\r\nRound Rock, TX 78682\r\nUnited States\","
111 		+ ",2,\"\"\"Hasta la vista, baby.\"\" - Terminator 2: Judgement Day\",vonada@gmail.com,0";
112 	public static final CustomerBean ADA = new CustomerBean("7", "Ada", "Von Trappe", date(1956, 11, 18),
113 		"One Dell Way\nRound Rock, TX 78682\nUnited States", null, 2,
114 		"\"Hasta la vista, baby.\" - Terminator 2: Judgement Day", "vonada@gmail.com", 0L);
115 	public static final CustomerStringBean ADA_STRING = new CustomerStringBean(ADA);
116 	
117 	public static final String SERGEI_CSV = "8,Sergei,Denisovich,22/06/1944,\"1 Infinite Loop\r\nCupertino, CA 95014\r\nUnited States\","
118 		+ "Y,,\"\"\"Open the pod bay doors, HAL.\"\" - 2001: A Space Odyssey\",sergei@denisovich.com,229431";
119 	public static final CustomerBean SERGEI = new CustomerBean("8", "Sergei", "Denisovich", date(1944, 6, 22),
120 		"1 Infinite Loop\nCupertino, CA 95014\nUnited States", true, null,
121 		"\"Open the pod bay doors, HAL.\" - 2001: A Space Odyssey", "sergei@denisovich.com", 229431L);
122 	public static final CustomerStringBean SERGEI_STRING = new CustomerStringBean(SERGEI);
123 	
124 	public static final String LARRY_CSV = "9,Larry,Ballmer,01/01/1901,\"1-7-1 Konan\r\nMinato-ku\r\nTokyo, 108-0075\r\nJapan\","
125 		+ "N,0,\"\"\"A martini. Shaken, not stirred.\"\" - Goldfinger\",lazza99@gmail.com,164";
126 	public static final CustomerBean LARRY = new CustomerBean("9", "Larry", "Ballmer", date(1901, 1, 1),
127 		"1-7-1 Konan\nMinato-ku\nTokyo, 108-0075\nJapan", false, 0, "\"A martini. Shaken, not stirred.\" - Goldfinger",
128 		"lazza99@gmail.com", 164L);
129 	public static final CustomerStringBean LARRY_STRING = new CustomerStringBean(LARRY);
130 	
131 	public static final String GRACE_CSV = "10,Grace,Fowler,28/11/2003,\"11-1, Kamitoba Hokotate-cho\r\nMinami-ku\r\nKyoto, 601-8501\r\nJapan\","
132 		+ "N,0,\"\"\"Carpe diem. Seize the day, boys. Make your lives extraordinary.\"\" - Dead Poets Society\",gracie@hotmail.com,168841";
133 	public static final CustomerBean GRACE = new CustomerBean("10", "Grace", "Fowler", date(2003, 11, 28),
134 		"11-1, Kamitoba Hokotate-cho\nMinami-ku\nKyoto, 601-8501\nJapan", false, 0,
135 		"\"Carpe diem. Seize the day, boys. Make your lives extraordinary.\" - Dead Poets Society",
136 		"gracie@hotmail.com", 168841L);
137 	public static final CustomerStringBean GRACE_STRING = new CustomerStringBean(GRACE);
138 	
139 	/**
140 	 * The CSV file to use for testing.
141 	 */
142 	public static final String CSV_FILE = new StringBuilder(HEADER_CSV).append("\r\n").append(JOHN_CSV).append("\r\n")
143 		.append(BOB_CSV).append("\r\n").append(ALICE_CSV).append("\r\n").append(BILL_CSV).append("\r\n")
144 		.append(MIRANDA_CSV).append("\r\n").append(STEVE_CSV).append("\r\n").append(ADA_CSV).append("\r\n")
145 		.append(SERGEI_CSV).append("\r\n").append(LARRY_CSV).append("\r\n").append(GRACE_CSV).append("\r\n").toString();
146 	
147 	/** List of populated customer beans to use for testing */
148 	public static final List<CustomerBean> CUSTOMERS = Arrays.asList(JOHN, BOB, ALICE, BILL, MIRANDA, STEVE, ADA,
149 		SERGEI, LARRY, GRACE);
150 	
151 	/** List of populated customer string beans to use for testing */
152 	public static final List<CustomerStringBean> STRING_CUSTOMERS = Arrays.asList(JOHN_STRING, BOB_STRING,
153 		ALICE_STRING, BILL_STRING, MIRANDA_STRING, STEVE_STRING, ADA_STRING, SERGEI_STRING, LARRY_STRING, GRACE_STRING);
154 	
155 	/**
156 	 * An easy and non-deprecated non-lenient way of creating Date objects.
157 	 * 
158 	 * @param year
159 	 *            the year, e.g. 2007 is year 2007
160 	 * @param month
161 	 *            the month, where 1 == January
162 	 * @param dayOfMonth
163 	 *            the day of the month, where 1 == first day of the month
164 	 * @return a Date object with time set to midnight, ie. hour = 00, minutes = 00, seconds = 00 and milliseconds = 000
165 	 */
166 	public static Date date(final int year, final int month, final int dayOfMonth) {
167 		final Calendar cal = Calendar.getInstance();
168 		cal.setLenient(false);
169 		cal.set(year, month - 1, dayOfMonth, 0, 0, 0);
170 		cal.set(Calendar.MILLISECOND, 0);
171 		return cal.getTime();
172 	}
173 	
174 	/**
175 	 * An easy and non-deprecated non-lenient way of creating Date objects.
176 	 * 
177 	 * @param year
178 	 *            the year, e.g. 2007 is year 2007
179 	 * @param month
180 	 *            the month, where 1 == January
181 	 * @param dayOfMonth
182 	 *            the day of the month, where 1 == first day of the month
183 	 * @param hour
184 	 *            the hour in 24 hour format where 0 == midnight
185 	 * @param minute
186 	 *            is the minute 0-59
187 	 * @param second
188 	 *            is the seconds 0-59
189 	 * @return a Date object with time set to midnight, ie. hour = 00, minutes = 00, seconds = 00 and milliseconds = 000
190 	 */
191 	public static Date date(final int year, final int month, final int dayOfMonth, final int hour, final int minute,
192 		final int second) {
193 		final Calendar cal = Calendar.getInstance();
194 		cal.setLenient(false);
195 		cal.set(year, month - 1, dayOfMonth, hour, minute, second);
196 		cal.set(Calendar.MILLISECOND, 0);
197 		return cal.getTime();
198 	}
199 	
200 	/**
201 	 * Asserts that the processor gives the expected output for the supplied input.
202 	 * 
203 	 * @param processor
204 	 *            the processor
205 	 * @param input
206 	 *            the input
207 	 * @param expectedOutput
208 	 *            the expected output
209 	 */
210 	public static void assertExecution(final CellProcessor processor, final String input, final Object expectedOutput) {
211 		assertEquals(expectedOutput, processor.execute(input, ANONYMOUS_CSVCONTEXT));
212 	}
213 	
214 }