summaryrefslogtreecommitdiffstats
path: root/Lib/unittest/mock.py
diff options
context:
space:
mode:
authorMario Corchero <mariocj89@gmail.com>2019-04-30 18:56:36 (GMT)
committerChris Withers <chris@withers.org>2019-04-30 18:56:36 (GMT)
commit0df635c7f8aa69e56a092bd4f142f0f164741ab2 (patch)
treefc549b19dcdcfc45a85512165ac3e05eec428e9a /Lib/unittest/mock.py
parentd537ab0ff9767ef024f26246899728f0116b1ec3 (diff)
downloadcpython-0df635c7f8aa69e56a092bd4f142f0f164741ab2.zip
cpython-0df635c7f8aa69e56a092bd4f142f0f164741ab2.tar.gz
cpython-0df635c7f8aa69e56a092bd4f142f0f164741ab2.tar.bz2
Don't report deleted attributes in __dir__ (GH#10148)
When an attribute is deleted from a Mock, a sentinel is added rather than just deleting the attribute. This commit checks for such sentinels when returning the child mocks in the __dir__ method as users won't expect deleted attributes to appear when performing dir(mock).
Diffstat (limited to 'Lib/unittest/mock.py')
-rw-r--r--Lib/unittest/mock.py6
1 files changed, 4 insertions, 2 deletions
diff --git a/Lib/unittest/mock.py b/Lib/unittest/mock.py
index 1636073..997af71 100644
--- a/Lib/unittest/mock.py
+++ b/Lib/unittest/mock.py
@@ -684,12 +684,14 @@ class NonCallableMock(Base):
extras = self._mock_methods or []
from_type = dir(type(self))
from_dict = list(self.__dict__)
+ from_child_mocks = [
+ m_name for m_name, m_value in self._mock_children.items()
+ if m_value is not _deleted]
from_type = [e for e in from_type if not e.startswith('_')]
from_dict = [e for e in from_dict if not e.startswith('_') or
_is_magic(e)]
- return sorted(set(extras + from_type + from_dict +
- list(self._mock_children)))
+ return sorted(set(extras + from_type + from_dict + from_child_mocks))
def __setattr__(self, name, value):