summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_tkinter/test_text.py
diff options
context:
space:
mode:
authorSerhiy Storchaka <storchaka@gmail.com>2024-02-11 10:43:14 (GMT)
committerGitHub <noreply@github.com>2024-02-11 10:43:14 (GMT)
commitd2c4baa41ff93cd5695c201d40e20a88458ecc26 (patch)
tree9cd066f17f0aabe268312d469f94447a4063d592 /Lib/test/test_tkinter/test_text.py
parent5d2794a16bc1639e6053300c08a78d60526aadf2 (diff)
downloadcpython-d2c4baa41ff93cd5695c201d40e20a88458ecc26.zip
cpython-d2c4baa41ff93cd5695c201d40e20a88458ecc26.tar.gz
cpython-d2c4baa41ff93cd5695c201d40e20a88458ecc26.tar.bz2
gh-97928: Partially restore the behavior of tkinter.Text.count() by default (GH-115031)
By default, it preserves an inconsistent behavior of older Python versions: packs the count into a 1-tuple if only one or none options are specified (including 'update'), returns None instead of 0. Except that setting wantobjects to 0 no longer affects the result. Add a new parameter return_ints: specifying return_ints=True makes Text.count() always returning the single count as an integer instead of a 1-tuple or None.
Diffstat (limited to 'Lib/test/test_tkinter/test_text.py')
-rw-r--r--Lib/test/test_tkinter/test_text.py44
1 files changed, 32 insertions, 12 deletions
diff --git a/Lib/test/test_tkinter/test_text.py b/Lib/test/test_tkinter/test_text.py
index f809c45..b269569 100644
--- a/Lib/test/test_tkinter/test_text.py
+++ b/Lib/test/test_tkinter/test_text.py
@@ -52,27 +52,47 @@ class TextTest(AbstractTkTest, unittest.TestCase):
options = ('chars', 'indices', 'lines',
'displaychars', 'displayindices', 'displaylines',
'xpixels', 'ypixels')
+ self.assertEqual(len(text.count('1.0', 'end', *options, return_ints=True)), 8)
self.assertEqual(len(text.count('1.0', 'end', *options)), 8)
- self.assertEqual(text.count('1.0', 'end', 'chars', 'lines'), (124, 4))
+ self.assertEqual(text.count('1.0', 'end', 'chars', 'lines', return_ints=True),
+ (124, 4))
self.assertEqual(text.count('1.3', '4.5', 'chars', 'lines'), (92, 3))
+ self.assertEqual(text.count('4.5', '1.3', 'chars', 'lines', return_ints=True),
+ (-92, -3))
self.assertEqual(text.count('4.5', '1.3', 'chars', 'lines'), (-92, -3))
+ self.assertEqual(text.count('1.3', '1.3', 'chars', 'lines', return_ints=True),
+ (0, 0))
self.assertEqual(text.count('1.3', '1.3', 'chars', 'lines'), (0, 0))
- self.assertEqual(text.count('1.0', 'end', 'lines'), 4)
- self.assertEqual(text.count('end', '1.0', 'lines'), -4)
- self.assertEqual(text.count('1.3', '1.5', 'lines'), 0)
- self.assertEqual(text.count('1.3', '1.3', 'lines'), 0)
- self.assertEqual(text.count('1.0', 'end'), 124) # 'indices' by default
- self.assertEqual(text.count('1.0', 'end', 'indices'), 124)
+ self.assertEqual(text.count('1.0', 'end', 'lines', return_ints=True), 4)
+ self.assertEqual(text.count('1.0', 'end', 'lines'), (4,))
+ self.assertEqual(text.count('end', '1.0', 'lines', return_ints=True), -4)
+ self.assertEqual(text.count('end', '1.0', 'lines'), (-4,))
+ self.assertEqual(text.count('1.3', '1.5', 'lines', return_ints=True), 0)
+ self.assertEqual(text.count('1.3', '1.5', 'lines'), None)
+ self.assertEqual(text.count('1.3', '1.3', 'lines', return_ints=True), 0)
+ self.assertEqual(text.count('1.3', '1.3', 'lines'), None)
+ # Count 'indices' by default.
+ self.assertEqual(text.count('1.0', 'end', return_ints=True), 124)
+ self.assertEqual(text.count('1.0', 'end'), (124,))
+ self.assertEqual(text.count('1.0', 'end', 'indices', return_ints=True), 124)
+ self.assertEqual(text.count('1.0', 'end', 'indices'), (124,))
self.assertRaises(tkinter.TclError, text.count, '1.0', 'end', 'spam')
self.assertRaises(tkinter.TclError, text.count, '1.0', 'end', '-lines')
- self.assertIsInstance(text.count('1.3', '1.5', 'ypixels'), int)
+ self.assertIsInstance(text.count('1.3', '1.5', 'ypixels', return_ints=True), int)
+ self.assertIsInstance(text.count('1.3', '1.5', 'ypixels'), tuple)
+ self.assertIsInstance(text.count('1.3', '1.5', 'update', 'ypixels', return_ints=True), int)
self.assertIsInstance(text.count('1.3', '1.5', 'update', 'ypixels'), int)
- self.assertEqual(text.count('1.3', '1.3', 'update', 'ypixels'), 0)
+ self.assertEqual(text.count('1.3', '1.3', 'update', 'ypixels', return_ints=True), 0)
+ self.assertEqual(text.count('1.3', '1.3', 'update', 'ypixels'), None)
+ self.assertEqual(text.count('1.3', '1.5', 'update', 'indices', return_ints=True), 2)
self.assertEqual(text.count('1.3', '1.5', 'update', 'indices'), 2)
- self.assertEqual(text.count('1.3', '1.3', 'update', 'indices'), 0)
- self.assertEqual(text.count('1.3', '1.5', 'update'), 2)
- self.assertEqual(text.count('1.3', '1.3', 'update'), 0)
+ self.assertEqual(text.count('1.3', '1.3', 'update', 'indices', return_ints=True), 0)
+ self.assertEqual(text.count('1.3', '1.3', 'update', 'indices'), None)
+ self.assertEqual(text.count('1.3', '1.5', 'update', return_ints=True), 2)
+ self.assertEqual(text.count('1.3', '1.5', 'update'), (2,))
+ self.assertEqual(text.count('1.3', '1.3', 'update', return_ints=True), 0)
+ self.assertEqual(text.count('1.3', '1.3', 'update'), None)
if __name__ == "__main__":