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 }