summaryrefslogtreecommitdiffstats
path: root/contrib/python/PyHamcrest/py3/patches/03-pr54.patch
blob: a4ff77bf863e0f8438f016217060061d98c4b087 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
From 178dba673b36e36ca4257ecc8f0590b81334775c Mon Sep 17 00:00:00 2001
From: "[email protected]" <[email protected]>
Date: Mon, 11 May 2015 15:28:54 +0200
Subject: [PATCH] Make instance_of work with tuple like isinstance and
 unittest's assertIsInstance

---
 hamcrest/core/core/isinstanceof.py             | 11 ++++++++---
 hamcrest/core/helpers/wrap_matcher.py          |  3 +++
 tests/hamcrest_unit_test/core/isinstanceof_test.py |  3 +++
 3 files changed, 14 insertions(+), 3 deletions(-)

diff --git a/hamcrest/core/core/isinstanceof.py b/hamcrest/core/core/isinstanceof.py
index c96fdf31..f8eb4a2f 100644
--- a/hamcrest/core/core/isinstanceof.py
+++ b/hamcrest/core/core/isinstanceof.py
@@ -11,21 +11,26 @@ class IsInstanceOf(BaseMatcher):
 
     def __init__(self, expected_type):
         if not is_matchable_type(expected_type):
-            raise TypeError('IsInstanceOf requires type')
+            raise TypeError('IsInstanceOf requires type or a tuple of classes and types')
         self.expected_type = expected_type
 
     def _matches(self, item):
         return isinstance(item, self.expected_type)
 
     def describe_to(self, description):
+        try:
+            type_description = self.expected_type.__name__
+        except AttributeError:
+            type_description = "one of %s" % ",".join(str(e) for e in self.expected_type)
         description.append_text('an instance of ')              \
-                    .append_text(self.expected_type.__name__)
+                    .append_text(type_description)
 
 
 def instance_of(atype):
     """Matches if object is an instance of, or inherits from, a given type.
 
-    :param atype: The type to compare against as the expected type.
+    :param atype: The type to compare against as the expected type or a tuple
+        of types.
 
     This matcher checks whether the evaluated object is an instance of
     ``atype`` or an instance of any class that inherits from ``atype``.
diff --git a/hamcrest/core/helpers/wrap_matcher.py b/hamcrest/core/helpers/wrap_matcher.py
index 1ec9ab58..587ae4c6 100644
--- a/hamcrest/core/helpers/wrap_matcher.py
+++ b/hamcrest/core/helpers/wrap_matcher.py
@@ -28,4 +28,7 @@ def is_matchable_type(expected_type):
     if isinstance(expected_type, six.class_types):
         return True
 
+    if isinstance(expected_type, tuple) and all(map(is_matchable_type, expected_type)):
+        return True
+
     return False