1   /*
2    * Copyright 2002-2004 the original author or authors.
3    * 
4    * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5    * use this file except in compliance with the License. You may obtain a copy of
6    * the License at
7    * 
8    * http://www.apache.org/licenses/LICENSE-2.0
9    * 
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12   * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13   * License for the specific language governing permissions and limitations under
14   * the License.
15   */
16  package org.springframework.richclient.settings.support;
17  
18  import javax.swing.JTree;
19  import javax.swing.tree.DefaultMutableTreeNode;
20  import javax.swing.tree.DefaultTreeModel;
21  
22  import junit.framework.TestCase;
23  
24  import org.springframework.richclient.settings.Settings;
25  import org.springframework.richclient.settings.TransientSettings;
26  
27  /**
28   * @author Peter De Bruycker
29   */
30  public class TreeMementoTests extends TestCase {
31  
32      private JTree tree;
33  	private TreeMemento memento;
34  
35      public void testConstructor() {
36  		try {
37  			new WindowMemento(null);
38  			fail("Should throw IllegalArgumentException");
39  		} catch (IllegalArgumentException e) {
40  			// test passes
41  		}
42  
43  		try {
44  			tree.setName(null);
45  			new TreeMemento(tree, "");
46  			fail("Should throw IllegalArgumentException: tree has no name");
47  		} catch (Exception e) {
48  			// test passes
49  		}
50  
51  		tree.setName("tree0");
52  
53  		TreeMemento memento = new TreeMemento(tree);
54  		assertEquals(tree, memento.getTree());
55  		assertEquals("tree0", memento.getKey());
56  		
57  		memento = new TreeMemento(tree, "key");
58  		assertEquals(tree, memento.getTree());
59  		assertEquals("key", memento.getKey());
60  	}
61      
62      public void testSaveSelectionState() {
63          TransientSettings settings = new TransientSettings();
64  
65          memento.saveSelectionState(settings);
66          assertFalse(settings.contains("tree.selectedRows"));
67  
68          tree.setSelectionRows(new int[] { 0, 2, 3 });
69          memento.saveSelectionState(settings);
70          assertTrue(settings.contains("tree.selectedRows"));
71          assertEquals("0,2-3", settings.getString("tree.selectedRows"));
72      }
73  
74      public void testRestoreSelectionState() {
75          Settings settings = new TransientSettings();
76  
77          settings.setString("tree.selectedRows", "0,2-3");
78          memento.restoreSelectionState(settings);
79  
80          assertEquals(5, tree.getRowCount());
81          assertTrue(tree.isRowSelected(0));
82          assertFalse(tree.isRowSelected(1));
83          assertTrue(tree.isRowSelected(2));
84          assertTrue(tree.isRowSelected(3));
85          assertFalse(tree.isRowSelected(4));
86      }
87  
88      public void testSaveExpansionState() {
89          Settings settings = new TransientSettings();
90  
91          memento.saveExpansionState(settings);
92          assertTrue(settings.contains("tree.expansionState"));
93          assertEquals("1,0,0,0,0", settings.getString("tree.expansionState"));
94  
95          // expand child2
96          tree.expandRow(2);
97  
98          memento.saveExpansionState(settings);
99          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 }