Multi with statement - Code Review (original) (raw)

OLD

NEW

1 #!/usr/bin/env python

1 #!/usr/bin/env python

2

2

3 """Unit tests for the with statement specified in PEP 343."""

3 """Unit tests for the with statement specified in PEP 343."""

4

4

5

5

6 __author__ = "Mike Bland"

6 __author__ = "Mike Bland"

7 __email__ = "mbland at acm dot org"

7 __email__ = "mbland at acm dot org"

8

8

9 import sys

9 import sys

10 import unittest

10 import unittest

(...skipping 636 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading...

647 def __exit__(self, t, v, tb): return False

647 def __exit__(self, t, v, tb): return False

648 try:

648 try:

649 with EuropeanSwallow():

649 with EuropeanSwallow():

650 1/0

650 1/0

651 except ZeroDivisionError:

651 except ZeroDivisionError:

652 pass

652 pass

653 else:

653 else:

654 self.fail("ZeroDivisionError should have been raised")

654 self.fail("ZeroDivisionError should have been raised")

655

655

656

656

657 class NestedWith(unittest.TestCase):

658

659 class Dummy(object):

660 def __init__(self, value=None):·

661 if value is None:

662 value = self

663 self.value = value

664 self.enter_called = False

665 self.exit_called = False

666

667 def __enter__(self):

668 self.enter_called = True

669 return self.value

670

671 def __exit__(self, *exc_info):·

672 self.exit_called = True

673

674 class CtorThrows(object):

675 def __init__(self): raise RuntimeError()

676

677 class EnterThrows(object):

678 def __enter__(self): raise RuntimeError()

679 def __exit__(self, *exc_info): pass

680

681 def testNoExceptions(self):

682 with self.Dummy() as a, self.Dummy() as b:

683 self.assertTrue(a.enter_called)

684 self.assertTrue(b.enter_called)

685 self.assertTrue(a.exit_called)

686 self.assertTrue(b.exit_called)

687

688 def testExceptionInExprList(self):

689 try:

690 with self.Dummy() as a, self.CtorThrows():

691 pass

692 except:

693 pass

694 self.assertTrue(a.enter_called)

695 self.assertTrue(a.exit_called)

696

697 def testExceptionInEnter(self):

698 try:

699 with self.Dummy() as a, self.EnterThrows():

700 pass

701 except:

702 pass

703 self.assertTrue(a.enter_called)

704 self.assertTrue(a.exit_called)

705 ········

706 def testEnterReturnsTuple(self):

707 with self.Dummy(value=(1,2)) as (a1, a2), \

708 self.Dummy(value=(10, 20)) as (b1, b2):

709 self.assertEquals(1, a1)

710 self.assertEquals(2, a2)

711 self.assertEquals(10, b1)

712 self.assertEquals(20, b2)

713

657 def test_main():

714 def test_main():

658 run_unittest(FailureTestCase, NonexceptionalTestCase,

715 run_unittest(FailureTestCase, NonexceptionalTestCase,

659 NestedNonexceptionalTestCase, ExceptionalTestCase,

716 NestedNonexceptionalTestCase, ExceptionalTestCase,

660 NonLocalFlowControlTestCase,

717 NonLocalFlowControlTestCase,

661 AssignmentTargetTestCase,

718 AssignmentTargetTestCase,

662 ExitSwallowsExceptionTestCase)

719 ExitSwallowsExceptionTestCase,

720 NestedWith)

663

721

664

722

665 if __name__ == '__main__':

723 if __name__ == '__main__':

666 test_main()

724 test_main()

OLD

NEW