bpo-32478: Add tests for 'break' and 'return' inside 'finally' clause. (GH-5078) (#5083)

(cherry picked from commit 7cc42c356b)
This commit is contained in:
Miss Islington (bot) 2018-01-02 00:20:12 -08:00 committed by Serhiy Storchaka
parent 439ce8a939
commit aea95c2fbd
1 changed files with 74 additions and 0 deletions

View File

@ -805,6 +805,80 @@ class GrammarTests(unittest.TestCase):
x = g2() x = g2()
check_syntax_error(self, "class foo:return 1") check_syntax_error(self, "class foo:return 1")
def test_break_in_finally(self):
count = 0
while count < 2:
count += 1
try:
pass
finally:
break
self.assertEqual(count, 1)
count = 0
while count < 2:
count += 1
try:
continue
finally:
break
self.assertEqual(count, 1)
count = 0
while count < 2:
count += 1
try:
1/0
finally:
break
self.assertEqual(count, 1)
for count in [0, 1]:
self.assertEqual(count, 0)
try:
pass
finally:
break
self.assertEqual(count, 0)
for count in [0, 1]:
self.assertEqual(count, 0)
try:
continue
finally:
break
self.assertEqual(count, 0)
for count in [0, 1]:
self.assertEqual(count, 0)
try:
1/0
finally:
break
self.assertEqual(count, 0)
def test_return_in_finally(self):
def g1():
try:
pass
finally:
return 1
self.assertEqual(g1(), 1)
def g2():
try:
return 2
finally:
return 3
self.assertEqual(g2(), 3)
def g3():
try:
1/0
finally:
return 4
self.assertEqual(g3(), 4)
def test_yield(self): def test_yield(self):
# Allowed as standalone statement # Allowed as standalone statement
def g(): yield 1 def g(): yield 1