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 }