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    }