Author: jprantan
Date: Fri Feb 13 04:21:50 2009
New Revision: 51

Added:
   trunk/utest/test_ui_tree.py
Modified:
   trunk/src/mabot/ui/tree.py

Log:
Implementation and tests for issue 21.

Modified: trunk/src/mabot/ui/tree.py
==============================================================================
--- trunk/src/mabot/ui/tree.py  (original)
+++ trunk/src/mabot/ui/tree.py  Fri Feb 13 04:21:50 2009
@@ -46,7 +46,7 @@

     def drawtext(self):
self.label.update_foreground(get_status_color(self.item.model_item))
-        TreeWidget.TreeNode.drawtext(self)
+        TreeWidget.TreeNode.drawtext(self)


 class ForeGroundLabel(Label):
@@ -67,9 +67,9 @@

     def __init__(self, item):
         self.model_item = item
-        self.label = self.model_item.name
         self.children = self._get_children()
-
+        self.label = self._get_label()
+
     def GetText(self):
         return self.label

@@ -83,6 +83,9 @@
 class SuiteTreeItem(_RobotTreeItem):

     def _get_children(self):
+        if self._only_one_visible_folder_suite_child(self.model_item):
+ visible_suite = [s for s in self.model_item.suites if s.visible ][0]
+            return SuiteTreeItem(visible_suite)._get_children()
         children = []
         for suite in self.model_item.suites:
             if suite.visible:
@@ -93,24 +96,42 @@
         return children

     def GetIconName(self):
-        if len(self.model_item.tests) == 0:
-            return 'dir_suite'
-        return 'file_suite'
+        if self.model_item.tests:
+            return 'file_suite'
+        return 'dir_suite'
+
+    def _only_one_visible_folder_suite_child(self, item):
+        return len([s for s in item.suites if s.visible ]) == 1 \
+               and not item.suites[0].tests
+
+    def _get_label(self):
+        names = []
+        self._get_suite_names_with_one_suite_child(self.model_item, names)
+        return '/'.join(names)
+
+    def _get_suite_names_with_one_suite_child(self, item, names):
+        names.append(item.name)
+        if self._only_one_visible_folder_suite_child(item):
+ return self._get_suite_names_with_one_suite_child(item.suites[0], names)
+        return names
+
+
+class _AbstractTestAndKWItem(_RobotTreeItem):
+
+    def _get_label(self):
+        return self.model_item.name

-
-class TestTreeItem(_RobotTreeItem):
-
-    def _get_children(self):
+    def _get_children(self):
         return [ KeywordTreeItem(kw) for kw in self.model_item.keywords ]

+
+class TestTreeItem(_AbstractTestAndKWItem):
+
     def GetIconName(self):
         return 'test'
-
-
-class KeywordTreeItem(_RobotTreeItem):
-
-    def _get_children(self):
-        return [ KeywordTreeItem(kw) for kw in self.model_item.keywords ]

+
+class KeywordTreeItem(_AbstractTestAndKWItem):
+
     def GetIconName(self):
         return 'keyword'

