diff options
author | Ethan Furman <ethan@stoneleaf.us> | 2018-09-12 18:43:34 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-09-12 18:43:34 (GMT) |
commit | 019f0a0cb85ebc234356415f3638b9bd77528e55 (patch) | |
tree | 283d1c2dacb285c8f091bf4bb1f79e7520026fb1 /Lib/test/test_enum.py | |
parent | a5d1eb8d8b7add31b5f5d9bbb31cee1a491b2c08 (diff) | |
download | cpython-019f0a0cb85ebc234356415f3638b9bd77528e55.zip cpython-019f0a0cb85ebc234356415f3638b9bd77528e55.tar.gz cpython-019f0a0cb85ebc234356415f3638b9bd77528e55.tar.bz2 |
bpo-34536: raise error for invalid _missing_ results (GH-9147)
* raise exception if _missing_ returns None or invalid type
Diffstat (limited to 'Lib/test/test_enum.py')
-rw-r--r-- | Lib/test/test_enum.py | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/Lib/test/test_enum.py b/Lib/test/test_enum.py index c04d03f..b8efb83 100644 --- a/Lib/test/test_enum.py +++ b/Lib/test/test_enum.py @@ -3,6 +3,7 @@ import inspect import pydoc import sys import unittest +import sys import threading from collections import OrderedDict from enum import Enum, IntEnum, EnumMeta, Flag, IntFlag, unique, auto @@ -1697,6 +1698,38 @@ class TestEnum(unittest.TestCase): third = auto() self.assertEqual([Dupes.first, Dupes.second, Dupes.third], list(Dupes)) + def test_missing(self): + class Color(Enum): + red = 1 + green = 2 + blue = 3 + @classmethod + def _missing_(cls, item): + if item == 'three': + return cls.blue + elif item == 'bad return': + # trigger internal error + return 5 + elif item == 'error out': + raise ZeroDivisionError + else: + # trigger not found + return None + self.assertIs(Color('three'), Color.blue) + self.assertRaises(ValueError, Color, 7) + try: + Color('bad return') + except TypeError as exc: + self.assertTrue(isinstance(exc.__context__, ValueError)) + else: + raise Exception('Exception not raised.') + try: + Color('error out') + except ZeroDivisionError as exc: + self.assertTrue(isinstance(exc.__context__, ValueError)) + else: + raise Exception('Exception not raised.') + class TestOrder(unittest.TestCase): |