1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/python/mock-1.0.0/tests/testhelpers.py Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,940 @@ 1.4 +# Copyright (C) 2007-2012 Michael Foord & the mock team 1.5 +# E-mail: fuzzyman AT voidspace DOT org DOT uk 1.6 +# http://www.voidspace.org.uk/python/mock/ 1.7 + 1.8 +from tests.support import unittest2, inPy3k 1.9 + 1.10 +from mock import ( 1.11 + call, _Call, create_autospec, MagicMock, 1.12 + Mock, ANY, _CallList, patch, PropertyMock 1.13 +) 1.14 + 1.15 +from datetime import datetime 1.16 + 1.17 +class SomeClass(object): 1.18 + def one(self, a, b): 1.19 + pass 1.20 + def two(self): 1.21 + pass 1.22 + def three(self, a=None): 1.23 + pass 1.24 + 1.25 + 1.26 + 1.27 +class AnyTest(unittest2.TestCase): 1.28 + 1.29 + def test_any(self): 1.30 + self.assertEqual(ANY, object()) 1.31 + 1.32 + mock = Mock() 1.33 + mock(ANY) 1.34 + mock.assert_called_with(ANY) 1.35 + 1.36 + mock = Mock() 1.37 + mock(foo=ANY) 1.38 + mock.assert_called_with(foo=ANY) 1.39 + 1.40 + def test_repr(self): 1.41 + self.assertEqual(repr(ANY), '<ANY>') 1.42 + self.assertEqual(str(ANY), '<ANY>') 1.43 + 1.44 + 1.45 + def test_any_and_datetime(self): 1.46 + mock = Mock() 1.47 + mock(datetime.now(), foo=datetime.now()) 1.48 + 1.49 + mock.assert_called_with(ANY, foo=ANY) 1.50 + 1.51 + 1.52 + def test_any_mock_calls_comparison_order(self): 1.53 + mock = Mock() 1.54 + d = datetime.now() 1.55 + class Foo(object): 1.56 + def __eq__(self, other): 1.57 + return False 1.58 + def __ne__(self, other): 1.59 + return True 1.60 + 1.61 + for d in datetime.now(), Foo(): 1.62 + mock.reset_mock() 1.63 + 1.64 + mock(d, foo=d, bar=d) 1.65 + mock.method(d, zinga=d, alpha=d) 1.66 + mock().method(a1=d, z99=d) 1.67 + 1.68 + expected = [ 1.69 + call(ANY, foo=ANY, bar=ANY), 1.70 + call.method(ANY, zinga=ANY, alpha=ANY), 1.71 + call(), call().method(a1=ANY, z99=ANY) 1.72 + ] 1.73 + self.assertEqual(expected, mock.mock_calls) 1.74 + self.assertEqual(mock.mock_calls, expected) 1.75 + 1.76 + 1.77 + 1.78 +class CallTest(unittest2.TestCase): 1.79 + 1.80 + def test_call_with_call(self): 1.81 + kall = _Call() 1.82 + self.assertEqual(kall, _Call()) 1.83 + self.assertEqual(kall, _Call(('',))) 1.84 + self.assertEqual(kall, _Call(((),))) 1.85 + self.assertEqual(kall, _Call(({},))) 1.86 + self.assertEqual(kall, _Call(('', ()))) 1.87 + self.assertEqual(kall, _Call(('', {}))) 1.88 + self.assertEqual(kall, _Call(('', (), {}))) 1.89 + self.assertEqual(kall, _Call(('foo',))) 1.90 + self.assertEqual(kall, _Call(('bar', ()))) 1.91 + self.assertEqual(kall, _Call(('baz', {}))) 1.92 + self.assertEqual(kall, _Call(('spam', (), {}))) 1.93 + 1.94 + kall = _Call(((1, 2, 3),)) 1.95 + self.assertEqual(kall, _Call(((1, 2, 3),))) 1.96 + self.assertEqual(kall, _Call(('', (1, 2, 3)))) 1.97 + self.assertEqual(kall, _Call(((1, 2, 3), {}))) 1.98 + self.assertEqual(kall, _Call(('', (1, 2, 3), {}))) 1.99 + 1.100 + kall = _Call(((1, 2, 4),)) 1.101 + self.assertNotEqual(kall, _Call(('', (1, 2, 3)))) 1.102 + self.assertNotEqual(kall, _Call(('', (1, 2, 3), {}))) 1.103 + 1.104 + kall = _Call(('foo', (1, 2, 4),)) 1.105 + self.assertNotEqual(kall, _Call(('', (1, 2, 4)))) 1.106 + self.assertNotEqual(kall, _Call(('', (1, 2, 4), {}))) 1.107 + self.assertNotEqual(kall, _Call(('bar', (1, 2, 4)))) 1.108 + self.assertNotEqual(kall, _Call(('bar', (1, 2, 4), {}))) 1.109 + 1.110 + kall = _Call(({'a': 3},)) 1.111 + self.assertEqual(kall, _Call(('', (), {'a': 3}))) 1.112 + self.assertEqual(kall, _Call(('', {'a': 3}))) 1.113 + self.assertEqual(kall, _Call(((), {'a': 3}))) 1.114 + self.assertEqual(kall, _Call(({'a': 3},))) 1.115 + 1.116 + 1.117 + def test_empty__Call(self): 1.118 + args = _Call() 1.119 + 1.120 + self.assertEqual(args, ()) 1.121 + self.assertEqual(args, ('foo',)) 1.122 + self.assertEqual(args, ((),)) 1.123 + self.assertEqual(args, ('foo', ())) 1.124 + self.assertEqual(args, ('foo',(), {})) 1.125 + self.assertEqual(args, ('foo', {})) 1.126 + self.assertEqual(args, ({},)) 1.127 + 1.128 + 1.129 + def test_named_empty_call(self): 1.130 + args = _Call(('foo', (), {})) 1.131 + 1.132 + self.assertEqual(args, ('foo',)) 1.133 + self.assertEqual(args, ('foo', ())) 1.134 + self.assertEqual(args, ('foo',(), {})) 1.135 + self.assertEqual(args, ('foo', {})) 1.136 + 1.137 + self.assertNotEqual(args, ((),)) 1.138 + self.assertNotEqual(args, ()) 1.139 + self.assertNotEqual(args, ({},)) 1.140 + self.assertNotEqual(args, ('bar',)) 1.141 + self.assertNotEqual(args, ('bar', ())) 1.142 + self.assertNotEqual(args, ('bar', {})) 1.143 + 1.144 + 1.145 + def test_call_with_args(self): 1.146 + args = _Call(((1, 2, 3), {})) 1.147 + 1.148 + self.assertEqual(args, ((1, 2, 3),)) 1.149 + self.assertEqual(args, ('foo', (1, 2, 3))) 1.150 + self.assertEqual(args, ('foo', (1, 2, 3), {})) 1.151 + self.assertEqual(args, ((1, 2, 3), {})) 1.152 + 1.153 + 1.154 + def test_named_call_with_args(self): 1.155 + args = _Call(('foo', (1, 2, 3), {})) 1.156 + 1.157 + self.assertEqual(args, ('foo', (1, 2, 3))) 1.158 + self.assertEqual(args, ('foo', (1, 2, 3), {})) 1.159 + 1.160 + self.assertNotEqual(args, ((1, 2, 3),)) 1.161 + self.assertNotEqual(args, ((1, 2, 3), {})) 1.162 + 1.163 + 1.164 + def test_call_with_kwargs(self): 1.165 + args = _Call(((), dict(a=3, b=4))) 1.166 + 1.167 + self.assertEqual(args, (dict(a=3, b=4),)) 1.168 + self.assertEqual(args, ('foo', dict(a=3, b=4))) 1.169 + self.assertEqual(args, ('foo', (), dict(a=3, b=4))) 1.170 + self.assertEqual(args, ((), dict(a=3, b=4))) 1.171 + 1.172 + 1.173 + def test_named_call_with_kwargs(self): 1.174 + args = _Call(('foo', (), dict(a=3, b=4))) 1.175 + 1.176 + self.assertEqual(args, ('foo', dict(a=3, b=4))) 1.177 + self.assertEqual(args, ('foo', (), dict(a=3, b=4))) 1.178 + 1.179 + self.assertNotEqual(args, (dict(a=3, b=4),)) 1.180 + self.assertNotEqual(args, ((), dict(a=3, b=4))) 1.181 + 1.182 + 1.183 + def test_call_with_args_call_empty_name(self): 1.184 + args = _Call(((1, 2, 3), {})) 1.185 + self.assertEqual(args, call(1, 2, 3)) 1.186 + self.assertEqual(call(1, 2, 3), args) 1.187 + self.assertTrue(call(1, 2, 3) in [args]) 1.188 + 1.189 + 1.190 + def test_call_ne(self): 1.191 + self.assertNotEqual(_Call(((1, 2, 3),)), call(1, 2)) 1.192 + self.assertFalse(_Call(((1, 2, 3),)) != call(1, 2, 3)) 1.193 + self.assertTrue(_Call(((1, 2), {})) != call(1, 2, 3)) 1.194 + 1.195 + 1.196 + def test_call_non_tuples(self): 1.197 + kall = _Call(((1, 2, 3),)) 1.198 + for value in 1, None, self, int: 1.199 + self.assertNotEqual(kall, value) 1.200 + self.assertFalse(kall == value) 1.201 + 1.202 + 1.203 + def test_repr(self): 1.204 + self.assertEqual(repr(_Call()), 'call()') 1.205 + self.assertEqual(repr(_Call(('foo',))), 'call.foo()') 1.206 + 1.207 + self.assertEqual(repr(_Call(((1, 2, 3), {'a': 'b'}))), 1.208 + "call(1, 2, 3, a='b')") 1.209 + self.assertEqual(repr(_Call(('bar', (1, 2, 3), {'a': 'b'}))), 1.210 + "call.bar(1, 2, 3, a='b')") 1.211 + 1.212 + self.assertEqual(repr(call), 'call') 1.213 + self.assertEqual(str(call), 'call') 1.214 + 1.215 + self.assertEqual(repr(call()), 'call()') 1.216 + self.assertEqual(repr(call(1)), 'call(1)') 1.217 + self.assertEqual(repr(call(zz='thing')), "call(zz='thing')") 1.218 + 1.219 + self.assertEqual(repr(call().foo), 'call().foo') 1.220 + self.assertEqual(repr(call(1).foo.bar(a=3).bing), 1.221 + 'call().foo.bar().bing') 1.222 + self.assertEqual( 1.223 + repr(call().foo(1, 2, a=3)), 1.224 + "call().foo(1, 2, a=3)" 1.225 + ) 1.226 + self.assertEqual(repr(call()()), "call()()") 1.227 + self.assertEqual(repr(call(1)(2)), "call()(2)") 1.228 + self.assertEqual( 1.229 + repr(call()().bar().baz.beep(1)), 1.230 + "call()().bar().baz.beep(1)" 1.231 + ) 1.232 + 1.233 + 1.234 + def test_call(self): 1.235 + self.assertEqual(call(), ('', (), {})) 1.236 + self.assertEqual(call('foo', 'bar', one=3, two=4), 1.237 + ('', ('foo', 'bar'), {'one': 3, 'two': 4})) 1.238 + 1.239 + mock = Mock() 1.240 + mock(1, 2, 3) 1.241 + mock(a=3, b=6) 1.242 + self.assertEqual(mock.call_args_list, 1.243 + [call(1, 2, 3), call(a=3, b=6)]) 1.244 + 1.245 + def test_attribute_call(self): 1.246 + self.assertEqual(call.foo(1), ('foo', (1,), {})) 1.247 + self.assertEqual(call.bar.baz(fish='eggs'), 1.248 + ('bar.baz', (), {'fish': 'eggs'})) 1.249 + 1.250 + mock = Mock() 1.251 + mock.foo(1, 2 ,3) 1.252 + mock.bar.baz(a=3, b=6) 1.253 + self.assertEqual(mock.method_calls, 1.254 + [call.foo(1, 2, 3), call.bar.baz(a=3, b=6)]) 1.255 + 1.256 + 1.257 + def test_extended_call(self): 1.258 + result = call(1).foo(2).bar(3, a=4) 1.259 + self.assertEqual(result, ('().foo().bar', (3,), dict(a=4))) 1.260 + 1.261 + mock = MagicMock() 1.262 + mock(1, 2, a=3, b=4) 1.263 + self.assertEqual(mock.call_args, call(1, 2, a=3, b=4)) 1.264 + self.assertNotEqual(mock.call_args, call(1, 2, 3)) 1.265 + 1.266 + self.assertEqual(mock.call_args_list, [call(1, 2, a=3, b=4)]) 1.267 + self.assertEqual(mock.mock_calls, [call(1, 2, a=3, b=4)]) 1.268 + 1.269 + mock = MagicMock() 1.270 + mock.foo(1).bar()().baz.beep(a=6) 1.271 + 1.272 + last_call = call.foo(1).bar()().baz.beep(a=6) 1.273 + self.assertEqual(mock.mock_calls[-1], last_call) 1.274 + self.assertEqual(mock.mock_calls, last_call.call_list()) 1.275 + 1.276 + 1.277 + def test_call_list(self): 1.278 + mock = MagicMock() 1.279 + mock(1) 1.280 + self.assertEqual(call(1).call_list(), mock.mock_calls) 1.281 + 1.282 + mock = MagicMock() 1.283 + mock(1).method(2) 1.284 + self.assertEqual(call(1).method(2).call_list(), 1.285 + mock.mock_calls) 1.286 + 1.287 + mock = MagicMock() 1.288 + mock(1).method(2)(3) 1.289 + self.assertEqual(call(1).method(2)(3).call_list(), 1.290 + mock.mock_calls) 1.291 + 1.292 + mock = MagicMock() 1.293 + int(mock(1).method(2)(3).foo.bar.baz(4)(5)) 1.294 + kall = call(1).method(2)(3).foo.bar.baz(4)(5).__int__() 1.295 + self.assertEqual(kall.call_list(), mock.mock_calls) 1.296 + 1.297 + 1.298 + def test_call_any(self): 1.299 + self.assertEqual(call, ANY) 1.300 + 1.301 + m = MagicMock() 1.302 + int(m) 1.303 + self.assertEqual(m.mock_calls, [ANY]) 1.304 + self.assertEqual([ANY], m.mock_calls) 1.305 + 1.306 + 1.307 + def test_two_args_call(self): 1.308 + args = _Call(((1, 2), {'a': 3}), two=True) 1.309 + self.assertEqual(len(args), 2) 1.310 + self.assertEqual(args[0], (1, 2)) 1.311 + self.assertEqual(args[1], {'a': 3}) 1.312 + 1.313 + other_args = _Call(((1, 2), {'a': 3})) 1.314 + self.assertEqual(args, other_args) 1.315 + 1.316 + 1.317 +class SpecSignatureTest(unittest2.TestCase): 1.318 + 1.319 + def _check_someclass_mock(self, mock): 1.320 + self.assertRaises(AttributeError, getattr, mock, 'foo') 1.321 + mock.one(1, 2) 1.322 + mock.one.assert_called_with(1, 2) 1.323 + self.assertRaises(AssertionError, 1.324 + mock.one.assert_called_with, 3, 4) 1.325 + self.assertRaises(TypeError, mock.one, 1) 1.326 + 1.327 + mock.two() 1.328 + mock.two.assert_called_with() 1.329 + self.assertRaises(AssertionError, 1.330 + mock.two.assert_called_with, 3) 1.331 + self.assertRaises(TypeError, mock.two, 1) 1.332 + 1.333 + mock.three() 1.334 + mock.three.assert_called_with() 1.335 + self.assertRaises(AssertionError, 1.336 + mock.three.assert_called_with, 3) 1.337 + self.assertRaises(TypeError, mock.three, 3, 2) 1.338 + 1.339 + mock.three(1) 1.340 + mock.three.assert_called_with(1) 1.341 + 1.342 + mock.three(a=1) 1.343 + mock.three.assert_called_with(a=1) 1.344 + 1.345 + 1.346 + def test_basic(self): 1.347 + for spec in (SomeClass, SomeClass()): 1.348 + mock = create_autospec(spec) 1.349 + self._check_someclass_mock(mock) 1.350 + 1.351 + 1.352 + def test_create_autospec_return_value(self): 1.353 + def f(): 1.354 + pass 1.355 + mock = create_autospec(f, return_value='foo') 1.356 + self.assertEqual(mock(), 'foo') 1.357 + 1.358 + class Foo(object): 1.359 + pass 1.360 + 1.361 + mock = create_autospec(Foo, return_value='foo') 1.362 + self.assertEqual(mock(), 'foo') 1.363 + 1.364 + 1.365 + def test_autospec_reset_mock(self): 1.366 + m = create_autospec(int) 1.367 + int(m) 1.368 + m.reset_mock() 1.369 + self.assertEqual(m.__int__.call_count, 0) 1.370 + 1.371 + 1.372 + def test_mocking_unbound_methods(self): 1.373 + class Foo(object): 1.374 + def foo(self, foo): 1.375 + pass 1.376 + p = patch.object(Foo, 'foo') 1.377 + mock_foo = p.start() 1.378 + Foo().foo(1) 1.379 + 1.380 + mock_foo.assert_called_with(1) 1.381 + 1.382 + 1.383 + @unittest2.expectedFailure 1.384 + def test_create_autospec_unbound_methods(self): 1.385 + # see issue 128 1.386 + class Foo(object): 1.387 + def foo(self): 1.388 + pass 1.389 + 1.390 + klass = create_autospec(Foo) 1.391 + instance = klass() 1.392 + self.assertRaises(TypeError, instance.foo, 1) 1.393 + 1.394 + # Note: no type checking on the "self" parameter 1.395 + klass.foo(1) 1.396 + klass.foo.assert_called_with(1) 1.397 + self.assertRaises(TypeError, klass.foo) 1.398 + 1.399 + 1.400 + def test_create_autospec_keyword_arguments(self): 1.401 + class Foo(object): 1.402 + a = 3 1.403 + m = create_autospec(Foo, a='3') 1.404 + self.assertEqual(m.a, '3') 1.405 + 1.406 + @unittest2.skipUnless(inPy3k, "Keyword only arguments Python 3 specific") 1.407 + def test_create_autospec_keyword_only_arguments(self): 1.408 + func_def = "def foo(a, *, b=None):\n pass\n" 1.409 + namespace = {} 1.410 + exec (func_def, namespace) 1.411 + foo = namespace['foo'] 1.412 + 1.413 + m = create_autospec(foo) 1.414 + m(1) 1.415 + m.assert_called_with(1) 1.416 + self.assertRaises(TypeError, m, 1, 2) 1.417 + 1.418 + m(2, b=3) 1.419 + m.assert_called_with(2, b=3) 1.420 + 1.421 + def test_function_as_instance_attribute(self): 1.422 + obj = SomeClass() 1.423 + def f(a): 1.424 + pass 1.425 + obj.f = f 1.426 + 1.427 + mock = create_autospec(obj) 1.428 + mock.f('bing') 1.429 + mock.f.assert_called_with('bing') 1.430 + 1.431 + 1.432 + def test_spec_as_list(self): 1.433 + # because spec as a list of strings in the mock constructor means 1.434 + # something very different we treat a list instance as the type. 1.435 + mock = create_autospec([]) 1.436 + mock.append('foo') 1.437 + mock.append.assert_called_with('foo') 1.438 + 1.439 + self.assertRaises(AttributeError, getattr, mock, 'foo') 1.440 + 1.441 + class Foo(object): 1.442 + foo = [] 1.443 + 1.444 + mock = create_autospec(Foo) 1.445 + mock.foo.append(3) 1.446 + mock.foo.append.assert_called_with(3) 1.447 + self.assertRaises(AttributeError, getattr, mock.foo, 'foo') 1.448 + 1.449 + 1.450 + def test_attributes(self): 1.451 + class Sub(SomeClass): 1.452 + attr = SomeClass() 1.453 + 1.454 + sub_mock = create_autospec(Sub) 1.455 + 1.456 + for mock in (sub_mock, sub_mock.attr): 1.457 + self._check_someclass_mock(mock) 1.458 + 1.459 + 1.460 + def test_builtin_functions_types(self): 1.461 + # we could replace builtin functions / methods with a function 1.462 + # with *args / **kwargs signature. Using the builtin method type 1.463 + # as a spec seems to work fairly well though. 1.464 + class BuiltinSubclass(list): 1.465 + def bar(self, arg): 1.466 + pass 1.467 + sorted = sorted 1.468 + attr = {} 1.469 + 1.470 + mock = create_autospec(BuiltinSubclass) 1.471 + mock.append(3) 1.472 + mock.append.assert_called_with(3) 1.473 + self.assertRaises(AttributeError, getattr, mock.append, 'foo') 1.474 + 1.475 + mock.bar('foo') 1.476 + mock.bar.assert_called_with('foo') 1.477 + self.assertRaises(TypeError, mock.bar, 'foo', 'bar') 1.478 + self.assertRaises(AttributeError, getattr, mock.bar, 'foo') 1.479 + 1.480 + mock.sorted([1, 2]) 1.481 + mock.sorted.assert_called_with([1, 2]) 1.482 + self.assertRaises(AttributeError, getattr, mock.sorted, 'foo') 1.483 + 1.484 + mock.attr.pop(3) 1.485 + mock.attr.pop.assert_called_with(3) 1.486 + self.assertRaises(AttributeError, getattr, mock.attr, 'foo') 1.487 + 1.488 + 1.489 + def test_method_calls(self): 1.490 + class Sub(SomeClass): 1.491 + attr = SomeClass() 1.492 + 1.493 + mock = create_autospec(Sub) 1.494 + mock.one(1, 2) 1.495 + mock.two() 1.496 + mock.three(3) 1.497 + 1.498 + expected = [call.one(1, 2), call.two(), call.three(3)] 1.499 + self.assertEqual(mock.method_calls, expected) 1.500 + 1.501 + mock.attr.one(1, 2) 1.502 + mock.attr.two() 1.503 + mock.attr.three(3) 1.504 + 1.505 + expected.extend( 1.506 + [call.attr.one(1, 2), call.attr.two(), call.attr.three(3)] 1.507 + ) 1.508 + self.assertEqual(mock.method_calls, expected) 1.509 + 1.510 + 1.511 + def test_magic_methods(self): 1.512 + class BuiltinSubclass(list): 1.513 + attr = {} 1.514 + 1.515 + mock = create_autospec(BuiltinSubclass) 1.516 + self.assertEqual(list(mock), []) 1.517 + self.assertRaises(TypeError, int, mock) 1.518 + self.assertRaises(TypeError, int, mock.attr) 1.519 + self.assertEqual(list(mock), []) 1.520 + 1.521 + self.assertIsInstance(mock['foo'], MagicMock) 1.522 + self.assertIsInstance(mock.attr['foo'], MagicMock) 1.523 + 1.524 + 1.525 + def test_spec_set(self): 1.526 + class Sub(SomeClass): 1.527 + attr = SomeClass() 1.528 + 1.529 + for spec in (Sub, Sub()): 1.530 + mock = create_autospec(spec, spec_set=True) 1.531 + self._check_someclass_mock(mock) 1.532 + 1.533 + self.assertRaises(AttributeError, setattr, mock, 'foo', 'bar') 1.534 + self.assertRaises(AttributeError, setattr, mock.attr, 'foo', 'bar') 1.535 + 1.536 + 1.537 + def test_descriptors(self): 1.538 + class Foo(object): 1.539 + @classmethod 1.540 + def f(cls, a, b): 1.541 + pass 1.542 + @staticmethod 1.543 + def g(a, b): 1.544 + pass 1.545 + 1.546 + class Bar(Foo): 1.547 + pass 1.548 + 1.549 + class Baz(SomeClass, Bar): 1.550 + pass 1.551 + 1.552 + for spec in (Foo, Foo(), Bar, Bar(), Baz, Baz()): 1.553 + mock = create_autospec(spec) 1.554 + mock.f(1, 2) 1.555 + mock.f.assert_called_once_with(1, 2) 1.556 + 1.557 + mock.g(3, 4) 1.558 + mock.g.assert_called_once_with(3, 4) 1.559 + 1.560 + 1.561 + @unittest2.skipIf(inPy3k, "No old style classes in Python 3") 1.562 + def test_old_style_classes(self): 1.563 + class Foo: 1.564 + def f(self, a, b): 1.565 + pass 1.566 + 1.567 + class Bar(Foo): 1.568 + g = Foo() 1.569 + 1.570 + for spec in (Foo, Foo(), Bar, Bar()): 1.571 + mock = create_autospec(spec) 1.572 + mock.f(1, 2) 1.573 + mock.f.assert_called_once_with(1, 2) 1.574 + 1.575 + self.assertRaises(AttributeError, getattr, mock, 'foo') 1.576 + self.assertRaises(AttributeError, getattr, mock.f, 'foo') 1.577 + 1.578 + mock.g.f(1, 2) 1.579 + mock.g.f.assert_called_once_with(1, 2) 1.580 + self.assertRaises(AttributeError, getattr, mock.g, 'foo') 1.581 + 1.582 + 1.583 + def test_recursive(self): 1.584 + class A(object): 1.585 + def a(self): 1.586 + pass 1.587 + foo = 'foo bar baz' 1.588 + bar = foo 1.589 + 1.590 + A.B = A 1.591 + mock = create_autospec(A) 1.592 + 1.593 + mock() 1.594 + self.assertFalse(mock.B.called) 1.595 + 1.596 + mock.a() 1.597 + mock.B.a() 1.598 + self.assertEqual(mock.method_calls, [call.a(), call.B.a()]) 1.599 + 1.600 + self.assertIs(A.foo, A.bar) 1.601 + self.assertIsNot(mock.foo, mock.bar) 1.602 + mock.foo.lower() 1.603 + self.assertRaises(AssertionError, mock.bar.lower.assert_called_with) 1.604 + 1.605 + 1.606 + def test_spec_inheritance_for_classes(self): 1.607 + class Foo(object): 1.608 + def a(self): 1.609 + pass 1.610 + class Bar(object): 1.611 + def f(self): 1.612 + pass 1.613 + 1.614 + class_mock = create_autospec(Foo) 1.615 + 1.616 + self.assertIsNot(class_mock, class_mock()) 1.617 + 1.618 + for this_mock in class_mock, class_mock(): 1.619 + this_mock.a() 1.620 + this_mock.a.assert_called_with() 1.621 + self.assertRaises(TypeError, this_mock.a, 'foo') 1.622 + self.assertRaises(AttributeError, getattr, this_mock, 'b') 1.623 + 1.624 + instance_mock = create_autospec(Foo()) 1.625 + instance_mock.a() 1.626 + instance_mock.a.assert_called_with() 1.627 + self.assertRaises(TypeError, instance_mock.a, 'foo') 1.628 + self.assertRaises(AttributeError, getattr, instance_mock, 'b') 1.629 + 1.630 + # The return value isn't isn't callable 1.631 + self.assertRaises(TypeError, instance_mock) 1.632 + 1.633 + instance_mock.Bar.f() 1.634 + instance_mock.Bar.f.assert_called_with() 1.635 + self.assertRaises(AttributeError, getattr, instance_mock.Bar, 'g') 1.636 + 1.637 + instance_mock.Bar().f() 1.638 + instance_mock.Bar().f.assert_called_with() 1.639 + self.assertRaises(AttributeError, getattr, instance_mock.Bar(), 'g') 1.640 + 1.641 + 1.642 + def test_inherit(self): 1.643 + class Foo(object): 1.644 + a = 3 1.645 + 1.646 + Foo.Foo = Foo 1.647 + 1.648 + # class 1.649 + mock = create_autospec(Foo) 1.650 + instance = mock() 1.651 + self.assertRaises(AttributeError, getattr, instance, 'b') 1.652 + 1.653 + attr_instance = mock.Foo() 1.654 + self.assertRaises(AttributeError, getattr, attr_instance, 'b') 1.655 + 1.656 + # instance 1.657 + mock = create_autospec(Foo()) 1.658 + self.assertRaises(AttributeError, getattr, mock, 'b') 1.659 + self.assertRaises(TypeError, mock) 1.660 + 1.661 + # attribute instance 1.662 + call_result = mock.Foo() 1.663 + self.assertRaises(AttributeError, getattr, call_result, 'b') 1.664 + 1.665 + 1.666 + def test_builtins(self): 1.667 + # used to fail with infinite recursion 1.668 + create_autospec(1) 1.669 + 1.670 + create_autospec(int) 1.671 + create_autospec('foo') 1.672 + create_autospec(str) 1.673 + create_autospec({}) 1.674 + create_autospec(dict) 1.675 + create_autospec([]) 1.676 + create_autospec(list) 1.677 + create_autospec(set()) 1.678 + create_autospec(set) 1.679 + create_autospec(1.0) 1.680 + create_autospec(float) 1.681 + create_autospec(1j) 1.682 + create_autospec(complex) 1.683 + create_autospec(False) 1.684 + create_autospec(True) 1.685 + 1.686 + 1.687 + def test_function(self): 1.688 + def f(a, b): 1.689 + pass 1.690 + 1.691 + mock = create_autospec(f) 1.692 + self.assertRaises(TypeError, mock) 1.693 + mock(1, 2) 1.694 + mock.assert_called_with(1, 2) 1.695 + 1.696 + f.f = f 1.697 + mock = create_autospec(f) 1.698 + self.assertRaises(TypeError, mock.f) 1.699 + mock.f(3, 4) 1.700 + mock.f.assert_called_with(3, 4) 1.701 + 1.702 + 1.703 + def test_skip_attributeerrors(self): 1.704 + class Raiser(object): 1.705 + def __get__(self, obj, type=None): 1.706 + if obj is None: 1.707 + raise AttributeError('Can only be accessed via an instance') 1.708 + 1.709 + class RaiserClass(object): 1.710 + raiser = Raiser() 1.711 + 1.712 + @staticmethod 1.713 + def existing(a, b): 1.714 + return a + b 1.715 + 1.716 + s = create_autospec(RaiserClass) 1.717 + self.assertRaises(TypeError, lambda x: s.existing(1, 2, 3)) 1.718 + s.existing(1, 2) 1.719 + self.assertRaises(AttributeError, lambda: s.nonexisting) 1.720 + 1.721 + # check we can fetch the raiser attribute and it has no spec 1.722 + obj = s.raiser 1.723 + obj.foo, obj.bar 1.724 + 1.725 + 1.726 + def test_signature_class(self): 1.727 + class Foo(object): 1.728 + def __init__(self, a, b=3): 1.729 + pass 1.730 + 1.731 + mock = create_autospec(Foo) 1.732 + 1.733 + self.assertRaises(TypeError, mock) 1.734 + mock(1) 1.735 + mock.assert_called_once_with(1) 1.736 + 1.737 + mock(4, 5) 1.738 + mock.assert_called_with(4, 5) 1.739 + 1.740 + 1.741 + @unittest2.skipIf(inPy3k, 'no old style classes in Python 3') 1.742 + def test_signature_old_style_class(self): 1.743 + class Foo: 1.744 + def __init__(self, a, b=3): 1.745 + pass 1.746 + 1.747 + mock = create_autospec(Foo) 1.748 + 1.749 + self.assertRaises(TypeError, mock) 1.750 + mock(1) 1.751 + mock.assert_called_once_with(1) 1.752 + 1.753 + mock(4, 5) 1.754 + mock.assert_called_with(4, 5) 1.755 + 1.756 + 1.757 + def test_class_with_no_init(self): 1.758 + # this used to raise an exception 1.759 + # due to trying to get a signature from object.__init__ 1.760 + class Foo(object): 1.761 + pass 1.762 + create_autospec(Foo) 1.763 + 1.764 + 1.765 + @unittest2.skipIf(inPy3k, 'no old style classes in Python 3') 1.766 + def test_old_style_class_with_no_init(self): 1.767 + # this used to raise an exception 1.768 + # due to Foo.__init__ raising an AttributeError 1.769 + class Foo: 1.770 + pass 1.771 + create_autospec(Foo) 1.772 + 1.773 + 1.774 + def test_signature_callable(self): 1.775 + class Callable(object): 1.776 + def __init__(self): 1.777 + pass 1.778 + def __call__(self, a): 1.779 + pass 1.780 + 1.781 + mock = create_autospec(Callable) 1.782 + mock() 1.783 + mock.assert_called_once_with() 1.784 + self.assertRaises(TypeError, mock, 'a') 1.785 + 1.786 + instance = mock() 1.787 + self.assertRaises(TypeError, instance) 1.788 + instance(a='a') 1.789 + instance.assert_called_once_with(a='a') 1.790 + instance('a') 1.791 + instance.assert_called_with('a') 1.792 + 1.793 + mock = create_autospec(Callable()) 1.794 + mock(a='a') 1.795 + mock.assert_called_once_with(a='a') 1.796 + self.assertRaises(TypeError, mock) 1.797 + mock('a') 1.798 + mock.assert_called_with('a') 1.799 + 1.800 + 1.801 + def test_signature_noncallable(self): 1.802 + class NonCallable(object): 1.803 + def __init__(self): 1.804 + pass 1.805 + 1.806 + mock = create_autospec(NonCallable) 1.807 + instance = mock() 1.808 + mock.assert_called_once_with() 1.809 + self.assertRaises(TypeError, mock, 'a') 1.810 + self.assertRaises(TypeError, instance) 1.811 + self.assertRaises(TypeError, instance, 'a') 1.812 + 1.813 + mock = create_autospec(NonCallable()) 1.814 + self.assertRaises(TypeError, mock) 1.815 + self.assertRaises(TypeError, mock, 'a') 1.816 + 1.817 + 1.818 + def test_create_autospec_none(self): 1.819 + class Foo(object): 1.820 + bar = None 1.821 + 1.822 + mock = create_autospec(Foo) 1.823 + none = mock.bar 1.824 + self.assertNotIsInstance(none, type(None)) 1.825 + 1.826 + none.foo() 1.827 + none.foo.assert_called_once_with() 1.828 + 1.829 + 1.830 + def test_autospec_functions_with_self_in_odd_place(self): 1.831 + class Foo(object): 1.832 + def f(a, self): 1.833 + pass 1.834 + 1.835 + a = create_autospec(Foo) 1.836 + a.f(self=10) 1.837 + a.f.assert_called_with(self=10) 1.838 + 1.839 + 1.840 + def test_autospec_property(self): 1.841 + class Foo(object): 1.842 + @property 1.843 + def foo(self): 1.844 + return 3 1.845 + 1.846 + foo = create_autospec(Foo) 1.847 + mock_property = foo.foo 1.848 + 1.849 + # no spec on properties 1.850 + self.assertTrue(isinstance(mock_property, MagicMock)) 1.851 + mock_property(1, 2, 3) 1.852 + mock_property.abc(4, 5, 6) 1.853 + mock_property.assert_called_once_with(1, 2, 3) 1.854 + mock_property.abc.assert_called_once_with(4, 5, 6) 1.855 + 1.856 + 1.857 + def test_autospec_slots(self): 1.858 + class Foo(object): 1.859 + __slots__ = ['a'] 1.860 + 1.861 + foo = create_autospec(Foo) 1.862 + mock_slot = foo.a 1.863 + 1.864 + # no spec on slots 1.865 + mock_slot(1, 2, 3) 1.866 + mock_slot.abc(4, 5, 6) 1.867 + mock_slot.assert_called_once_with(1, 2, 3) 1.868 + mock_slot.abc.assert_called_once_with(4, 5, 6) 1.869 + 1.870 + 1.871 +class TestCallList(unittest2.TestCase): 1.872 + 1.873 + def test_args_list_contains_call_list(self): 1.874 + mock = Mock() 1.875 + self.assertIsInstance(mock.call_args_list, _CallList) 1.876 + 1.877 + mock(1, 2) 1.878 + mock(a=3) 1.879 + mock(3, 4) 1.880 + mock(b=6) 1.881 + 1.882 + for kall in call(1, 2), call(a=3), call(3, 4), call(b=6): 1.883 + self.assertTrue(kall in mock.call_args_list) 1.884 + 1.885 + calls = [call(a=3), call(3, 4)] 1.886 + self.assertTrue(calls in mock.call_args_list) 1.887 + calls = [call(1, 2), call(a=3)] 1.888 + self.assertTrue(calls in mock.call_args_list) 1.889 + calls = [call(3, 4), call(b=6)] 1.890 + self.assertTrue(calls in mock.call_args_list) 1.891 + calls = [call(3, 4)] 1.892 + self.assertTrue(calls in mock.call_args_list) 1.893 + 1.894 + self.assertFalse(call('fish') in mock.call_args_list) 1.895 + self.assertFalse([call('fish')] in mock.call_args_list) 1.896 + 1.897 + 1.898 + def test_call_list_str(self): 1.899 + mock = Mock() 1.900 + mock(1, 2) 1.901 + mock.foo(a=3) 1.902 + mock.foo.bar().baz('fish', cat='dog') 1.903 + 1.904 + expected = ( 1.905 + "[call(1, 2),\n" 1.906 + " call.foo(a=3),\n" 1.907 + " call.foo.bar(),\n" 1.908 + " call.foo.bar().baz('fish', cat='dog')]" 1.909 + ) 1.910 + self.assertEqual(str(mock.mock_calls), expected) 1.911 + 1.912 + 1.913 + def test_propertymock(self): 1.914 + p = patch('%s.SomeClass.one' % __name__, new_callable=PropertyMock) 1.915 + mock = p.start() 1.916 + try: 1.917 + SomeClass.one 1.918 + mock.assert_called_once_with() 1.919 + 1.920 + s = SomeClass() 1.921 + s.one 1.922 + mock.assert_called_with() 1.923 + self.assertEqual(mock.mock_calls, [call(), call()]) 1.924 + 1.925 + s.one = 3 1.926 + self.assertEqual(mock.mock_calls, [call(), call(), call(3)]) 1.927 + finally: 1.928 + p.stop() 1.929 + 1.930 + 1.931 + def test_propertymock_returnvalue(self): 1.932 + m = MagicMock() 1.933 + p = PropertyMock() 1.934 + type(m).foo = p 1.935 + 1.936 + returned = m.foo 1.937 + p.assert_called_once_with() 1.938 + self.assertIsInstance(returned, MagicMock) 1.939 + self.assertNotIsInstance(returned, PropertyMock) 1.940 + 1.941 + 1.942 +if __name__ == '__main__': 1.943 + unittest2.main()