001 /*
002 * Copyright 2002-2004 the original author or authors.
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
005 * use this file except in compliance with the License. You may obtain a copy of
006 * the License at
007 *
008 * http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
012 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
013 * License for the specific language governing permissions and limitations under
014 * the License.
015 */
016 package org.springframework.richclient.settings.support;
017
018 import javax.swing.JTable;
019
020 import junit.framework.TestCase;
021
022 import org.springframework.richclient.settings.TransientSettings;
023
024 /**
025 * @author Peter De Bruycker
026 */
027 public class TableMementoTests extends TestCase {
028
029 private JTable table;
030
031 private TableMemento memento;
032
033 public void testSaveSelectionRowsWithoutSelection() {
034 TransientSettings settings = new TransientSettings();
035 memento.saveSelectedRows(settings);
036
037 assertFalse(settings.contains("table.selectedRows"));
038 }
039
040 public void testSaveSelectionRowsWithoutOneRow() {
041 TransientSettings settings = new TransientSettings();
042
043 table.getSelectionModel().setSelectionInterval(1, 1);
044 memento.saveSelectedRows(settings);
045 assertTrue(settings.contains("table.selectedRows"));
046 assertEquals("1", settings.getString("table.selectedRows"));
047 }
048
049 public void testSaveSelectionRowsWithoutTwoRows() {
050 TransientSettings settings = new TransientSettings();
051
052 table.getSelectionModel().setSelectionInterval(0, 0);
053 table.getSelectionModel().addSelectionInterval(2, 2);
054 memento.saveSelectedRows(settings);
055 assertTrue(settings.contains("table.selectedRows"));
056 assertEquals("0,2", settings.getString("table.selectedRows"));
057 }
058
059 public void testSaveSelectionRowsWithOneInterval() {
060 TransientSettings settings = new TransientSettings();
061
062 table.getSelectionModel().setSelectionInterval(0, 2);
063 table.getSelectionModel().addSelectionInterval(4, 4);
064 memento.saveSelectedRows(settings);
065 assertTrue(settings.contains("table.selectedRows"));
066 assertEquals("0-2,4", settings.getString("table.selectedRows"));
067 }
068
069 public void testSaveSelectionRowsWithTwoIntervals() {
070 TransientSettings settings = new TransientSettings();
071
072 table.getSelectionModel().setSelectionInterval(0, 1);
073 table.getSelectionModel().addSelectionInterval(3, 4);
074 memento.saveSelectedRows(settings);
075 assertTrue(settings.contains("table.selectedRows"));
076 assertEquals("0-1,3-4", settings.getString("table.selectedRows"));
077 }
078
079 public void testSaveColumnWidths() {
080 TransientSettings settings = new TransientSettings();
081
082 table.getColumnModel().getColumn(0).setWidth(30);
083 table.getColumnModel().getColumn(1).setWidth(120);
084 table.getColumnModel().getColumn(2).setWidth(50);
085 table.getColumnModel().getColumn(3).setWidth(70);
086
087 memento.saveColumnWidths(settings);
088
089 assertTrue(settings.contains("table.columnWidths"));
090 assertEquals("30,120,50,70", settings.getString("table.columnWidths"));
091 }
092
093 public void testRestoreColumnWidths() {
094 TransientSettings settings = new TransientSettings();
095 settings.setString("table.columnWidths", "30,120,50,70");
096
097 memento.restoreColumnWidths(settings);
098
099 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 }