summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_enum.py
diff options
context:
space:
mode:
authorEthan Furman <ethan@stoneleaf.us>2018-09-12 18:43:34 (GMT)
committerGitHub <noreply@github.com>2018-09-12 18:43:34 (GMT)
commit019f0a0cb85ebc234356415f3638b9bd77528e55 (patch)
tree283d1c2dacb285c8f091bf4bb1f79e7520026fb1 /Lib/test/test_enum.py
parenta5d1eb8d8b7add31b5f5d9bbb31cee1a491b2c08 (diff)
downloadcpython-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.py33
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):