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.util;
17  
18  import static org.junit.Assert.assertEquals;
19  import static org.junit.Assert.assertFalse;
20  import static org.junit.Assert.assertTrue;
21  
22  import java.util.Arrays;
23  
24  import org.junit.Test;
25  
26  /**
27   * Tests the CsvContext class.
28   * 
29   * @author James Bassett
30   */
31  public class CsvContextTest {
32  	
33  	/**
34  	 * Tests the getters/setters.
35  	 */
36  	@Test
37  	public void testGettersAndSetters() {
38  		final CsvContext context = new CsvContext(0, 0, 0);
39  		context.setLineNumber(1);
40  		context.setRowNumber(2);
41  		context.setColumnNumber(3);
42  		final Object[] rowSource = new Object[] { "one", "two", "three" };
43  		context.setRowSource(Arrays.asList(rowSource));
44  		assertEquals(1, context.getLineNumber());
45  		assertEquals(2, context.getRowNumber());
46  		assertEquals(3, context.getColumnNumber());
47  		assertTrue(Arrays.equals(rowSource, context.getRowSource().toArray()));
48  		
49  	}
50  	
51  	/**
52  	 * Tests the hashCode() method.
53  	 */
54  	@Test
55  	public void testHashCode() {
56  		// two identical contexts with no line source
57  		final CsvContext context1 = new CsvContext(1, 2, 3);
58  		final CsvContext context2 = new CsvContext(1, 2, 3);
59  		assertEquals(context1.hashCode(), context2.hashCode());
60  		
61  		// two identical contexts with a line source
62  		final CsvContext contextWithSource1 = new CsvContext(1, 2, 3);
63  		contextWithSource1.setRowSource(Arrays.asList(new Object[] { "one", "two", "three" }));
64  		final CsvContext contextWithSource2 = new CsvContext(1, 2, 3);
65  		contextWithSource2.setRowSource(Arrays.asList(new Object[] { "one", "two", "three" }));
66  		assertEquals(contextWithSource1.hashCode(), contextWithSource2.hashCode());
67  	}
68  	
69  	/**
70  	 * Tests the toString() method.
71  	 */
72  	@Test
73  	public void testToString() {
74  		
75  		// no line source
76  		final CsvContext context1 = new CsvContext(1, 2, 3);
77  		assertEquals("{lineNo=1, rowNo=2, columnNo=3, rowSource=null}", context1.toString());
78  		
79  		// with line source
80  		final CsvContext context2 = new CsvContext(1, 2, 3);
81  		context2.setRowSource(Arrays.asList(new Object[] { "one", "two", "three" }));
82  		assertEquals("{lineNo=1, rowNo=2, columnNo=3, rowSource=[one, two, three]}", context2.toString());
83  		
84  	}
85  	
86  	/**
87  	 * Tests the equals() method.
88  	 */
89  	@Test
90  	public void testEquals() {
91  		
92  		final CsvContext context = new CsvContext(1, 2, 3);
93  		
94  		final CsvContext contextWithSource = new CsvContext(1, 2, 3);
95  		contextWithSource.setRowSource(Arrays.asList(new Object[] { "one", "two", "three" }));
96  		
97  		// same object
98  		assertTrue(context.equals(context));
99  		
100 		// null
101 		assertFalse(context.equals(null));
102 		
103 		// different class
104 		assertFalse(context.equals("A String, not a CsvContext!"));
105 		
106 		// different column
107 		assertFalse(context.equals(new CsvContext(1, 2, 4)));
108 		
109 		// different row
110 		assertFalse(context.equals(new CsvContext(1, 4, 3)));
111 		
112 		// different line no
113 		assertFalse(context.equals(new CsvContext(4, 2, 3)));
114 		
115 		// only 1 context with line source
116 		assertFalse(context.equals(contextWithSource));
117 		
118 		// same column/line no, but different line sources
119 		final CsvContext contextWithDifferentSource = new CsvContext(1, 2, 3);
120 		contextWithDifferentSource.setRowSource(Arrays.asList(new Object[] { "four", "five", "six" }));
121 		assertFalse(contextWithSource.equals(contextWithDifferentSource));
122 		
123 		// same with no line source
124 		assertTrue(context.equals(new CsvContext(1, 2, 3)));
125 		
126 		// same with line source
127 		final CsvContext same = new CsvContext(1, 2, 3);
128 		same.setRowSource(Arrays.asList(new Object[] { "one", "two", "three" }));
129 		assertTrue(contextWithSource.equals(same));
130 	}
131 	
132 	@Test
133 	public void testCopyConstructor() {
134 		// Test with the mandatory parameters. The rowSource is not set
135 		// to make sure that copy constructor does not dereference a null
136 		CsvContext original = new CsvContext(1,2,3);
137 		CsvContext clone = new CsvContext(original);
138 		assertFalse(original == clone);   // The clone is a new object
139 		assertEquals(original, clone);    // that passes the equals test
140 		
141 		// Test with a homogeneous rowSource
142 		original.setRowSource(Arrays.asList(new Object[] { "four", "five", "six" }));
143 		CsvContext clone2 = new CsvContext(original);
144 		assertFalse(original == clone2);   // The clone is a new object
145 		assertEquals(original, clone2);    // that passes the equals test
146 		
147 		// Corner cases
148 		original.setRowSource(Arrays.asList(new Object[] { null, "five", new Integer(6) }));
149 		CsvContext clone3 = new CsvContext(original);
150 		assertFalse(original == clone3);   // The clone is a new object
151 		assertEquals(original, clone3);    // that passes the equals test
152 	}
153 }