Skip to content

Commit e073e06

Browse files
committed
Achieve 100% statement and branch test coverage
1 parent 5701c0b commit e073e06

File tree

2 files changed

+14
-15
lines changed

2 files changed

+14
-15
lines changed

Lib/_py_grapheme.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -67,10 +67,8 @@ def __repr__(self):
6767
def _get_gcb(cp):
6868
"""Return the Grapheme_Cluster_Break value for a codepoint."""
6969
idx = bisect_right(_GCB_STARTS, cp) - 1
70-
if idx >= 0:
71-
entry = GCB_RANGES[idx]
72-
if cp <= entry[1]:
73-
return entry[2]
70+
if idx >= 0 and cp <= GCB_RANGES[idx][1]:
71+
return GCB_RANGES[idx][2]
7472
# Hangul syllables: LV if (cp - S_BASE) % T_COUNT == 0, else LVT
7573
if _HANGUL_S_BASE <= cp < _HANGUL_S_BASE + _HANGUL_S_COUNT:
7674
if (cp - _HANGUL_S_BASE) % _HANGUL_T_COUNT == 0:

Lib/test/test_unicodedata.py

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1182,17 +1182,6 @@ def test_linebreak_7643(self):
11821182
self.assertEqual(len(lines), 1,
11831183
r"%a should not be a linebreak" % c)
11841184

1185-
def test_segment_object(self):
1186-
segments = list(unicodedata.iter_graphemes('spa\u0300m'))
1187-
self.assertEqual(len(segments), 4, segments)
1188-
segment = segments[2]
1189-
self.assertEqual(segment.start, 2)
1190-
self.assertEqual(segment.end, 4)
1191-
self.assertEqual(str(segment), 'a\u0300')
1192-
self.assertEqual(repr(segment), '<Segment 2:4>')
1193-
self.assertRaises(TypeError, iter, segment)
1194-
self.assertRaises(TypeError, len, segment)
1195-
11961185

11971186
class NormalizationTest(unittest.TestCase):
11981187
@staticmethod
@@ -1384,6 +1373,18 @@ def test_segment_object(self):
13841373
self.assertEqual(segment.start, 2)
13851374
self.assertEqual(segment.end, 4)
13861375
self.assertEqual(str(segment), 'a\u0300')
1376+
self.assertEqual(repr(segment), '<Segment 2:4>')
1377+
self.assertRaises(TypeError, iter, segment)
1378+
self.assertRaises(TypeError, len, segment)
1379+
1380+
def test_grapheme_break_fsm_edges(self):
1381+
graphemes = self._graphemes
1382+
# ExtPict followed by non-Extend/non-ZWJ resets the EP FSM
1383+
self.assertEqual(graphemes('\u2764b'), ['\u2764', 'b'])
1384+
# Consonant followed by InCB Extend (not Linker) stays in Started
1385+
self.assertEqual(graphemes('\u0915\u0951'), ['\u0915\u0951'])
1386+
# Consonant followed by InCB None resets InCB FSM
1387+
self.assertEqual(graphemes('\u0915b'), ['\u0915', 'b'])
13871388

13881389
def _graphemes(self, *args):
13891390
return list(map(str, self.iter_graphemes(*args)))

0 commit comments

Comments
 (0)