- const wxTreeItemId root = m_tree->AddRoot("root");
- const wxTreeItemId child1 = m_tree->AppendItem(root, "child1");
- const wxTreeItemId child2 = m_tree->AppendItem(root, "child2");
- const wxTreeItemId grandchild = m_tree->AppendItem(child1, "grandchild");
-
- CPPUNIT_ASSERT( m_tree->HasChildren(root) );
- CPPUNIT_ASSERT( m_tree->HasChildren(child1) );
- CPPUNIT_ASSERT( !m_tree->HasChildren(child2) );
- CPPUNIT_ASSERT( !m_tree->HasChildren(grandchild) );
+ CPPUNIT_ASSERT( m_tree->HasChildren(m_root) );
+ CPPUNIT_ASSERT( m_tree->HasChildren(m_child1) );
+ CPPUNIT_ASSERT( !m_tree->HasChildren(m_child2) );
+ CPPUNIT_ASSERT( !m_tree->HasChildren(m_grandchild) );
+}
+
+void TreeCtrlTestCase::SelectItemSingle()
+{
+ // this test should be only ran in single-selection control
+ CPPUNIT_ASSERT( !m_tree->HasFlag(wxTR_MULTIPLE) );
+
+ // initially nothing is selected
+ CPPUNIT_ASSERT( !m_tree->IsSelected(m_child1) );
+
+ // selecting an item should make it selected
+ m_tree->SelectItem(m_child1);
+ CPPUNIT_ASSERT( m_tree->IsSelected(m_child1) );
+
+ // selecting it again shouldn't change anything
+ m_tree->SelectItem(m_child1);
+ CPPUNIT_ASSERT( m_tree->IsSelected(m_child1) );
+
+ // selecting another item should switch the selection to it
+ m_tree->SelectItem(m_child2);
+ CPPUNIT_ASSERT( !m_tree->IsSelected(m_child1) );
+ CPPUNIT_ASSERT( m_tree->IsSelected(m_child2) );
+
+ // selecting it again still shouldn't change anything
+ m_tree->SelectItem(m_child2);
+ CPPUNIT_ASSERT( !m_tree->IsSelected(m_child1) );
+ CPPUNIT_ASSERT( m_tree->IsSelected(m_child2) );
+
+ // deselecting an item should remove the selection entirely
+ m_tree->UnselectItem(m_child2);
+ CPPUNIT_ASSERT( !m_tree->IsSelected(m_child1) );
+ CPPUNIT_ASSERT( !m_tree->IsSelected(m_child2) );
+}
+
+void TreeCtrlTestCase::SelectItemMulti()
+{
+ // this test should be only ran in multi-selection control
+ CPPUNIT_ASSERT( m_tree->HasFlag(wxTR_MULTIPLE) );
+
+ // initially nothing is selected
+ CPPUNIT_ASSERT( !m_tree->IsSelected(m_child1) );
+
+ // selecting an item should make it selected
+ m_tree->SelectItem(m_child1);
+ CPPUNIT_ASSERT( m_tree->IsSelected(m_child1) );
+
+ // selecting it again shouldn't change anything
+ m_tree->SelectItem(m_child1);
+ CPPUNIT_ASSERT( m_tree->IsSelected(m_child1) );
+
+ // selecting another item shouldn't deselect the previously selected one
+ m_tree->SelectItem(m_child2);
+ CPPUNIT_ASSERT( m_tree->IsSelected(m_child1) );
+ CPPUNIT_ASSERT( m_tree->IsSelected(m_child2) );
+
+ // selecting it again still shouldn't change anything
+ m_tree->SelectItem(m_child2);
+ CPPUNIT_ASSERT( m_tree->IsSelected(m_child1) );
+ CPPUNIT_ASSERT( m_tree->IsSelected(m_child2) );
+
+ // deselecting one of the items should leave the others selected
+ m_tree->UnselectItem(m_child1);
+ CPPUNIT_ASSERT( !m_tree->IsSelected(m_child1) );
+ CPPUNIT_ASSERT( m_tree->IsSelected(m_child2) );