Upstream version 8.36.161.0
[platform/framework/web/crosswalk.git] / src / third_party / chromite / third_party / mock.py
1 # mock.py
2 # Test tools for mocking and patching.
3 # Copyright (C) 2007-2012 Michael Foord & the mock team
4 # E-mail: fuzzyman AT voidspace DOT org DOT uk
5
6 # mock 1.0
7 # http://www.voidspace.org.uk/python/mock/
8
9 # Released subject to the BSD License
10 # Please see http://www.voidspace.org.uk/python/license.shtml
11
12 # Scripts maintained at http://www.voidspace.org.uk/python/index.shtml
13 # Comments, suggestions and bug reports welcome.
14
15
16 __all__ = (
17     'Mock',
18     'MagicMock',
19     'patch',
20     'sentinel',
21     'DEFAULT',
22     'ANY',
23     'call',
24     'create_autospec',
25     'FILTER_DIR',
26     'NonCallableMock',
27     'NonCallableMagicMock',
28     'mock_open',
29     'PropertyMock',
30 )
31
32
33 __version__ = '1.0.1'
34
35
36 import pprint
37 import sys
38
39 try:
40     import inspect
41 except ImportError:
42     # for alternative platforms that
43     # may not have inspect
44     inspect = None
45
46 try:
47     from functools import wraps as original_wraps
48 except ImportError:
49     # Python 2.4 compatibility
50     def wraps(original):
51         def inner(f):
52             f.__name__ = original.__name__
53             f.__doc__ = original.__doc__
54             f.__module__ = original.__module__
55             f.__wrapped__ = original
56             return f
57         return inner
58 else:
59     if sys.version_info[:2] >= (3, 3):
60         wraps = original_wraps
61     else:
62         def wraps(func):
63             def inner(f):
64                 f = original_wraps(func)(f)
65                 f.__wrapped__ = func
66                 return f
67             return inner
68
69 try:
70     unicode
71 except NameError:
72     # Python 3
73     basestring = unicode = str
74
75 try:
76     long
77 except NameError:
78     # Python 3
79     long = int
80
81 try:
82     BaseException
83 except NameError:
84     # Python 2.4 compatibility
85     BaseException = Exception
86
87 try:
88     next
89 except NameError:
90     def next(obj):
91         return obj.next()
92
93
94 BaseExceptions = (BaseException,)
95 if 'java' in sys.platform:
96     # jython
97     import java
98     BaseExceptions = (BaseException, java.lang.Throwable)
99
100 try:
101     _isidentifier = str.isidentifier
102 except AttributeError:
103     # Python 2.X
104     import keyword
105     import re
106     regex = re.compile(r'^[a-z_][a-z0-9_]*$', re.I)
107     def _isidentifier(string):
108         if string in keyword.kwlist:
109             return False
110         return regex.match(string)
111
112
113 inPy3k = sys.version_info[0] == 3
114
115 # Needed to work around Python 3 bug where use of "super" interferes with
116 # defining __class__ as a descriptor
117 _super = super
118
119 self = 'im_self'
120 builtin = '__builtin__'
121 if inPy3k:
122     self = '__self__'
123     builtin = 'builtins'
124
125 FILTER_DIR = True
126
127
128 def _is_instance_mock(obj):
129     # can't use isinstance on Mock objects because they override __class__
130     # The base class for all mocks is NonCallableMock
131     return issubclass(type(obj), NonCallableMock)
132
133
134 def _is_exception(obj):
135     return (
136         isinstance(obj, BaseExceptions) or
137         isinstance(obj, ClassTypes) and issubclass(obj, BaseExceptions)
138     )
139
140
141 class _slotted(object):
142     __slots__ = ['a']
143
144
145 DescriptorTypes = (
146     type(_slotted.a),
147     property,
148 )
149
150
151 def _getsignature(func, skipfirst, instance=False):
152     if inspect is None:
153         raise ImportError('inspect module not available')
154
155     if isinstance(func, ClassTypes) and not instance:
156         try:
157             func = func.__init__
158         except AttributeError:
159             return
160         skipfirst = True
161     elif not isinstance(func, FunctionTypes):
162         # for classes where instance is True we end up here too
163         try:
164             func = func.__call__
165         except AttributeError:
166             return
167
168     if inPy3k:
169         try:
170             argspec = inspect.getfullargspec(func)
171         except TypeError:
172             # C function / method, possibly inherited object().__init__
173             return
174         regargs, varargs, varkw, defaults, kwonly, kwonlydef, ann = argspec
175     else:
176         try:
177             regargs, varargs, varkwargs, defaults = inspect.getargspec(func)
178         except TypeError:
179             # C function / method, possibly inherited object().__init__
180             return
181
182     # instance methods and classmethods need to lose the self argument
183     if getattr(func, self, None) is not None:
184         regargs = regargs[1:]
185     if skipfirst:
186         # this condition and the above one are never both True - why?
187         regargs = regargs[1:]
188
189     if inPy3k:
190         signature = inspect.formatargspec(
191             regargs, varargs, varkw, defaults,
192             kwonly, kwonlydef, ann, formatvalue=lambda value: "")
193     else:
194         signature = inspect.formatargspec(
195             regargs, varargs, varkwargs, defaults,
196             formatvalue=lambda value: "")
197     return signature[1:-1], func
198
199
200 def _check_signature(func, mock, skipfirst, instance=False):
201     if not _callable(func):
202         return
203
204     result = _getsignature(func, skipfirst, instance)
205     if result is None:
206         return
207     signature, func = result
208
209     # can't use self because "self" is common as an argument name
210     # unfortunately even not in the first place
211     src = "lambda _mock_self, %s: None" % signature
212     checksig = eval(src, {})
213     _copy_func_details(func, checksig)
214     type(mock)._mock_check_sig = checksig
215
216
217 def _copy_func_details(func, funcopy):
218     funcopy.__name__ = func.__name__
219     funcopy.__doc__ = func.__doc__
220     #funcopy.__dict__.update(func.__dict__)
221     funcopy.__module__ = func.__module__
222     if not inPy3k:
223         funcopy.func_defaults = func.func_defaults
224         return
225     funcopy.__defaults__ = func.__defaults__
226     funcopy.__kwdefaults__ = func.__kwdefaults__
227
228
229 def _callable(obj):
230     if isinstance(obj, (ClassTypes, staticmethod, classmethod)):
231         return True
232     if getattr(obj, '__call__', None) is not None:
233         return True
234     return False
235
236
237 def _is_list(obj):
238     # checks for list or tuples
239     # XXXX badly named!
240     return type(obj) in (list, tuple)
241
242
243 def _instance_callable(obj):
244     """Given an object, return True if the object is callable.
245     For classes, return True if instances would be callable."""
246     if not isinstance(obj, ClassTypes):
247         # already an instance
248         return getattr(obj, '__call__', None) is not None
249
250     klass = obj
251     # uses __bases__ instead of __mro__ so that we work with old style classes
252     if klass.__dict__.get('__call__') is not None:
253         return True
254
255     for base in klass.__bases__:
256         if _instance_callable(base):
257             return True
258     return False
259
260
261 def _set_signature(mock, original, instance=False):
262     # creates a function with signature (*args, **kwargs) that delegates to a
263     # mock. It still does signature checking by calling a lambda with the same
264     # signature as the original.
265     if not _callable(original):
266         return
267
268     skipfirst = isinstance(original, ClassTypes)
269     result = _getsignature(original, skipfirst, instance)
270     if result is None:
271         # was a C function (e.g. object().__init__ ) that can't be mocked
272         return
273
274     signature, func = result
275
276     src = "lambda %s: None" % signature
277     checksig = eval(src, {})
278     _copy_func_details(func, checksig)
279
280     name = original.__name__
281     if not _isidentifier(name):
282         name = 'funcopy'
283     context = {'_checksig_': checksig, 'mock': mock}
284     src = """def %s(*args, **kwargs):
285     _checksig_(*args, **kwargs)
286     return mock(*args, **kwargs)""" % name
287     exec (src, context)
288     funcopy = context[name]
289     _setup_func(funcopy, mock)
290     return funcopy
291
292
293 def _setup_func(funcopy, mock):
294     funcopy.mock = mock
295
296     # can't use isinstance with mocks
297     if not _is_instance_mock(mock):
298         return
299
300     def assert_called_with(*args, **kwargs):
301         return mock.assert_called_with(*args, **kwargs)
302     def assert_called_once_with(*args, **kwargs):
303         return mock.assert_called_once_with(*args, **kwargs)
304     def assert_has_calls(*args, **kwargs):
305         return mock.assert_has_calls(*args, **kwargs)
306     def assert_any_call(*args, **kwargs):
307         return mock.assert_any_call(*args, **kwargs)
308     def reset_mock():
309         funcopy.method_calls = _CallList()
310         funcopy.mock_calls = _CallList()
311         mock.reset_mock()
312         ret = funcopy.return_value
313         if _is_instance_mock(ret) and not ret is mock:
314             ret.reset_mock()
315
316     funcopy.called = False
317     funcopy.call_count = 0
318     funcopy.call_args = None
319     funcopy.call_args_list = _CallList()
320     funcopy.method_calls = _CallList()
321     funcopy.mock_calls = _CallList()
322
323     funcopy.return_value = mock.return_value
324     funcopy.side_effect = mock.side_effect
325     funcopy._mock_children = mock._mock_children
326
327     funcopy.assert_called_with = assert_called_with
328     funcopy.assert_called_once_with = assert_called_once_with
329     funcopy.assert_has_calls = assert_has_calls
330     funcopy.assert_any_call = assert_any_call
331     funcopy.reset_mock = reset_mock
332
333     mock._mock_delegate = funcopy
334
335
336 def _is_magic(name):
337     return '__%s__' % name[2:-2] == name
338
339
340 class _SentinelObject(object):
341     "A unique, named, sentinel object."
342     def __init__(self, name):
343         self.name = name
344
345     def __repr__(self):
346         return 'sentinel.%s' % self.name
347
348
349 class _Sentinel(object):
350     """Access attributes to return a named object, usable as a sentinel."""
351     def __init__(self):
352         self._sentinels = {}
353
354     def __getattr__(self, name):
355         if name == '__bases__':
356             # Without this help(mock) raises an exception
357             raise AttributeError
358         return self._sentinels.setdefault(name, _SentinelObject(name))
359
360
361 sentinel = _Sentinel()
362
363 DEFAULT = sentinel.DEFAULT
364 _missing = sentinel.MISSING
365 _deleted = sentinel.DELETED
366
367
368 class OldStyleClass:
369     pass
370 ClassType = type(OldStyleClass)
371
372
373 def _copy(value):
374     if type(value) in (dict, list, tuple, set):
375         return type(value)(value)
376     return value
377
378
379 ClassTypes = (type,)
380 if not inPy3k:
381     ClassTypes = (type, ClassType)
382
383 _allowed_names = set(
384     [
385         'return_value', '_mock_return_value', 'side_effect',
386         '_mock_side_effect', '_mock_parent', '_mock_new_parent',
387         '_mock_name', '_mock_new_name'
388     ]
389 )
390
391
392 def _delegating_property(name):
393     _allowed_names.add(name)
394     _the_name = '_mock_' + name
395     def _get(self, name=name, _the_name=_the_name):
396         sig = self._mock_delegate
397         if sig is None:
398             return getattr(self, _the_name)
399         return getattr(sig, name)
400     def _set(self, value, name=name, _the_name=_the_name):
401         sig = self._mock_delegate
402         if sig is None:
403             self.__dict__[_the_name] = value
404         else:
405             setattr(sig, name, value)
406
407     return property(_get, _set)
408
409
410
411 class _CallList(list):
412
413     def __contains__(self, value):
414         if not isinstance(value, list):
415             return list.__contains__(self, value)
416         len_value = len(value)
417         len_self = len(self)
418         if len_value > len_self:
419             return False
420
421         for i in range(0, len_self - len_value + 1):
422             sub_list = self[i:i+len_value]
423             if sub_list == value:
424                 return True
425         return False
426
427     def __repr__(self):
428         return pprint.pformat(list(self))
429
430
431 def _check_and_set_parent(parent, value, name, new_name):
432     if not _is_instance_mock(value):
433         return False
434     if ((value._mock_name or value._mock_new_name) or
435         (value._mock_parent is not None) or
436         (value._mock_new_parent is not None)):
437         return False
438
439     _parent = parent
440     while _parent is not None:
441         # setting a mock (value) as a child or return value of itself
442         # should not modify the mock
443         if _parent is value:
444             return False
445         _parent = _parent._mock_new_parent
446
447     if new_name:
448         value._mock_new_parent = parent
449         value._mock_new_name = new_name
450     if name:
451         value._mock_parent = parent
452         value._mock_name = name
453     return True
454
455
456
457 class Base(object):
458     _mock_return_value = DEFAULT
459     _mock_side_effect = None
460     def __init__(self, *args, **kwargs):
461         pass
462
463
464
465 class NonCallableMock(Base):
466     """A non-callable version of `Mock`"""
467
468     def __new__(cls, *args, **kw):
469         # every instance has its own class
470         # so we can create magic methods on the
471         # class without stomping on other mocks
472         new = type(cls.__name__, (cls,), {'__doc__': cls.__doc__})
473         instance = object.__new__(new)
474         return instance
475
476
477     def __init__(
478             self, spec=None, wraps=None, name=None, spec_set=None,
479             parent=None, _spec_state=None, _new_name='', _new_parent=None,
480             **kwargs
481         ):
482         if _new_parent is None:
483             _new_parent = parent
484
485         __dict__ = self.__dict__
486         __dict__['_mock_parent'] = parent
487         __dict__['_mock_name'] = name
488         __dict__['_mock_new_name'] = _new_name
489         __dict__['_mock_new_parent'] = _new_parent
490
491         if spec_set is not None:
492             spec = spec_set
493             spec_set = True
494
495         self._mock_add_spec(spec, spec_set)
496
497         __dict__['_mock_children'] = {}
498         __dict__['_mock_wraps'] = wraps
499         __dict__['_mock_delegate'] = None
500
501         __dict__['_mock_called'] = False
502         __dict__['_mock_call_args'] = None
503         __dict__['_mock_call_count'] = 0
504         __dict__['_mock_call_args_list'] = _CallList()
505         __dict__['_mock_mock_calls'] = _CallList()
506
507         __dict__['method_calls'] = _CallList()
508
509         if kwargs:
510             self.configure_mock(**kwargs)
511
512         _super(NonCallableMock, self).__init__(
513             spec, wraps, name, spec_set, parent,
514             _spec_state
515         )
516
517
518     def attach_mock(self, mock, attribute):
519         """
520         Attach a mock as an attribute of this one, replacing its name and
521         parent. Calls to the attached mock will be recorded in the
522         `method_calls` and `mock_calls` attributes of this one."""
523         mock._mock_parent = None
524         mock._mock_new_parent = None
525         mock._mock_name = ''
526         mock._mock_new_name = None
527
528         setattr(self, attribute, mock)
529
530
531     def mock_add_spec(self, spec, spec_set=False):
532         """Add a spec to a mock. `spec` can either be an object or a
533         list of strings. Only attributes on the `spec` can be fetched as
534         attributes from the mock.
535
536         If `spec_set` is True then only attributes on the spec can be set."""
537         self._mock_add_spec(spec, spec_set)
538
539
540     def _mock_add_spec(self, spec, spec_set):
541         _spec_class = None
542
543         if spec is not None and not _is_list(spec):
544             if isinstance(spec, ClassTypes):
545                 _spec_class = spec
546             else:
547                 _spec_class = _get_class(spec)
548
549             spec = dir(spec)
550
551         __dict__ = self.__dict__
552         __dict__['_spec_class'] = _spec_class
553         __dict__['_spec_set'] = spec_set
554         __dict__['_mock_methods'] = spec
555
556
557     def __get_return_value(self):
558         ret = self._mock_return_value
559         if self._mock_delegate is not None:
560             ret = self._mock_delegate.return_value
561
562         if ret is DEFAULT:
563             ret = self._get_child_mock(
564                 _new_parent=self, _new_name='()'
565             )
566             self.return_value = ret
567         return ret
568
569
570     def __set_return_value(self, value):
571         if self._mock_delegate is not None:
572             self._mock_delegate.return_value = value
573         else:
574             self._mock_return_value = value
575             _check_and_set_parent(self, value, None, '()')
576
577     __return_value_doc = "The value to be returned when the mock is called."
578     return_value = property(__get_return_value, __set_return_value,
579                             __return_value_doc)
580
581
582     @property
583     def __class__(self):
584         if self._spec_class is None:
585             return type(self)
586         return self._spec_class
587
588     called = _delegating_property('called')
589     call_count = _delegating_property('call_count')
590     call_args = _delegating_property('call_args')
591     call_args_list = _delegating_property('call_args_list')
592     mock_calls = _delegating_property('mock_calls')
593
594
595     def __get_side_effect(self):
596         sig = self._mock_delegate
597         if sig is None:
598             return self._mock_side_effect
599         return sig.side_effect
600
601     def __set_side_effect(self, value):
602         value = _try_iter(value)
603         sig = self._mock_delegate
604         if sig is None:
605             self._mock_side_effect = value
606         else:
607             sig.side_effect = value
608
609     side_effect = property(__get_side_effect, __set_side_effect)
610
611
612     def reset_mock(self):
613         "Restore the mock object to its initial state."
614         self.called = False
615         self.call_args = None
616         self.call_count = 0
617         self.mock_calls = _CallList()
618         self.call_args_list = _CallList()
619         self.method_calls = _CallList()
620
621         for child in self._mock_children.values():
622             if isinstance(child, _SpecState):
623                 continue
624             child.reset_mock()
625
626         ret = self._mock_return_value
627         if _is_instance_mock(ret) and ret is not self:
628             ret.reset_mock()
629
630
631     def configure_mock(self, **kwargs):
632         """Set attributes on the mock through keyword arguments.
633
634         Attributes plus return values and side effects can be set on child
635         mocks using standard dot notation and unpacking a dictionary in the
636         method call:
637
638         >>> attrs = {'method.return_value': 3, 'other.side_effect': KeyError}
639         >>> mock.configure_mock(**attrs)"""
640         for arg, val in sorted(kwargs.items(),
641                                # we sort on the number of dots so that
642                                # attributes are set before we set attributes on
643                                # attributes
644                                key=lambda entry: entry[0].count('.')):
645             args = arg.split('.')
646             final = args.pop()
647             obj = self
648             for entry in args:
649                 obj = getattr(obj, entry)
650             setattr(obj, final, val)
651
652
653     def __getattr__(self, name):
654         if name == '_mock_methods':
655             raise AttributeError(name)
656         elif self._mock_methods is not None:
657             if name not in self._mock_methods or name in _all_magics:
658                 raise AttributeError("Mock object has no attribute %r" % name)
659         elif _is_magic(name):
660             raise AttributeError(name)
661
662         result = self._mock_children.get(name)
663         if result is _deleted:
664             raise AttributeError(name)
665         elif result is None:
666             wraps = None
667             if self._mock_wraps is not None:
668                 # XXXX should we get the attribute without triggering code
669                 # execution?
670                 wraps = getattr(self._mock_wraps, name)
671
672             result = self._get_child_mock(
673                 parent=self, name=name, wraps=wraps, _new_name=name,
674                 _new_parent=self
675             )
676             self._mock_children[name]  = result
677
678         elif isinstance(result, _SpecState):
679             result = create_autospec(
680                 result.spec, result.spec_set, result.instance,
681                 result.parent, result.name
682             )
683             self._mock_children[name]  = result
684
685         return result
686
687
688     def __repr__(self):
689         _name_list = [self._mock_new_name]
690         _parent = self._mock_new_parent
691         last = self
692
693         dot = '.'
694         if _name_list == ['()']:
695             dot = ''
696         seen = set()
697         while _parent is not None:
698             last = _parent
699
700             _name_list.append(_parent._mock_new_name + dot)
701             dot = '.'
702             if _parent._mock_new_name == '()':
703                 dot = ''
704
705             _parent = _parent._mock_new_parent
706
707             # use ids here so as not to call __hash__ on the mocks
708             if id(_parent) in seen:
709                 break
710             seen.add(id(_parent))
711
712         _name_list = list(reversed(_name_list))
713         _first = last._mock_name or 'mock'
714         if len(_name_list) > 1:
715             if _name_list[1] not in ('()', '().'):
716                 _first += '.'
717         _name_list[0] = _first
718         name = ''.join(_name_list)
719
720         name_string = ''
721         if name not in ('mock', 'mock.'):
722             name_string = ' name=%r' % name
723
724         spec_string = ''
725         if self._spec_class is not None:
726             spec_string = ' spec=%r'
727             if self._spec_set:
728                 spec_string = ' spec_set=%r'
729             spec_string = spec_string % self._spec_class.__name__
730         return "<%s%s%s id='%s'>" % (
731             type(self).__name__,
732             name_string,
733             spec_string,
734             id(self)
735         )
736
737
738     def __dir__(self):
739         """Filter the output of `dir(mock)` to only useful members.
740         XXXX
741         """
742         extras = self._mock_methods or []
743         from_type = dir(type(self))
744         from_dict = list(self.__dict__)
745
746         if FILTER_DIR:
747             from_type = [e for e in from_type if not e.startswith('_')]
748             from_dict = [e for e in from_dict if not e.startswith('_') or
749                          _is_magic(e)]
750         return sorted(set(extras + from_type + from_dict +
751                           list(self._mock_children)))
752
753
754     def __setattr__(self, name, value):
755         if name in _allowed_names:
756             # property setters go through here
757             return object.__setattr__(self, name, value)
758         elif (self._spec_set and self._mock_methods is not None and
759             name not in self._mock_methods and
760             name not in self.__dict__):
761             raise AttributeError("Mock object has no attribute '%s'" % name)
762         elif name in _unsupported_magics:
763             msg = 'Attempting to set unsupported magic method %r.' % name
764             raise AttributeError(msg)
765         elif name in _all_magics:
766             if self._mock_methods is not None and name not in self._mock_methods:
767                 raise AttributeError("Mock object has no attribute '%s'" % name)
768
769             if not _is_instance_mock(value):
770                 setattr(type(self), name, _get_method(name, value))
771                 original = value
772                 value = lambda *args, **kw: original(self, *args, **kw)
773             else:
774                 # only set _new_name and not name so that mock_calls is tracked
775                 # but not method calls
776                 _check_and_set_parent(self, value, None, name)
777                 setattr(type(self), name, value)
778                 self._mock_children[name] = value
779         elif name == '__class__':
780             self._spec_class = value
781             return
782         else:
783             if _check_and_set_parent(self, value, name, name):
784                 self._mock_children[name] = value
785         return object.__setattr__(self, name, value)
786
787
788     def __delattr__(self, name):
789         if name in _all_magics and name in type(self).__dict__:
790             delattr(type(self), name)
791             if name not in self.__dict__:
792                 # for magic methods that are still MagicProxy objects and
793                 # not set on the instance itself
794                 return
795
796         if name in self.__dict__:
797             object.__delattr__(self, name)
798
799         obj = self._mock_children.get(name, _missing)
800         if obj is _deleted:
801             raise AttributeError(name)
802         if obj is not _missing:
803             del self._mock_children[name]
804         self._mock_children[name] = _deleted
805
806
807
808     def _format_mock_call_signature(self, args, kwargs):
809         name = self._mock_name or 'mock'
810         return _format_call_signature(name, args, kwargs)
811
812
813     def _format_mock_failure_message(self, args, kwargs):
814         message = 'Expected call: %s\nActual call: %s'
815         expected_string = self._format_mock_call_signature(args, kwargs)
816         call_args = self.call_args
817         if len(call_args) == 3:
818             call_args = call_args[1:]
819         actual_string = self._format_mock_call_signature(*call_args)
820         return message % (expected_string, actual_string)
821
822
823     def assert_called_with(_mock_self, *args, **kwargs):
824         """assert that the mock was called with the specified arguments.
825
826         Raises an AssertionError if the args and keyword args passed in are
827         different to the last call to the mock."""
828         self = _mock_self
829         if self.call_args is None:
830             expected = self._format_mock_call_signature(args, kwargs)
831             raise AssertionError('Expected call: %s\nNot called' % (expected,))
832
833         if self.call_args != (args, kwargs):
834             msg = self._format_mock_failure_message(args, kwargs)
835             raise AssertionError(msg)
836
837
838     def assert_called_once_with(_mock_self, *args, **kwargs):
839         """assert that the mock was called exactly once and with the specified
840         arguments."""
841         self = _mock_self
842         if not self.call_count == 1:
843             msg = ("Expected to be called once. Called %s times." %
844                    self.call_count)
845             raise AssertionError(msg)
846         return self.assert_called_with(*args, **kwargs)
847
848
849     def assert_has_calls(self, calls, any_order=False):
850         """assert the mock has been called with the specified calls.
851         The `mock_calls` list is checked for the calls.
852
853         If `any_order` is False (the default) then the calls must be
854         sequential. There can be extra calls before or after the
855         specified calls.
856
857         If `any_order` is True then the calls can be in any order, but
858         they must all appear in `mock_calls`."""
859         if not any_order:
860             if calls not in self.mock_calls:
861                 raise AssertionError(
862                     'Calls not found.\nExpected: %r\n'
863                     'Actual: %r' % (calls, self.mock_calls)
864                 )
865             return
866
867         all_calls = list(self.mock_calls)
868
869         not_found = []
870         for kall in calls:
871             try:
872                 all_calls.remove(kall)
873             except ValueError:
874                 not_found.append(kall)
875         if not_found:
876             raise AssertionError(
877                 '%r not all found in call list' % (tuple(not_found),)
878             )
879
880
881     def assert_any_call(self, *args, **kwargs):
882         """assert the mock has been called with the specified arguments.
883
884         The assert passes if the mock has *ever* been called, unlike
885         `assert_called_with` and `assert_called_once_with` that only pass if
886         the call is the most recent one."""
887         kall = call(*args, **kwargs)
888         if kall not in self.call_args_list:
889             expected_string = self._format_mock_call_signature(args, kwargs)
890             raise AssertionError(
891                 '%s call not found' % expected_string
892             )
893
894
895     def _get_child_mock(self, **kw):
896         """Create the child mocks for attributes and return value.
897         By default child mocks will be the same type as the parent.
898         Subclasses of Mock may want to override this to customize the way
899         child mocks are made.
900
901         For non-callable mocks the callable variant will be used (rather than
902         any custom subclass)."""
903         _type = type(self)
904         if not issubclass(_type, CallableMixin):
905             if issubclass(_type, NonCallableMagicMock):
906                 klass = MagicMock
907             elif issubclass(_type, NonCallableMock) :
908                 klass = Mock
909         else:
910             klass = _type.__mro__[1]
911         return klass(**kw)
912
913
914
915 def _try_iter(obj):
916     if obj is None:
917         return obj
918     if _is_exception(obj):
919         return obj
920     if _callable(obj):
921         return obj
922     try:
923         return iter(obj)
924     except TypeError:
925         # XXXX backwards compatibility
926         # but this will blow up on first call - so maybe we should fail early?
927         return obj
928
929
930
931 class CallableMixin(Base):
932
933     def __init__(self, spec=None, side_effect=None, return_value=DEFAULT,
934                  wraps=None, name=None, spec_set=None, parent=None,
935                  _spec_state=None, _new_name='', _new_parent=None, **kwargs):
936         self.__dict__['_mock_return_value'] = return_value
937
938         _super(CallableMixin, self).__init__(
939             spec, wraps, name, spec_set, parent,
940             _spec_state, _new_name, _new_parent, **kwargs
941         )
942
943         self.side_effect = side_effect
944
945
946     def _mock_check_sig(self, *args, **kwargs):
947         # stub method that can be replaced with one with a specific signature
948         pass
949
950
951     def __call__(_mock_self, *args, **kwargs):
952         # can't use self in-case a function / method we are mocking uses self
953         # in the signature
954         _mock_self._mock_check_sig(*args, **kwargs)
955         return _mock_self._mock_call(*args, **kwargs)
956
957
958     def _mock_call(_mock_self, *args, **kwargs):
959         self = _mock_self
960         self.called = True
961         self.call_count += 1
962         self.call_args = _Call((args, kwargs), two=True)
963         self.call_args_list.append(_Call((args, kwargs), two=True))
964
965         _new_name = self._mock_new_name
966         _new_parent = self._mock_new_parent
967         self.mock_calls.append(_Call(('', args, kwargs)))
968
969         seen = set()
970         skip_next_dot = _new_name == '()'
971         do_method_calls = self._mock_parent is not None
972         name = self._mock_name
973         while _new_parent is not None:
974             this_mock_call = _Call((_new_name, args, kwargs))
975             if _new_parent._mock_new_name:
976                 dot = '.'
977                 if skip_next_dot:
978                     dot = ''
979
980                 skip_next_dot = False
981                 if _new_parent._mock_new_name == '()':
982                     skip_next_dot = True
983
984                 _new_name = _new_parent._mock_new_name + dot + _new_name
985
986             if do_method_calls:
987                 if _new_name == name:
988                     this_method_call = this_mock_call
989                 else:
990                     this_method_call = _Call((name, args, kwargs))
991                 _new_parent.method_calls.append(this_method_call)
992
993                 do_method_calls = _new_parent._mock_parent is not None
994                 if do_method_calls:
995                     name = _new_parent._mock_name + '.' + name
996
997             _new_parent.mock_calls.append(this_mock_call)
998             _new_parent = _new_parent._mock_new_parent
999
1000             # use ids here so as not to call __hash__ on the mocks
1001             _new_parent_id = id(_new_parent)
1002             if _new_parent_id in seen:
1003                 break
1004             seen.add(_new_parent_id)
1005
1006         ret_val = DEFAULT
1007         effect = self.side_effect
1008         if effect is not None:
1009             if _is_exception(effect):
1010                 raise effect
1011
1012             if not _callable(effect):
1013                 result = next(effect)
1014                 if _is_exception(result):
1015                     raise result
1016                 return result
1017
1018             ret_val = effect(*args, **kwargs)
1019             if ret_val is DEFAULT:
1020                 ret_val = self.return_value
1021
1022         if (self._mock_wraps is not None and
1023              self._mock_return_value is DEFAULT):
1024             return self._mock_wraps(*args, **kwargs)
1025         if ret_val is DEFAULT:
1026             ret_val = self.return_value
1027         return ret_val
1028
1029
1030
1031 class Mock(CallableMixin, NonCallableMock):
1032     """
1033     Create a new `Mock` object. `Mock` takes several optional arguments
1034     that specify the behaviour of the Mock object:
1035
1036     * `spec`: This can be either a list of strings or an existing object (a
1037       class or instance) that acts as the specification for the mock object. If
1038       you pass in an object then a list of strings is formed by calling dir on
1039       the object (excluding unsupported magic attributes and methods). Accessing
1040       any attribute not in this list will raise an `AttributeError`.
1041
1042       If `spec` is an object (rather than a list of strings) then
1043       `mock.__class__` returns the class of the spec object. This allows mocks
1044       to pass `isinstance` tests.
1045
1046     * `spec_set`: A stricter variant of `spec`. If used, attempting to *set*
1047       or get an attribute on the mock that isn't on the object passed as
1048       `spec_set` will raise an `AttributeError`.
1049
1050     * `side_effect`: A function to be called whenever the Mock is called. See
1051       the `side_effect` attribute. Useful for raising exceptions or
1052       dynamically changing return values. The function is called with the same
1053       arguments as the mock, and unless it returns `DEFAULT`, the return
1054       value of this function is used as the return value.
1055
1056       Alternatively `side_effect` can be an exception class or instance. In
1057       this case the exception will be raised when the mock is called.
1058
1059       If `side_effect` is an iterable then each call to the mock will return
1060       the next value from the iterable. If any of the members of the iterable
1061       are exceptions they will be raised instead of returned.
1062
1063     * `return_value`: The value returned when the mock is called. By default
1064       this is a new Mock (created on first access). See the
1065       `return_value` attribute.
1066
1067     * `wraps`: Item for the mock object to wrap. If `wraps` is not None then
1068       calling the Mock will pass the call through to the wrapped object
1069       (returning the real result). Attribute access on the mock will return a
1070       Mock object that wraps the corresponding attribute of the wrapped object
1071       (so attempting to access an attribute that doesn't exist will raise an
1072       `AttributeError`).
1073
1074       If the mock has an explicit `return_value` set then calls are not passed
1075       to the wrapped object and the `return_value` is returned instead.
1076
1077     * `name`: If the mock has a name then it will be used in the repr of the
1078       mock. This can be useful for debugging. The name is propagated to child
1079       mocks.
1080
1081     Mocks can also be called with arbitrary keyword arguments. These will be
1082     used to set attributes on the mock after it is created.
1083     """
1084
1085
1086
1087 def _dot_lookup(thing, comp, import_path):
1088     try:
1089         return getattr(thing, comp)
1090     except AttributeError:
1091         __import__(import_path)
1092         return getattr(thing, comp)
1093
1094
1095 def _importer(target):
1096     components = target.split('.')
1097     import_path = components.pop(0)
1098     thing = __import__(import_path)
1099
1100     for comp in components:
1101         import_path += ".%s" % comp
1102         thing = _dot_lookup(thing, comp, import_path)
1103     return thing
1104
1105
1106 def _is_started(patcher):
1107     # XXXX horrible
1108     return hasattr(patcher, 'is_local')
1109
1110
1111 class _patch(object):
1112
1113     attribute_name = None
1114     _active_patches = set()
1115
1116     def __init__(
1117             self, getter, attribute, new, spec, create,
1118             spec_set, autospec, new_callable, kwargs
1119         ):
1120         if new_callable is not None:
1121             if new is not DEFAULT:
1122                 raise ValueError(
1123                     "Cannot use 'new' and 'new_callable' together"
1124                 )
1125             if autospec is not None:
1126                 raise ValueError(
1127                     "Cannot use 'autospec' and 'new_callable' together"
1128                 )
1129
1130         self.getter = getter
1131         self.attribute = attribute
1132         self.new = new
1133         self.new_callable = new_callable
1134         self.spec = spec
1135         self.create = create
1136         self.has_local = False
1137         self.spec_set = spec_set
1138         self.autospec = autospec
1139         self.kwargs = kwargs
1140         self.additional_patchers = []
1141
1142
1143     def copy(self):
1144         patcher = _patch(
1145             self.getter, self.attribute, self.new, self.spec,
1146             self.create, self.spec_set,
1147             self.autospec, self.new_callable, self.kwargs
1148         )
1149         patcher.attribute_name = self.attribute_name
1150         patcher.additional_patchers = [
1151             p.copy() for p in self.additional_patchers
1152         ]
1153         return patcher
1154
1155
1156     def __call__(self, func):
1157         if isinstance(func, ClassTypes):
1158             return self.decorate_class(func)
1159         return self.decorate_callable(func)
1160
1161
1162     def decorate_class(self, klass):
1163         for attr in dir(klass):
1164             if not attr.startswith(patch.TEST_PREFIX):
1165                 continue
1166
1167             attr_value = getattr(klass, attr)
1168             if not hasattr(attr_value, "__call__"):
1169                 continue
1170
1171             patcher = self.copy()
1172             setattr(klass, attr, patcher(attr_value))
1173         return klass
1174
1175
1176     def decorate_callable(self, func):
1177         if hasattr(func, 'patchings'):
1178             func.patchings.append(self)
1179             return func
1180
1181         @wraps(func)
1182         def patched(*args, **keywargs):
1183             # don't use a with here (backwards compatability with Python 2.4)
1184             extra_args = []
1185             entered_patchers = []
1186
1187             # can't use try...except...finally because of Python 2.4
1188             # compatibility
1189             exc_info = tuple()
1190             try:
1191                 try:
1192                     for patching in patched.patchings:
1193                         arg = patching.__enter__()
1194                         entered_patchers.append(patching)
1195                         if patching.attribute_name is not None:
1196                             keywargs.update(arg)
1197                         elif patching.new is DEFAULT:
1198                             extra_args.append(arg)
1199
1200                     args += tuple(extra_args)
1201                     return func(*args, **keywargs)
1202                 except:
1203                     if (patching not in entered_patchers and
1204                         _is_started(patching)):
1205                         # the patcher may have been started, but an exception
1206                         # raised whilst entering one of its additional_patchers
1207                         entered_patchers.append(patching)
1208                     # Pass the exception to __exit__
1209                     exc_info = sys.exc_info()
1210                     # re-raise the exception
1211                     raise
1212             finally:
1213                 for patching in reversed(entered_patchers):
1214                     patching.__exit__(*exc_info)
1215
1216         patched.patchings = [self]
1217         if hasattr(func, 'func_code'):
1218             # not in Python 3
1219             patched.compat_co_firstlineno = getattr(
1220                 func, "compat_co_firstlineno",
1221                 func.func_code.co_firstlineno
1222             )
1223         return patched
1224
1225
1226     def get_original(self):
1227         target = self.getter()
1228         name = self.attribute
1229
1230         original = DEFAULT
1231         local = False
1232
1233         try:
1234             original = target.__dict__[name]
1235         except (AttributeError, KeyError):
1236             original = getattr(target, name, DEFAULT)
1237         else:
1238             local = True
1239
1240         if not self.create and original is DEFAULT:
1241             raise AttributeError(
1242                 "%s does not have the attribute %r" % (target, name)
1243             )
1244         return original, local
1245
1246
1247     def __enter__(self):
1248         """Perform the patch."""
1249         new, spec, spec_set = self.new, self.spec, self.spec_set
1250         autospec, kwargs = self.autospec, self.kwargs
1251         new_callable = self.new_callable
1252         self.target = self.getter()
1253
1254         # normalise False to None
1255         if spec is False:
1256             spec = None
1257         if spec_set is False:
1258             spec_set = None
1259         if autospec is False:
1260             autospec = None
1261
1262         if spec is not None and autospec is not None:
1263             raise TypeError("Can't specify spec and autospec")
1264         if ((spec is not None or autospec is not None) and
1265             spec_set not in (True, None)):
1266             raise TypeError("Can't provide explicit spec_set *and* spec or autospec")
1267
1268         original, local = self.get_original()
1269
1270         if new is DEFAULT and autospec is None:
1271             inherit = False
1272             if spec is True:
1273                 # set spec to the object we are replacing
1274                 spec = original
1275                 if spec_set is True:
1276                     spec_set = original
1277                     spec = None
1278             elif spec is not None:
1279                 if spec_set is True:
1280                     spec_set = spec
1281                     spec = None
1282             elif spec_set is True:
1283                 spec_set = original
1284
1285             if spec is not None or spec_set is not None:
1286                 if original is DEFAULT:
1287                     raise TypeError("Can't use 'spec' with create=True")
1288                 if isinstance(original, ClassTypes):
1289                     # If we're patching out a class and there is a spec
1290                     inherit = True
1291
1292             Klass = MagicMock
1293             _kwargs = {}
1294             if new_callable is not None:
1295                 Klass = new_callable
1296             elif spec is not None or spec_set is not None:
1297                 this_spec = spec
1298                 if spec_set is not None:
1299                     this_spec = spec_set
1300                 if _is_list(this_spec):
1301                     not_callable = '__call__' not in this_spec
1302                 else:
1303                     not_callable = not _callable(this_spec)
1304                 if not_callable:
1305                     Klass = NonCallableMagicMock
1306
1307             if spec is not None:
1308                 _kwargs['spec'] = spec
1309             if spec_set is not None:
1310                 _kwargs['spec_set'] = spec_set
1311
1312             # add a name to mocks
1313             if (isinstance(Klass, type) and
1314                 issubclass(Klass, NonCallableMock) and self.attribute):
1315                 _kwargs['name'] = self.attribute
1316
1317             _kwargs.update(kwargs)
1318             new = Klass(**_kwargs)
1319
1320             if inherit and _is_instance_mock(new):
1321                 # we can only tell if the instance should be callable if the
1322                 # spec is not a list
1323                 this_spec = spec
1324                 if spec_set is not None:
1325                     this_spec = spec_set
1326                 if (not _is_list(this_spec) and not
1327                     _instance_callable(this_spec)):
1328                     Klass = NonCallableMagicMock
1329
1330                 _kwargs.pop('name')
1331                 new.return_value = Klass(_new_parent=new, _new_name='()',
1332                                          **_kwargs)
1333         elif autospec is not None:
1334             # spec is ignored, new *must* be default, spec_set is treated
1335             # as a boolean. Should we check spec is not None and that spec_set
1336             # is a bool?
1337             if new is not DEFAULT:
1338                 raise TypeError(
1339                     "autospec creates the mock for you. Can't specify "
1340                     "autospec and new."
1341                 )
1342             if original is DEFAULT:
1343                 raise TypeError("Can't use 'autospec' with create=True")
1344             spec_set = bool(spec_set)
1345             if autospec is True:
1346                 autospec = original
1347
1348             new = create_autospec(autospec, spec_set=spec_set,
1349                                   _name=self.attribute, **kwargs)
1350         elif kwargs:
1351             # can't set keyword args when we aren't creating the mock
1352             # XXXX If new is a Mock we could call new.configure_mock(**kwargs)
1353             raise TypeError("Can't pass kwargs to a mock we aren't creating")
1354
1355         new_attr = new
1356
1357         self.temp_original = original
1358         self.is_local = local
1359         setattr(self.target, self.attribute, new_attr)
1360         if self.attribute_name is not None:
1361             extra_args = {}
1362             if self.new is DEFAULT:
1363                 extra_args[self.attribute_name] =  new
1364             for patching in self.additional_patchers:
1365                 arg = patching.__enter__()
1366                 if patching.new is DEFAULT:
1367                     extra_args.update(arg)
1368             return extra_args
1369
1370         return new
1371
1372
1373     def __exit__(self, *exc_info):
1374         """Undo the patch."""
1375         if not _is_started(self):
1376             raise RuntimeError('stop called on unstarted patcher')
1377
1378         if self.is_local and self.temp_original is not DEFAULT:
1379             setattr(self.target, self.attribute, self.temp_original)
1380         else:
1381             delattr(self.target, self.attribute)
1382             if not self.create and not hasattr(self.target, self.attribute):
1383                 # needed for proxy objects like django settings
1384                 setattr(self.target, self.attribute, self.temp_original)
1385
1386         del self.temp_original
1387         del self.is_local
1388         del self.target
1389         for patcher in reversed(self.additional_patchers):
1390             if _is_started(patcher):
1391                 patcher.__exit__(*exc_info)
1392
1393
1394     def start(self):
1395         """Activate a patch, returning any created mock."""
1396         result = self.__enter__()
1397         self._active_patches.add(self)
1398         return result
1399
1400
1401     def stop(self):
1402         """Stop an active patch."""
1403         self._active_patches.discard(self)
1404         return self.__exit__()
1405
1406
1407
1408 def _get_target(target):
1409     try:
1410         target, attribute = target.rsplit('.', 1)
1411     except (TypeError, ValueError):
1412         raise TypeError("Need a valid target to patch. You supplied: %r" %
1413                         (target,))
1414     getter = lambda: _importer(target)
1415     return getter, attribute
1416
1417
1418 def _patch_object(
1419         target, attribute, new=DEFAULT, spec=None,
1420         create=False, spec_set=None, autospec=None,
1421         new_callable=None, **kwargs
1422     ):
1423     """
1424     patch.object(target, attribute, new=DEFAULT, spec=None, create=False,
1425                  spec_set=None, autospec=None, new_callable=None, **kwargs)
1426
1427     patch the named member (`attribute`) on an object (`target`) with a mock
1428     object.
1429
1430     `patch.object` can be used as a decorator, class decorator or a context
1431     manager. Arguments `new`, `spec`, `create`, `spec_set`,
1432     `autospec` and `new_callable` have the same meaning as for `patch`. Like
1433     `patch`, `patch.object` takes arbitrary keyword arguments for configuring
1434     the mock object it creates.
1435
1436     When used as a class decorator `patch.object` honours `patch.TEST_PREFIX`
1437     for choosing which methods to wrap.
1438     """
1439     getter = lambda: target
1440     return _patch(
1441         getter, attribute, new, spec, create,
1442         spec_set, autospec, new_callable, kwargs
1443     )
1444
1445
1446 def _patch_multiple(target, spec=None, create=False, spec_set=None,
1447                     autospec=None, new_callable=None, **kwargs):
1448     """Perform multiple patches in a single call. It takes the object to be
1449     patched (either as an object or a string to fetch the object by importing)
1450     and keyword arguments for the patches::
1451
1452         with patch.multiple(settings, FIRST_PATCH='one', SECOND_PATCH='two'):
1453             ...
1454
1455     Use `DEFAULT` as the value if you want `patch.multiple` to create
1456     mocks for you. In this case the created mocks are passed into a decorated
1457     function by keyword, and a dictionary is returned when `patch.multiple` is
1458     used as a context manager.
1459
1460     `patch.multiple` can be used as a decorator, class decorator or a context
1461     manager. The arguments `spec`, `spec_set`, `create`,
1462     `autospec` and `new_callable` have the same meaning as for `patch`. These
1463     arguments will be applied to *all* patches done by `patch.multiple`.
1464
1465     When used as a class decorator `patch.multiple` honours `patch.TEST_PREFIX`
1466     for choosing which methods to wrap.
1467     """
1468     if type(target) in (unicode, str):
1469         getter = lambda: _importer(target)
1470     else:
1471         getter = lambda: target
1472
1473     if not kwargs:
1474         raise ValueError(
1475             'Must supply at least one keyword argument with patch.multiple'
1476         )
1477     # need to wrap in a list for python 3, where items is a view
1478     items = list(kwargs.items())
1479     attribute, new = items[0]
1480     patcher = _patch(
1481         getter, attribute, new, spec, create, spec_set,
1482         autospec, new_callable, {}
1483     )
1484     patcher.attribute_name = attribute
1485     for attribute, new in items[1:]:
1486         this_patcher = _patch(
1487             getter, attribute, new, spec, create, spec_set,
1488             autospec, new_callable, {}
1489         )
1490         this_patcher.attribute_name = attribute
1491         patcher.additional_patchers.append(this_patcher)
1492     return patcher
1493
1494
1495 def patch(
1496         target, new=DEFAULT, spec=None, create=False,
1497         spec_set=None, autospec=None, new_callable=None, **kwargs
1498     ):
1499     """
1500     `patch` acts as a function decorator, class decorator or a context
1501     manager. Inside the body of the function or with statement, the `target`
1502     is patched with a `new` object. When the function/with statement exits
1503     the patch is undone.
1504
1505     If `new` is omitted, then the target is replaced with a
1506     `MagicMock`. If `patch` is used as a decorator and `new` is
1507     omitted, the created mock is passed in as an extra argument to the
1508     decorated function. If `patch` is used as a context manager the created
1509     mock is returned by the context manager.
1510
1511     `target` should be a string in the form `'package.module.ClassName'`. The
1512     `target` is imported and the specified object replaced with the `new`
1513     object, so the `target` must be importable from the environment you are
1514     calling `patch` from. The target is imported when the decorated function
1515     is executed, not at decoration time.
1516
1517     The `spec` and `spec_set` keyword arguments are passed to the `MagicMock`
1518     if patch is creating one for you.
1519
1520     In addition you can pass `spec=True` or `spec_set=True`, which causes
1521     patch to pass in the object being mocked as the spec/spec_set object.
1522
1523     `new_callable` allows you to specify a different class, or callable object,
1524     that will be called to create the `new` object. By default `MagicMock` is
1525     used.
1526
1527     A more powerful form of `spec` is `autospec`. If you set `autospec=True`
1528     then the mock with be created with a spec from the object being replaced.
1529     All attributes of the mock will also have the spec of the corresponding
1530     attribute of the object being replaced. Methods and functions being
1531     mocked will have their arguments checked and will raise a `TypeError` if
1532     they are called with the wrong signature. For mocks replacing a class,
1533     their return value (the 'instance') will have the same spec as the class.
1534
1535     Instead of `autospec=True` you can pass `autospec=some_object` to use an
1536     arbitrary object as the spec instead of the one being replaced.
1537
1538     By default `patch` will fail to replace attributes that don't exist. If
1539     you pass in `create=True`, and the attribute doesn't exist, patch will
1540     create the attribute for you when the patched function is called, and
1541     delete it again afterwards. This is useful for writing tests against
1542     attributes that your production code creates at runtime. It is off by by
1543     default because it can be dangerous. With it switched on you can write
1544     passing tests against APIs that don't actually exist!
1545
1546     Patch can be used as a `TestCase` class decorator. It works by
1547     decorating each test method in the class. This reduces the boilerplate
1548     code when your test methods share a common patchings set. `patch` finds
1549     tests by looking for method names that start with `patch.TEST_PREFIX`.
1550     By default this is `test`, which matches the way `unittest` finds tests.
1551     You can specify an alternative prefix by setting `patch.TEST_PREFIX`.
1552
1553     Patch can be used as a context manager, with the with statement. Here the
1554     patching applies to the indented block after the with statement. If you
1555     use "as" then the patched object will be bound to the name after the
1556     "as"; very useful if `patch` is creating a mock object for you.
1557
1558     `patch` takes arbitrary keyword arguments. These will be passed to
1559     the `Mock` (or `new_callable`) on construction.
1560
1561     `patch.dict(...)`, `patch.multiple(...)` and `patch.object(...)` are
1562     available for alternate use-cases.
1563     """
1564     getter, attribute = _get_target(target)
1565     return _patch(
1566         getter, attribute, new, spec, create,
1567         spec_set, autospec, new_callable, kwargs
1568     )
1569
1570
1571 class _patch_dict(object):
1572     """
1573     Patch a dictionary, or dictionary like object, and restore the dictionary
1574     to its original state after the test.
1575
1576     `in_dict` can be a dictionary or a mapping like container. If it is a
1577     mapping then it must at least support getting, setting and deleting items
1578     plus iterating over keys.
1579
1580     `in_dict` can also be a string specifying the name of the dictionary, which
1581     will then be fetched by importing it.
1582
1583     `values` can be a dictionary of values to set in the dictionary. `values`
1584     can also be an iterable of `(key, value)` pairs.
1585
1586     If `clear` is True then the dictionary will be cleared before the new
1587     values are set.
1588
1589     `patch.dict` can also be called with arbitrary keyword arguments to set
1590     values in the dictionary::
1591
1592         with patch.dict('sys.modules', mymodule=Mock(), other_module=Mock()):
1593             ...
1594
1595     `patch.dict` can be used as a context manager, decorator or class
1596     decorator. When used as a class decorator `patch.dict` honours
1597     `patch.TEST_PREFIX` for choosing which methods to wrap.
1598     """
1599
1600     def __init__(self, in_dict, values=(), clear=False, **kwargs):
1601         if isinstance(in_dict, basestring):
1602             in_dict = _importer(in_dict)
1603         self.in_dict = in_dict
1604         # support any argument supported by dict(...) constructor
1605         self.values = dict(values)
1606         self.values.update(kwargs)
1607         self.clear = clear
1608         self._original = None
1609
1610
1611     def __call__(self, f):
1612         if isinstance(f, ClassTypes):
1613             return self.decorate_class(f)
1614         @wraps(f)
1615         def _inner(*args, **kw):
1616             self._patch_dict()
1617             try:
1618                 return f(*args, **kw)
1619             finally:
1620                 self._unpatch_dict()
1621
1622         return _inner
1623
1624
1625     def decorate_class(self, klass):
1626         for attr in dir(klass):
1627             attr_value = getattr(klass, attr)
1628             if (attr.startswith(patch.TEST_PREFIX) and
1629                  hasattr(attr_value, "__call__")):
1630                 decorator = _patch_dict(self.in_dict, self.values, self.clear)
1631                 decorated = decorator(attr_value)
1632                 setattr(klass, attr, decorated)
1633         return klass
1634
1635
1636     def __enter__(self):
1637         """Patch the dict."""
1638         self._patch_dict()
1639
1640
1641     def _patch_dict(self):
1642         values = self.values
1643         in_dict = self.in_dict
1644         clear = self.clear
1645
1646         try:
1647             original = in_dict.copy()
1648         except AttributeError:
1649             # dict like object with no copy method
1650             # must support iteration over keys
1651             original = {}
1652             for key in in_dict:
1653                 original[key] = in_dict[key]
1654         self._original = original
1655
1656         if clear:
1657             _clear_dict(in_dict)
1658
1659         try:
1660             in_dict.update(values)
1661         except AttributeError:
1662             # dict like object with no update method
1663             for key in values:
1664                 in_dict[key] = values[key]
1665
1666
1667     def _unpatch_dict(self):
1668         in_dict = self.in_dict
1669         original = self._original
1670
1671         _clear_dict(in_dict)
1672
1673         try:
1674             in_dict.update(original)
1675         except AttributeError:
1676             for key in original:
1677                 in_dict[key] = original[key]
1678
1679
1680     def __exit__(self, *args):
1681         """Unpatch the dict."""
1682         self._unpatch_dict()
1683         return False
1684
1685     start = __enter__
1686     stop = __exit__
1687
1688
1689 def _clear_dict(in_dict):
1690     try:
1691         in_dict.clear()
1692     except AttributeError:
1693         keys = list(in_dict)
1694         for key in keys:
1695             del in_dict[key]
1696
1697
1698 def _patch_stopall():
1699     """Stop all active patches."""
1700     for patch in list(_patch._active_patches):
1701         patch.stop()
1702
1703
1704 patch.object = _patch_object
1705 patch.dict = _patch_dict
1706 patch.multiple = _patch_multiple
1707 patch.stopall = _patch_stopall
1708 patch.TEST_PREFIX = 'test'
1709
1710 magic_methods = (
1711     "lt le gt ge eq ne "
1712     "getitem setitem delitem "
1713     "len contains iter "
1714     "hash str sizeof "
1715     "enter exit "
1716     "divmod neg pos abs invert "
1717     "complex int float index "
1718     "trunc floor ceil "
1719 )
1720
1721 numerics = "add sub mul div floordiv mod lshift rshift and xor or pow "
1722 inplace = ' '.join('i%s' % n for n in numerics.split())
1723 right = ' '.join('r%s' % n for n in numerics.split())
1724 extra = ''
1725 if inPy3k:
1726     extra = 'bool next '
1727 else:
1728     extra = 'unicode long nonzero oct hex truediv rtruediv '
1729
1730 # not including __prepare__, __instancecheck__, __subclasscheck__
1731 # (as they are metaclass methods)
1732 # __del__ is not supported at all as it causes problems if it exists
1733
1734 _non_defaults = set('__%s__' % method for method in [
1735     'cmp', 'getslice', 'setslice', 'coerce', 'subclasses',
1736     'format', 'get', 'set', 'delete', 'reversed',
1737     'missing', 'reduce', 'reduce_ex', 'getinitargs',
1738     'getnewargs', 'getstate', 'setstate', 'getformat',
1739     'setformat', 'repr', 'dir'
1740 ])
1741
1742
1743 def _get_method(name, func):
1744     "Turns a callable object (like a mock) into a real function"
1745     def method(self, *args, **kw):
1746         return func(self, *args, **kw)
1747     method.__name__ = name
1748     return method
1749
1750
1751 _magics = set(
1752     '__%s__' % method for method in
1753     ' '.join([magic_methods, numerics, inplace, right, extra]).split()
1754 )
1755
1756 _all_magics = _magics | _non_defaults
1757
1758 _unsupported_magics = set([
1759     '__getattr__', '__setattr__',
1760     '__init__', '__new__', '__prepare__'
1761     '__instancecheck__', '__subclasscheck__',
1762     '__del__'
1763 ])
1764
1765 _calculate_return_value = {
1766     '__hash__': lambda self: object.__hash__(self),
1767     '__str__': lambda self: object.__str__(self),
1768     '__sizeof__': lambda self: object.__sizeof__(self),
1769     '__unicode__': lambda self: unicode(object.__str__(self)),
1770 }
1771
1772 _return_values = {
1773     '__lt__': NotImplemented,
1774     '__gt__': NotImplemented,
1775     '__le__': NotImplemented,
1776     '__ge__': NotImplemented,
1777     '__int__': 1,
1778     '__contains__': False,
1779     '__len__': 0,
1780     '__exit__': False,
1781     '__complex__': 1j,
1782     '__float__': 1.0,
1783     '__bool__': True,
1784     '__nonzero__': True,
1785     '__oct__': '1',
1786     '__hex__': '0x1',
1787     '__long__': long(1),
1788     '__index__': 1,
1789 }
1790
1791
1792 def _get_eq(self):
1793     def __eq__(other):
1794         ret_val = self.__eq__._mock_return_value
1795         if ret_val is not DEFAULT:
1796             return ret_val
1797         return self is other
1798     return __eq__
1799
1800 def _get_ne(self):
1801     def __ne__(other):
1802         if self.__ne__._mock_return_value is not DEFAULT:
1803             return DEFAULT
1804         return self is not other
1805     return __ne__
1806
1807 def _get_iter(self):
1808     def __iter__():
1809         ret_val = self.__iter__._mock_return_value
1810         if ret_val is DEFAULT:
1811             return iter([])
1812         # if ret_val was already an iterator, then calling iter on it should
1813         # return the iterator unchanged
1814         return iter(ret_val)
1815     return __iter__
1816
1817 _side_effect_methods = {
1818     '__eq__': _get_eq,
1819     '__ne__': _get_ne,
1820     '__iter__': _get_iter,
1821 }
1822
1823
1824
1825 def _set_return_value(mock, method, name):
1826     fixed = _return_values.get(name, DEFAULT)
1827     if fixed is not DEFAULT:
1828         method.return_value = fixed
1829         return
1830
1831     return_calulator = _calculate_return_value.get(name)
1832     if return_calulator is not None:
1833         try:
1834             return_value = return_calulator(mock)
1835         except AttributeError:
1836             # XXXX why do we return AttributeError here?
1837             #      set it as a side_effect instead?
1838             return_value = AttributeError(name)
1839         method.return_value = return_value
1840         return
1841
1842     side_effector = _side_effect_methods.get(name)
1843     if side_effector is not None:
1844         method.side_effect = side_effector(mock)
1845
1846
1847
1848 class MagicMixin(object):
1849     def __init__(self, *args, **kw):
1850         _super(MagicMixin, self).__init__(*args, **kw)
1851         self._mock_set_magics()
1852
1853
1854     def _mock_set_magics(self):
1855         these_magics = _magics
1856
1857         if self._mock_methods is not None:
1858             these_magics = _magics.intersection(self._mock_methods)
1859
1860             remove_magics = set()
1861             remove_magics = _magics - these_magics
1862
1863             for entry in remove_magics:
1864                 if entry in type(self).__dict__:
1865                     # remove unneeded magic methods
1866                     delattr(self, entry)
1867
1868         # don't overwrite existing attributes if called a second time
1869         these_magics = these_magics - set(type(self).__dict__)
1870
1871         _type = type(self)
1872         for entry in these_magics:
1873             setattr(_type, entry, MagicProxy(entry, self))
1874
1875
1876
1877 class NonCallableMagicMock(MagicMixin, NonCallableMock):
1878     """A version of `MagicMock` that isn't callable."""
1879     def mock_add_spec(self, spec, spec_set=False):
1880         """Add a spec to a mock. `spec` can either be an object or a
1881         list of strings. Only attributes on the `spec` can be fetched as
1882         attributes from the mock.
1883
1884         If `spec_set` is True then only attributes on the spec can be set."""
1885         self._mock_add_spec(spec, spec_set)
1886         self._mock_set_magics()
1887
1888
1889
1890 class MagicMock(MagicMixin, Mock):
1891     """
1892     MagicMock is a subclass of Mock with default implementations
1893     of most of the magic methods. You can use MagicMock without having to
1894     configure the magic methods yourself.
1895
1896     If you use the `spec` or `spec_set` arguments then *only* magic
1897     methods that exist in the spec will be created.
1898
1899     Attributes and the return value of a `MagicMock` will also be `MagicMocks`.
1900     """
1901     def mock_add_spec(self, spec, spec_set=False):
1902         """Add a spec to a mock. `spec` can either be an object or a
1903         list of strings. Only attributes on the `spec` can be fetched as
1904         attributes from the mock.
1905
1906         If `spec_set` is True then only attributes on the spec can be set."""
1907         self._mock_add_spec(spec, spec_set)
1908         self._mock_set_magics()
1909
1910
1911
1912 class MagicProxy(object):
1913     def __init__(self, name, parent):
1914         self.name = name
1915         self.parent = parent
1916
1917     def __call__(self, *args, **kwargs):
1918         m = self.create_mock()
1919         return m(*args, **kwargs)
1920
1921     def create_mock(self):
1922         entry = self.name
1923         parent = self.parent
1924         m = parent._get_child_mock(name=entry, _new_name=entry,
1925                                    _new_parent=parent)
1926         setattr(parent, entry, m)
1927         _set_return_value(parent, m, entry)
1928         return m
1929
1930     def __get__(self, obj, _type=None):
1931         return self.create_mock()
1932
1933
1934
1935 class _ANY(object):
1936     "A helper object that compares equal to everything."
1937
1938     def __eq__(self, other):
1939         return True
1940
1941     def __ne__(self, other):
1942         return False
1943
1944     def __repr__(self):
1945         return '<ANY>'
1946
1947 ANY = _ANY()
1948
1949
1950
1951 def _format_call_signature(name, args, kwargs):
1952     message = '%s(%%s)' % name
1953     formatted_args = ''
1954     args_string = ', '.join([repr(arg) for arg in args])
1955     kwargs_string = ', '.join([
1956         '%s=%r' % (key, value) for key, value in kwargs.items()
1957     ])
1958     if args_string:
1959         formatted_args = args_string
1960     if kwargs_string:
1961         if formatted_args:
1962             formatted_args += ', '
1963         formatted_args += kwargs_string
1964
1965     return message % formatted_args
1966
1967
1968
1969 class _Call(tuple):
1970     """
1971     A tuple for holding the results of a call to a mock, either in the form
1972     `(args, kwargs)` or `(name, args, kwargs)`.
1973
1974     If args or kwargs are empty then a call tuple will compare equal to
1975     a tuple without those values. This makes comparisons less verbose::
1976
1977         _Call(('name', (), {})) == ('name',)
1978         _Call(('name', (1,), {})) == ('name', (1,))
1979         _Call(((), {'a': 'b'})) == ({'a': 'b'},)
1980
1981     The `_Call` object provides a useful shortcut for comparing with call::
1982
1983         _Call(((1, 2), {'a': 3})) == call(1, 2, a=3)
1984         _Call(('foo', (1, 2), {'a': 3})) == call.foo(1, 2, a=3)
1985
1986     If the _Call has no name then it will match any name.
1987     """
1988     def __new__(cls, value=(), name=None, parent=None, two=False,
1989                 from_kall=True):
1990         name = ''
1991         args = ()
1992         kwargs = {}
1993         _len = len(value)
1994         if _len == 3:
1995             name, args, kwargs = value
1996         elif _len == 2:
1997             first, second = value
1998             if isinstance(first, basestring):
1999                 name = first
2000                 if isinstance(second, tuple):
2001                     args = second
2002                 else:
2003                     kwargs = second
2004             else:
2005                 args, kwargs = first, second
2006         elif _len == 1:
2007             value, = value
2008             if isinstance(value, basestring):
2009                 name = value
2010             elif isinstance(value, tuple):
2011                 args = value
2012             else:
2013                 kwargs = value
2014
2015         if two:
2016             return tuple.__new__(cls, (args, kwargs))
2017
2018         return tuple.__new__(cls, (name, args, kwargs))
2019
2020
2021     def __init__(self, value=(), name=None, parent=None, two=False,
2022                  from_kall=True):
2023         self.name = name
2024         self.parent = parent
2025         self.from_kall = from_kall
2026
2027
2028     def __eq__(self, other):
2029         if other is ANY:
2030             return True
2031         try:
2032             len_other = len(other)
2033         except TypeError:
2034             return False
2035
2036         self_name = ''
2037         if len(self) == 2:
2038             self_args, self_kwargs = self
2039         else:
2040             self_name, self_args, self_kwargs = self
2041
2042         other_name = ''
2043         if len_other == 0:
2044             other_args, other_kwargs = (), {}
2045         elif len_other == 3:
2046             other_name, other_args, other_kwargs = other
2047         elif len_other == 1:
2048             value, = other
2049             if isinstance(value, tuple):
2050                 other_args = value
2051                 other_kwargs = {}
2052             elif isinstance(value, basestring):
2053                 other_name = value
2054                 other_args, other_kwargs = (), {}
2055             else:
2056                 other_args = ()
2057                 other_kwargs = value
2058         else:
2059             # len 2
2060             # could be (name, args) or (name, kwargs) or (args, kwargs)
2061             first, second = other
2062             if isinstance(first, basestring):
2063                 other_name = first
2064                 if isinstance(second, tuple):
2065                     other_args, other_kwargs = second, {}
2066                 else:
2067                     other_args, other_kwargs = (), second
2068             else:
2069                 other_args, other_kwargs = first, second
2070
2071         if self_name and other_name != self_name:
2072             return False
2073
2074         # this order is important for ANY to work!
2075         return (other_args, other_kwargs) == (self_args, self_kwargs)
2076
2077
2078     def __ne__(self, other):
2079         return not self.__eq__(other)
2080
2081
2082     def __call__(self, *args, **kwargs):
2083         if self.name is None:
2084             return _Call(('', args, kwargs), name='()')
2085
2086         name = self.name + '()'
2087         return _Call((self.name, args, kwargs), name=name, parent=self)
2088
2089
2090     def __getattr__(self, attr):
2091         if self.name is None:
2092             return _Call(name=attr, from_kall=False)
2093         name = '%s.%s' % (self.name, attr)
2094         return _Call(name=name, parent=self, from_kall=False)
2095
2096
2097     def __repr__(self):
2098         if not self.from_kall:
2099             name = self.name or 'call'
2100             if name.startswith('()'):
2101                 name = 'call%s' % name
2102             return name
2103
2104         if len(self) == 2:
2105             name = 'call'
2106             args, kwargs = self
2107         else:
2108             name, args, kwargs = self
2109             if not name:
2110                 name = 'call'
2111             elif not name.startswith('()'):
2112                 name = 'call.%s' % name
2113             else:
2114                 name = 'call%s' % name
2115         return _format_call_signature(name, args, kwargs)
2116
2117
2118     def call_list(self):
2119         """For a call object that represents multiple calls, `call_list`
2120         returns a list of all the intermediate calls as well as the
2121         final call."""
2122         vals = []
2123         thing = self
2124         while thing is not None:
2125             if thing.from_kall:
2126                 vals.append(thing)
2127             thing = thing.parent
2128         return _CallList(reversed(vals))
2129
2130
2131 call = _Call(from_kall=False)
2132
2133
2134
2135 def create_autospec(spec, spec_set=False, instance=False, _parent=None,
2136                     _name=None, **kwargs):
2137     """Create a mock object using another object as a spec. Attributes on the
2138     mock will use the corresponding attribute on the `spec` object as their
2139     spec.
2140
2141     Functions or methods being mocked will have their arguments checked
2142     to check that they are called with the correct signature.
2143
2144     If `spec_set` is True then attempting to set attributes that don't exist
2145     on the spec object will raise an `AttributeError`.
2146
2147     If a class is used as a spec then the return value of the mock (the
2148     instance of the class) will have the same spec. You can use a class as the
2149     spec for an instance object by passing `instance=True`. The returned mock
2150     will only be callable if instances of the mock are callable.
2151
2152     `create_autospec` also takes arbitrary keyword arguments that are passed to
2153     the constructor of the created mock."""
2154     if _is_list(spec):
2155         # can't pass a list instance to the mock constructor as it will be
2156         # interpreted as a list of strings
2157         spec = type(spec)
2158
2159     is_type = isinstance(spec, ClassTypes)
2160
2161     _kwargs = {'spec': spec}
2162     if spec_set:
2163         _kwargs = {'spec_set': spec}
2164     elif spec is None:
2165         # None we mock with a normal mock without a spec
2166         _kwargs = {}
2167
2168     _kwargs.update(kwargs)
2169
2170     Klass = MagicMock
2171     if type(spec) in DescriptorTypes:
2172         # descriptors don't have a spec
2173         # because we don't know what type they return
2174         _kwargs = {}
2175     elif not _callable(spec):
2176         Klass = NonCallableMagicMock
2177     elif is_type and instance and not _instance_callable(spec):
2178         Klass = NonCallableMagicMock
2179
2180     _new_name = _name
2181     if _parent is None:
2182         # for a top level object no _new_name should be set
2183         _new_name = ''
2184
2185     mock = Klass(parent=_parent, _new_parent=_parent, _new_name=_new_name,
2186                  name=_name, **_kwargs)
2187
2188     if isinstance(spec, FunctionTypes):
2189         # should only happen at the top level because we don't
2190         # recurse for functions
2191         mock = _set_signature(mock, spec)
2192     else:
2193         _check_signature(spec, mock, is_type, instance)
2194
2195     if _parent is not None and not instance:
2196         _parent._mock_children[_name] = mock
2197
2198     if is_type and not instance and 'return_value' not in kwargs:
2199         mock.return_value = create_autospec(spec, spec_set, instance=True,
2200                                             _name='()', _parent=mock)
2201
2202     for entry in dir(spec):
2203         if _is_magic(entry):
2204             # MagicMock already does the useful magic methods for us
2205             continue
2206
2207         if isinstance(spec, FunctionTypes) and entry in FunctionAttributes:
2208             # allow a mock to actually be a function
2209             continue
2210
2211         # XXXX do we need a better way of getting attributes without
2212         # triggering code execution (?) Probably not - we need the actual
2213         # object to mock it so we would rather trigger a property than mock
2214         # the property descriptor. Likewise we want to mock out dynamically
2215         # provided attributes.
2216         # XXXX what about attributes that raise exceptions other than
2217         # AttributeError on being fetched?
2218         # we could be resilient against it, or catch and propagate the
2219         # exception when the attribute is fetched from the mock
2220         try:
2221             original = getattr(spec, entry)
2222         except AttributeError:
2223             continue
2224
2225         kwargs = {'spec': original}
2226         if spec_set:
2227             kwargs = {'spec_set': original}
2228
2229         if not isinstance(original, FunctionTypes):
2230             new = _SpecState(original, spec_set, mock, entry, instance)
2231             mock._mock_children[entry] = new
2232         else:
2233             parent = mock
2234             if isinstance(spec, FunctionTypes):
2235                 parent = mock.mock
2236
2237             new = MagicMock(parent=parent, name=entry, _new_name=entry,
2238                             _new_parent=parent, **kwargs)
2239             mock._mock_children[entry] = new
2240             skipfirst = _must_skip(spec, entry, is_type)
2241             _check_signature(original, new, skipfirst=skipfirst)
2242
2243         # so functions created with _set_signature become instance attributes,
2244         # *plus* their underlying mock exists in _mock_children of the parent
2245         # mock. Adding to _mock_children may be unnecessary where we are also
2246         # setting as an instance attribute?
2247         if isinstance(new, FunctionTypes):
2248             setattr(mock, entry, new)
2249
2250     return mock
2251
2252
2253 def _must_skip(spec, entry, is_type):
2254     if not isinstance(spec, ClassTypes):
2255         if entry in getattr(spec, '__dict__', {}):
2256             # instance attribute - shouldn't skip
2257             return False
2258         spec = spec.__class__
2259     if not hasattr(spec, '__mro__'):
2260         # old style class: can't have descriptors anyway
2261         return is_type
2262
2263     for klass in spec.__mro__:
2264         result = klass.__dict__.get(entry, DEFAULT)
2265         if result is DEFAULT:
2266             continue
2267         if isinstance(result, (staticmethod, classmethod)):
2268             return False
2269         return is_type
2270
2271     # shouldn't get here unless function is a dynamically provided attribute
2272     # XXXX untested behaviour
2273     return is_type
2274
2275
2276 def _get_class(obj):
2277     try:
2278         return obj.__class__
2279     except AttributeError:
2280         # in Python 2, _sre.SRE_Pattern objects have no __class__
2281         return type(obj)
2282
2283
2284 class _SpecState(object):
2285
2286     def __init__(self, spec, spec_set=False, parent=None,
2287                  name=None, ids=None, instance=False):
2288         self.spec = spec
2289         self.ids = ids
2290         self.spec_set = spec_set
2291         self.parent = parent
2292         self.instance = instance
2293         self.name = name
2294
2295
2296 FunctionTypes = (
2297     # python function
2298     type(create_autospec),
2299     # instance method
2300     type(ANY.__eq__),
2301     # unbound method
2302     type(_ANY.__eq__),
2303 )
2304
2305 FunctionAttributes = set([
2306     'func_closure',
2307     'func_code',
2308     'func_defaults',
2309     'func_dict',
2310     'func_doc',
2311     'func_globals',
2312     'func_name',
2313 ])
2314
2315
2316 file_spec = None
2317
2318
2319 def mock_open(mock=None, read_data=''):
2320     """
2321     A helper function to create a mock to replace the use of `open`. It works
2322     for `open` called directly or used as a context manager.
2323
2324     The `mock` argument is the mock object to configure. If `None` (the
2325     default) then a `MagicMock` will be created for you, with the API limited
2326     to methods or attributes available on standard file handles.
2327
2328     `read_data` is a string for the `read` method of the file handle to return.
2329     This is an empty string by default.
2330     """
2331     global file_spec
2332     if file_spec is None:
2333         # set on first use
2334         if inPy3k:
2335             import _io
2336             file_spec = list(set(dir(_io.TextIOWrapper)).union(set(dir(_io.BytesIO))))
2337         else:
2338             file_spec = file
2339
2340     if mock is None:
2341         mock = MagicMock(name='open', spec=open)
2342
2343     handle = MagicMock(spec=file_spec)
2344     handle.write.return_value = None
2345     handle.__enter__.return_value = handle
2346     handle.read.return_value = read_data
2347
2348     mock.return_value = handle
2349     return mock
2350
2351
2352 class PropertyMock(Mock):
2353     """
2354     A mock intended to be used as a property, or other descriptor, on a class.
2355     `PropertyMock` provides `__get__` and `__set__` methods so you can specify
2356     a return value when it is fetched.
2357
2358     Fetching a `PropertyMock` instance from an object calls the mock, with
2359     no args. Setting it calls the mock with the value being set.
2360     """
2361     def _get_child_mock(self, **kwargs):
2362         return MagicMock(**kwargs)
2363
2364     def __get__(self, obj, obj_type):
2365         return self()
2366     def __set__(self, obj, val):
2367         self(val)