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.JTree; 019 import javax.swing.tree.DefaultMutableTreeNode; 020 import javax.swing.tree.DefaultTreeModel; 021 022 import junit.framework.TestCase; 023 024 import org.springframework.richclient.settings.Settings; 025 import org.springframework.richclient.settings.TransientSettings; 026 027 /** 028 * @author Peter De Bruycker 029 */ 030 public class TreeMementoTests extends TestCase { 031 032 private JTree tree; 033 private TreeMemento memento; 034 035 public void testConstructor() { 036 try { 037 new WindowMemento(null); 038 fail("Should throw IllegalArgumentException"); 039 } catch (IllegalArgumentException e) { 040 // test passes 041 } 042 043 try { 044 tree.setName(null); 045 new TreeMemento(tree, ""); 046 fail("Should throw IllegalArgumentException: tree has no name"); 047 } catch (Exception e) { 048 // test passes 049 } 050 051 tree.setName("tree0"); 052 053 TreeMemento memento = new TreeMemento(tree); 054 assertEquals(tree, memento.getTree()); 055 assertEquals("tree0", memento.getKey()); 056 057 memento = new TreeMemento(tree, "key"); 058 assertEquals(tree, memento.getTree()); 059 assertEquals("key", memento.getKey()); 060 } 061 062 public void testSaveSelectionState() { 063 TransientSettings settings = new TransientSettings(); 064 065 memento.saveSelectionState(settings); 066 assertFalse(settings.contains("tree.selectedRows")); 067 068 tree.setSelectionRows(new int[] { 0, 2, 3 }); 069 memento.saveSelectionState(settings); 070 assertTrue(settings.contains("tree.selectedRows")); 071 assertEquals("0,2-3", settings.getString("tree.selectedRows")); 072 } 073 074 public void testRestoreSelectionState() { 075 Settings settings = new TransientSettings(); 076 077 settings.setString("tree.selectedRows", "0,2-3"); 078 memento.restoreSelectionState(settings); 079 080 assertEquals(5, tree.getRowCount()); 081 assertTrue(tree.isRowSelected(0)); 082 assertFalse(tree.isRowSelected(1)); 083 assertTrue(tree.isRowSelected(2)); 084 assertTrue(tree.isRowSelected(3)); 085 assertFalse(tree.isRowSelected(4)); 086 } 087 088 public void testSaveExpansionState() { 089 Settings settings = new TransientSettings(); 090 091 memento.saveExpansionState(settings); 092 assertTrue(settings.contains("tree.expansionState")); 093 assertEquals("1,0,0,0,0", settings.getString("tree.expansionState")); 094 095 // expand child2 096 tree.expandRow(2); 097 098 memento.saveExpansionState(settings); 099 assertTrue(settings.contains("tree.expansionState")); 100 assertEquals("1,0,1,0,0,0,0", settings.getString("tree.expansionState")); 101 } 102 103 public void testRestoreExpansionState() { 104 Settings settings = new TransientSettings(); 105 settings.setString("tree.expansionState", "1,0,1,0,0,0,0"); 106 107 memento.restoreExpansionState(settings); 108 109 assertEquals(7, tree.getRowCount()); 110 assertTrue(tree.isExpanded(0)); 111 assertFalse(tree.isExpanded(1)); 112 assertTrue(tree.isExpanded(2)); 113 assertFalse(tree.isExpanded(3)); 114 assertFalse(tree.isExpanded(4)); 115 assertFalse(tree.isExpanded(5)); 116 assertFalse(tree.isExpanded(6)); 117 } 118 119 public void testRestoreExpansionStateWithInvalidSettingsString() { 120 Settings settings = new TransientSettings(); 121 settings.setString("key.expansionState", "invalidPref"); 122 123 memento.restoreExpansionState(settings); 124 125 assertEquals(5, tree.getRowCount()); 126 assertTrue(tree.isExpanded(0)); 127 assertFalse(tree.isExpanded(1)); 128 assertFalse(tree.isExpanded(2)); 129 assertFalse(tree.isExpanded(3)); 130 assertFalse(tree.isExpanded(4)); 131 } 132 133 protected void setUp() throws Exception { 134 DefaultMutableTreeNode root = new DefaultMutableTreeNode("root"); 135 136 DefaultMutableTreeNode child1 = new DefaultMutableTreeNode("child1"); 137 child1.add(new DefaultMutableTreeNode("child1.1")); 138 root.add(child1); 139 140 DefaultMutableTreeNode child2 = new DefaultMutableTreeNode("child2"); 141 child2.add(new DefaultMutableTreeNode("child2.1")); 142 child2.add(new DefaultMutableTreeNode("child2.2")); 143 root.add(child2); 144 root.add(new DefaultMutableTreeNode("child3")); 145 root.add(new DefaultMutableTreeNode("child4")); 146 147 DefaultTreeModel treeModel = new DefaultTreeModel(root); 148 tree = new JTree(treeModel); 149 150 memento = new TreeMemento(tree, "tree"); 151 } 152 }