diff options
| author | Serhiy Storchaka <storchaka@gmail.com> | 2014-06-02 21:32:49 +0300 | 
|---|---|---|
| committer | Serhiy Storchaka <storchaka@gmail.com> | 2014-06-02 21:32:49 +0300 | 
| commit | 07bcf14b602863c3955e66a7874e750dd67a91df (patch) | |
| tree | bc9a6d60d42bb629209bc9f1d87511fa21dba4d7 | |
| parent | 5631e1f38ddb18adbbc7a4fecc99e7343573eafb (diff) | |
| parent | fc14ad996237839e601d08ac05bd6fe7838a8502 (diff) | |
| download | cpython-git-07bcf14b602863c3955e66a7874e750dd67a91df.tar.gz | |
Issue #6181: Fixed minor bugs in tkinter.Listbox methods:
bbox(), curselection() and get().
| -rw-r--r-- | Lib/tkinter/__init__.py | 15 | ||||
| -rw-r--r-- | Lib/tkinter/test/test_tkinter/test_widgets.py | 52 | ||||
| -rw-r--r-- | Lib/tkinter/test/test_ttk/test_widgets.py | 12 | ||||
| -rw-r--r-- | Lib/tkinter/test/widget_tests.py | 10 | 
4 files changed, 60 insertions, 29 deletions
| diff --git a/Lib/tkinter/__init__.py b/Lib/tkinter/__init__.py index a9c8ce0c6f..d37c39fe4e 100644 --- a/Lib/tkinter/__init__.py +++ b/Lib/tkinter/__init__.py @@ -2591,22 +2591,19 @@ class Listbox(Widget, XView, YView):      def activate(self, index):          """Activate item identified by INDEX."""          self.tk.call(self._w, 'activate', index) -    def bbox(self, *args): +    def bbox(self, index):          """Return a tuple of X1,Y1,X2,Y2 coordinates for a rectangle -        which encloses the item identified by index in ARGS.""" -        return self._getints( -            self.tk.call((self._w, 'bbox') + args)) or None +        which encloses the item identified by the given index.""" +        return self._getints(self.tk.call(self._w, 'bbox', index)) or None      def curselection(self): -        """Return list of indices of currently selected item.""" -        # XXX Ought to apply self._getints()... -        return self.tk.splitlist(self.tk.call( -            self._w, 'curselection')) +        """Return the indices of currently selected item.""" +        return self._getints(self.tk.call(self._w, 'curselection')) or ()      def delete(self, first, last=None):          """Delete items from FIRST to LAST (included)."""          self.tk.call(self._w, 'delete', first, last)      def get(self, first, last=None):          """Get list of items from FIRST to LAST (included).""" -        if last: +        if last is not None:              return self.tk.splitlist(self.tk.call(                  self._w, 'get', first, last))          else: diff --git a/Lib/tkinter/test/test_tkinter/test_widgets.py b/Lib/tkinter/test/test_tkinter/test_widgets.py index bac2755fed..310fa92084 100644 --- a/Lib/tkinter/test/test_tkinter/test_widgets.py +++ b/Lib/tkinter/test/test_tkinter/test_widgets.py @@ -467,11 +467,7 @@ class SpinboxTest(EntryTest, unittest.TestCase):      def test_bbox(self):          widget = self.create() -        bbox = widget.bbox(0) -        self.assertEqual(len(bbox), 4) -        for item in bbox: -            self.assertIsInstance(item, int) - +        self.assertIsBoundingBox(widget.bbox(0))          self.assertRaises(tkinter.TclError, widget.bbox, 'noindex')          self.assertRaises(tkinter.TclError, widget.bbox, None)          self.assertRaises(TypeError, widget.bbox) @@ -624,11 +620,7 @@ class TextTest(AbstractWidgetTest, unittest.TestCase):      def test_bbox(self):          widget = self.create() -        bbox = widget.bbox('1.1') -        self.assertEqual(len(bbox), 4) -        for item in bbox: -            self.assertIsInstance(item, int) - +        self.assertIsBoundingBox(widget.bbox('1.1'))          self.assertIsNone(widget.bbox('end'))          self.assertRaises(tkinter.TclError, widget.bbox, 'noindex')          self.assertRaises(tkinter.TclError, widget.bbox, None) @@ -785,6 +777,46 @@ class ListboxTest(AbstractWidgetTest, unittest.TestCase):      def test_itemconfigure_selectforeground(self):          self.check_itemconfigure('selectforeground', '#654321') +    def test_box(self): +        lb = self.create() +        lb.insert(0, *('el%d' % i for i in range(8))) +        lb.pack() +        self.assertIsBoundingBox(lb.bbox(0)) +        self.assertIsNone(lb.bbox(-1)) +        self.assertIsNone(lb.bbox(10)) +        self.assertRaises(TclError, lb.bbox, 'noindex') +        self.assertRaises(TclError, lb.bbox, None) +        self.assertRaises(TypeError, lb.bbox) +        self.assertRaises(TypeError, lb.bbox, 0, 1) + +    def test_curselection(self): +        lb = self.create() +        lb.insert(0, *('el%d' % i for i in range(8))) +        lb.selection_clear(0, tkinter.END) +        lb.selection_set(2, 4) +        lb.selection_set(6) +        self.assertEqual(lb.curselection(), (2, 3, 4, 6)) +        self.assertRaises(TypeError, lb.curselection, 0) + +    def test_get(self): +        lb = self.create() +        lb.insert(0, *('el%d' % i for i in range(8))) +        self.assertEqual(lb.get(0), 'el0') +        self.assertEqual(lb.get(3), 'el3') +        self.assertEqual(lb.get('end'), 'el7') +        self.assertEqual(lb.get(8), '') +        self.assertEqual(lb.get(-1), '') +        self.assertEqual(lb.get(3, 5), ('el3', 'el4', 'el5')) +        self.assertEqual(lb.get(5, 'end'), ('el5', 'el6', 'el7')) +        self.assertEqual(lb.get(5, 0), ()) +        self.assertEqual(lb.get(0, 0), ('el0',)) +        self.assertRaises(TclError, lb.get, 'noindex') +        self.assertRaises(TclError, lb.get, None) +        self.assertRaises(TypeError, lb.get) +        self.assertRaises(TclError, lb.get, 'end', 'noindex') +        self.assertRaises(TypeError, lb.get, 1, 2, 3) +        self.assertRaises(TclError, lb.get, 2.4) +  @add_standard_options(PixelSizeTests, StandardOptionsTests)  class ScaleTest(AbstractWidgetTest, unittest.TestCase): diff --git a/Lib/tkinter/test/test_ttk/test_widgets.py b/Lib/tkinter/test/test_ttk/test_widgets.py index 3ac14be6d5..41927ddd74 100644 --- a/Lib/tkinter/test/test_ttk/test_widgets.py +++ b/Lib/tkinter/test/test_ttk/test_widgets.py @@ -460,10 +460,7 @@ class EntryTest(AbstractWidgetTest, unittest.TestCase):      def test_bbox(self): -        self.assertEqual(len(self.entry.bbox(0)), 4) -        for item in self.entry.bbox(0): -            self.assertIsInstance(item, int) - +        self.assertIsBoundingBox(self.entry.bbox(0))          self.assertRaises(tkinter.TclError, self.entry.bbox, 'noindex')          self.assertRaises(tkinter.TclError, self.entry.bbox, None) @@ -1216,12 +1213,7 @@ class TreeviewTest(AbstractWidgetTest, unittest.TestCase):          self.assertTrue(children)          bbox = self.tv.bbox(children[0]) -        self.assertEqual(len(bbox), 4) -        self.assertIsInstance(bbox, tuple) -        for item in bbox: -            if not isinstance(item, int): -                self.fail("Invalid bounding box: %s" % bbox) -                break +        self.assertIsBoundingBox(bbox)          # compare width in bboxes          self.tv['columns'] = ['test'] diff --git a/Lib/tkinter/test/widget_tests.py b/Lib/tkinter/test/widget_tests.py index d983acc210..26bf162556 100644 --- a/Lib/tkinter/test/widget_tests.py +++ b/Lib/tkinter/test/widget_tests.py @@ -202,6 +202,16 @@ class AbstractWidgetTest:      def checkVariableParam(self, widget, name, var):          self.checkParam(widget, name, var, conv=str) +    def assertIsBoundingBox(self, bbox): +        self.assertIsNotNone(bbox) +        self.assertIsInstance(bbox, tuple) +        if len(bbox) != 4: +            self.fail('Invalid bounding box: %r' % (bbox,)) +        for item in bbox: +            if not isinstance(item, int): +                self.fail('Invalid bounding box: %r' % (bbox,)) +                break +  class StandardOptionsTests:      STANDARD_OPTIONS = ( | 
