1   /*
2    * Copyright 2002-2004 the original author or authors.
3    * 
4    * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5    * use this file except in compliance with the License. You may obtain a copy of
6    * 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, WITHOUT
12   * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13   * License for the specific language governing permissions and limitations under
14   * the License.
15   */
16  package org.springframework.richclient.settings.support;
17  
18  import javax.swing.JTable;
19  
20  import junit.framework.TestCase;
21  
22  import org.springframework.richclient.settings.TransientSettings;
23  
24  /**
25   * @author Peter De Bruycker
26   */
27  public class TableMementoTests extends TestCase {
28  
29  	private JTable table;
30  
31  	private TableMemento memento;
32  
33  	public void testSaveSelectionRowsWithoutSelection() {
34  		TransientSettings settings = new TransientSettings();
35  		memento.saveSelectedRows(settings);
36  
37  		assertFalse(settings.contains("table.selectedRows"));
38  	}
39  
40  	public void testSaveSelectionRowsWithoutOneRow() {
41  		TransientSettings settings = new TransientSettings();
42  
43  		table.getSelectionModel().setSelectionInterval(1, 1);
44  		memento.saveSelectedRows(settings);
45  		assertTrue(settings.contains("table.selectedRows"));
46  		assertEquals("1", settings.getString("table.selectedRows"));
47  	}
48  
49  	public void testSaveSelectionRowsWithoutTwoRows() {
50  		TransientSettings settings = new TransientSettings();
51  
52  		table.getSelectionModel().setSelectionInterval(0, 0);
53  		table.getSelectionModel().addSelectionInterval(2, 2);
54  		memento.saveSelectedRows(settings);
55  		assertTrue(settings.contains("table.selectedRows"));
56  		assertEquals("0,2", settings.getString("table.selectedRows"));
57  	}
58  
59  	public void testSaveSelectionRowsWithOneInterval() {
60  		TransientSettings settings = new TransientSettings();
61  
62  		table.getSelectionModel().setSelectionInterval(0, 2);
63  		table.getSelectionModel().addSelectionInterval(4, 4);
64  		memento.saveSelectedRows(settings);
65  		assertTrue(settings.contains("table.selectedRows"));
66  		assertEquals("0-2,4", settings.getString("table.selectedRows"));
67  	}
68  
69  	public void testSaveSelectionRowsWithTwoIntervals() {
70  		TransientSettings settings = new TransientSettings();
71  
72  		table.getSelectionModel().setSelectionInterval(0, 1);
73  		table.getSelectionModel().addSelectionInterval(3, 4);
74  		memento.saveSelectedRows(settings);
75  		assertTrue(settings.contains("table.selectedRows"));
76  		assertEquals("0-1,3-4", settings.getString("table.selectedRows"));
77  	}
78  
79  	public void testSaveColumnWidths() {
80  		TransientSettings settings = new TransientSettings();
81  
82  		table.getColumnModel().getColumn(0).setWidth(30);
83  		table.getColumnModel().getColumn(1).setWidth(120);
84  		table.getColumnModel().getColumn(2).setWidth(50);
85  		table.getColumnModel().getColumn(3).setWidth(70);
86  
87  		memento.saveColumnWidths(settings);
88  
89  		assertTrue(settings.contains("table.columnWidths"));
90  		assertEquals("30,120,50,70", settings.getString("table.columnWidths"));
91  	}
92  
93  	public void testRestoreColumnWidths() {
94  		TransientSettings settings = new TransientSettings();
95  		settings.setString("table.columnWidths", "30,120,50,70");
96  
97  		memento.restoreColumnWidths(settings);
98  
99  		assertEquals(30, table.getColumnModel().getColumn(0).getWidth());
100 		assertEquals(120, table.getColumnModel().getColumn(1).getWidth());
101 		assertEquals(50, table.getColumnModel().getColumn(2).getWidth());
102 		assertEquals(70, table.getColumnModel().getColumn(3).getWidth());
103 
104 		assertEquals(30, table.getColumnModel().getColumn(0).getPreferredWidth());
105 		assertEquals(120, table.getColumnModel().getColumn(1).getPreferredWidth());
106 		assertEquals(50, table.getColumnModel().getColumn(2).getPreferredWidth());
107 		assertEquals(70, table.getColumnModel().getColumn(3).getPreferredWidth());
108 	}
109 
110 	public void testRestoreColumnWidthsWithIncorrectColumnCount() {
111 		int width0 = table.getColumnModel().getColumn(0).getWidth();
112 		int width1 = table.getColumnModel().getColumn(1).getWidth();
113 		int width2 = table.getColumnModel().getColumn(2).getWidth();
114 		int width3 = table.getColumnModel().getColumn(3).getWidth();
115 
116 		TransientSettings settings = new TransientSettings();
117 		settings.setString("table.columnWidths", "30,120,50");
118 
119 		memento.restoreColumnWidths(settings);
120 
121 		assertEquals(width0, table.getColumnModel().getColumn(0).getWidth());
122 		assertEquals(width1, table.getColumnModel().getColumn(1).getWidth());
123 		assertEquals(width2, table.getColumnModel().getColumn(2).getWidth());
124 		assertEquals(width3, table.getColumnModel().getColumn(3).getWidth());
125 	}
126 
127 	public void testRestoreColumnWidthsWithIllegalSettingsString() {
128 		int width0 = table.getColumnModel().getColumn(0).getWidth();
129 		int width1 = table.getColumnModel().getColumn(1).getWidth();
130 		int width2 = table.getColumnModel().getColumn(2).getWidth();
131 		int width3 = table.getColumnModel().getColumn(3).getWidth();
132 
133 		TransientSettings settings = new TransientSettings();
134 		settings.setString("table.columnWidths", "illegalPref");
135 
136 		memento.restoreColumnWidths(settings);
137 
138 		assertEquals(width0, table.getColumnModel().getColumn(0).getWidth());
139 		assertEquals(width1, table.getColumnModel().getColumn(1).getWidth());
140 		assertEquals(width2, table.getColumnModel().getColumn(2).getWidth());
141 		assertEquals(width3, table.getColumnModel().getColumn(3).getWidth());
142 	}
143 
144 	public void testSaveColumnOrder() {
145 		TransientSettings settings = new TransientSettings();
146 
147 		table.getColumnModel().moveColumn(0, 2);
148 		table.getColumnModel().moveColumn(3, 1);
149 
150 		memento.saveColumnOrder(settings);
151 
152 		assertTrue(settings.contains("table.columnOrder"));
153 		assertEquals("1,3,2,0", settings.getString("table.columnOrder"));
154 	}
155 
156 	public void testRestoreColumnOrderWithIncorrectColumnCount() {
157 		TransientSettings settings = new TransientSettings();
158 		settings.setString("table.columnOrder", "1,3,2");
159 
160 		memento.restoreColumnOrder(settings);
161 
162 		memento.saveColumnOrder(settings);
163 		assertTrue(settings.contains("table.columnOrder"));
164 		assertEquals("0,1,2,3", settings.getString("table.columnOrder"));
165 	}
166 
167 	/**
168 	 * Still got a bug in it. This was tested under jdk1.3.1 and it worked :-(,
169 	 * switched to jdk1.4.2, and it fails
170 	 */
171 	public void testRestoreColumnOrder() {
172 		TransientSettings settings = new TransientSettings();
173 		settings.setString("table.columnOrder", "0,3,1,2");
174 
175 		memento.restoreColumnOrder(settings);
176 
177 		memento.saveColumnOrder(settings);
178 		assertTrue(settings.contains("table.columnOrder"));
179 		assertEquals("0,3,1,2", settings.getString("table.columnOrder"));
180 	}
181 
182 	public void testRestoreColumnOrderWithIllegalSettingsString() {
183 		TransientSettings settings = new TransientSettings();
184 		settings.setString("table.columnOrder", "illegalPref");
185 
186 		memento.restoreColumnOrder(settings);
187 
188 		memento.saveColumnOrder(settings);
189 		assertTrue(settings.contains("table.columnOrder"));
190 		assertEquals("0,1,2,3", settings.getString("table.columnOrder"));
191 	}
192 
193 	protected void setUp() throws Exception {
194 		table = new JTable(new Object[][] { { "cel(0,0)", "cell(0,1)", "cell(0,2)", "cell(0,3)" },
195 				{ "cell(1,0)", "cell(1,1)", "cell(1,2)", "cell(1,3)" },
196 				{ "cell(2,0)", "cell(2,1)", "cell(2,2)", "cell(2,3)" },
197 				{ "cell(3,0)", "cell(3,1)", "cell(3,2)", "cell(3,3)" },
198 				{ "cell(4,0)", "cell(4,1)", "cell(4,2)", "cell(4,3)" } },
199 				new Object[] { "col0", "col1", "col2", "col3" });
200 		assertEquals(-1, table.getSelectedRow());
201 
202 		memento = new TableMemento(table, "table");
203 	}
204 	
205 	public void testConstructor() {
206 		try {
207 			new TableMemento(null);
208 			fail("Should throw IllegalArgumentException");
209 		} catch (IllegalArgumentException e) {
210 			// test passes
211 		}
212 
213 		try {
214 			table.setName(null);
215 			new TableMemento(table, "");
216 			fail("Should throw IllegalArgumentException: table has no name");
217 		} catch (Exception e) {
218 			// test passes
219 		}
220 
221 		table.setName("table0");
222 
223 		TableMemento memento = new TableMemento(table);
224 		assertEquals(table, memento.getTable());
225 		assertEquals("table0", memento.getKey());
226 		
227 		memento = new TableMemento(table, "key");
228 		assertEquals(table, memento.getTable());
229 		assertEquals("key", memento.getKey());
230 	}
231 }