1
2
3
4
5
6
7
8
9
10
11
12
13
14
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
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
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
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
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 }