Added: trunk/utest/test_ui_tree.py
==============================================================================
--- (empty file)
+++ trunk/utest/test_ui_tree.py Fri Feb 13 04:21:50 2009
@@ -0,0 +1,131 @@
+#  Copyright 2008 Nokia Siemens Networks Oyj
+#
+#  Licensed under the Apache License, Version 2.0 (the "License");
+#  you may not use this file except in compliance with the License.
+#  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+#  Unless required by applicable law or agreed to in writing, software
+#  distributed under the License is distributed on an "AS IS" BASIS,
+#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#  See the License for the specific language governing permissions and
+#  limitations under the License.
+
+
+import unittest
+from robot.utils.asserts import *
+
+from mabot.ui import tree
+
+
+class _Mock:
+
+    def __init__(self, name, mediumname, longname, visible):
+        self.parent = None
+        self.name = name
+        if mediumname:
+            self.mediumname = mediumname
+        else:
+            self.mediumname = name
+        if longname:
+            self.longname = longname
+        else:
+            self.longname = name
+        self.visible = visible
+
+class MockSuite(_Mock):
+
+    def __init__(self, name, mediumname=None, longname=None, visible=True,
+                 suites=[], tests=[]):
+        _Mock.__init__(self, name, mediumname, longname, visible)
+        for suite in suites:
+            suite.parent = self
+        self.suites = suites
+        for test in tests:
+            test.parent = self
+        self.tests = tests
+
+class MockTest(_Mock):
+
+    def __init__(self, name, mediumname=None, longname=None,
+                 visible=True, keywords=[]):
+        _Mock.__init__(self, name, mediumname, longname, visible)
+        for kw in keywords:
+            kw.parent = self
+        self.keywords = keywords
+
+class TestTreeSuite(unittest.TestCase):
+
+
+    def test_simple_suite_name(self):
+        suite = MockSuite('Suite')
+        tree_suite = tree.SuiteTreeItem(suite)
+        self.assertEquals(tree_suite.label, 'Suite')
+
+    def test_name_when_test_cases(self):
+        test1 = MockTest('Test1')
+        test2 = MockTest('Test2')
+        suite = MockSuite('Suite1', tests = [test1, test2])
+        tree_suite = tree.SuiteTreeItem(suite)
+        self.assertEquals(tree_suite.label, 'Suite1')
+
+    def test_name_when_test_suites(self):
+        sub1 = MockSuite('SubSuite1')
+        sub2 = MockSuite('SubSuite2')
+        suite = MockSuite('Suite1', suites = [sub1, sub2])
+        tree_suite = tree.SuiteTreeItem(suite)
+        self.assertEquals(tree_suite.label, 'Suite1')
+        self.assertEquals(tree_suite.children[0].label, 'SubSuite1')
+        self.assertEquals(tree_suite.children[1].label, 'SubSuite2')
+
+ def test_collapse_all_suites_with_one_sub_suite_with_one_test_leaf(self):
+        test1 = MockTest('Test1')
+        subsub1 = MockSuite('SubSubSuite1', tests=[test1])
+        sub1 = MockSuite('SubSuite1', suites=[subsub1])
+        suite = MockSuite('Suite1', suites = [sub1])
+        tree_suite = tree.SuiteTreeItem(suite)
+        self.assertEquals(tree_suite.label, 'Suite1/SubSuite1')
+        self.assertEquals(tree_suite.children[0].label, 'SubSubSuite1')
+ self.assertEquals(tree_suite.children[0].children[0].label, 'Test1')
+
+ def test_collapse_all_suites_with_one_sub_suite_with_two_suites_with_test(self):
+        test1 = MockTest('Test1')
+        test2 = MockTest('Test2')
+        subsub1 = MockSuite('SubSubSuite1', tests=[test1])
+        subsub2 = MockSuite('SubSubSuite2', tests=[test2])
+        sub1 = MockSuite('SubSuite1', suites=[subsub1, subsub2])
+        suite = MockSuite('Suite1', suites = [sub1])
+        tree_suite = tree.SuiteTreeItem(suite)
+        self.assertEquals(tree_suite.label, 'Suite1/SubSuite1')
+        self.assertEquals(tree_suite.children[0].label, 'SubSubSuite1')
+
+ def test_collapse_all_suites_with_one_sub_suite_with_one_test_leaf_and_one_non_visible_test_leaf(self):
+        test1 = MockTest('Test1')
+        subsub1 = MockSuite('SubSubSuite1', tests=[test1])
+        sub1 = MockSuite('SubSuite1', suites=[subsub1])
+        test2 = MockTest('Test2', visible=False)
+        subsub2 = MockSuite('SubSubSuite2', visible=False, tests=[test2])
+        sub2 = MockSuite('SubSuite2', visible=False, suites=[subsub2])
+        suite = MockSuite('Suite1', suites = [sub1, sub2])
+        tree_suite = tree.SuiteTreeItem(suite)
+        self.assertEquals(tree_suite.label, 'Suite1/SubSuite1')
+        self.assertEquals(tree_suite.children[0].label, 'SubSubSuite1')
+        self.assertEquals(len(tree_suite.children), 1)
+        self.assertEquals(len(tree_suite.children[0].children), 1)
+
+    def test_get_icon_names_with_file_suite(self):
+        test = MockTest('Test')
+        suite = MockSuite('Suite', tests=[test])
+        tree_suite = tree.SuiteTreeItem(suite)
+        self.assertEquals(tree_suite.GetIconName(), 'file_suite')
+
+    def test_get_icon_names_with_dir_suite(self):
+        subsuite = MockSuite('SubSuite')
+        suite = MockSuite('Suite', suites=[subsuite])
+        tree_suite = tree.SuiteTreeItem(suite)
+        self.assertEquals(tree_suite.GetIconName(), 'dir_suite')
+
+
+if __name__ == "__main__":
+    unittest.main()
\ No newline at end of file

Reply via email to