17db96d56Sopenharmony_ciimport inspect 27db96d56Sopenharmony_ciimport time 37db96d56Sopenharmony_ciimport types 47db96d56Sopenharmony_ciimport unittest 57db96d56Sopenharmony_ci 67db96d56Sopenharmony_cifrom unittest.mock import ( 77db96d56Sopenharmony_ci call, _Call, create_autospec, MagicMock, 87db96d56Sopenharmony_ci Mock, ANY, _CallList, patch, PropertyMock, _callable 97db96d56Sopenharmony_ci) 107db96d56Sopenharmony_ci 117db96d56Sopenharmony_cifrom datetime import datetime 127db96d56Sopenharmony_cifrom functools import partial 137db96d56Sopenharmony_ci 147db96d56Sopenharmony_ciclass SomeClass(object): 157db96d56Sopenharmony_ci def one(self, a, b): pass 167db96d56Sopenharmony_ci def two(self): pass 177db96d56Sopenharmony_ci def three(self, a=None): pass 187db96d56Sopenharmony_ci 197db96d56Sopenharmony_ci 207db96d56Sopenharmony_ci 217db96d56Sopenharmony_ciclass AnyTest(unittest.TestCase): 227db96d56Sopenharmony_ci 237db96d56Sopenharmony_ci def test_any(self): 247db96d56Sopenharmony_ci self.assertEqual(ANY, object()) 257db96d56Sopenharmony_ci 267db96d56Sopenharmony_ci mock = Mock() 277db96d56Sopenharmony_ci mock(ANY) 287db96d56Sopenharmony_ci mock.assert_called_with(ANY) 297db96d56Sopenharmony_ci 307db96d56Sopenharmony_ci mock = Mock() 317db96d56Sopenharmony_ci mock(foo=ANY) 327db96d56Sopenharmony_ci mock.assert_called_with(foo=ANY) 337db96d56Sopenharmony_ci 347db96d56Sopenharmony_ci def test_repr(self): 357db96d56Sopenharmony_ci self.assertEqual(repr(ANY), '<ANY>') 367db96d56Sopenharmony_ci self.assertEqual(str(ANY), '<ANY>') 377db96d56Sopenharmony_ci 387db96d56Sopenharmony_ci 397db96d56Sopenharmony_ci def test_any_and_datetime(self): 407db96d56Sopenharmony_ci mock = Mock() 417db96d56Sopenharmony_ci mock(datetime.now(), foo=datetime.now()) 427db96d56Sopenharmony_ci 437db96d56Sopenharmony_ci mock.assert_called_with(ANY, foo=ANY) 447db96d56Sopenharmony_ci 457db96d56Sopenharmony_ci 467db96d56Sopenharmony_ci def test_any_mock_calls_comparison_order(self): 477db96d56Sopenharmony_ci mock = Mock() 487db96d56Sopenharmony_ci class Foo(object): 497db96d56Sopenharmony_ci def __eq__(self, other): pass 507db96d56Sopenharmony_ci def __ne__(self, other): pass 517db96d56Sopenharmony_ci 527db96d56Sopenharmony_ci for d in datetime.now(), Foo(): 537db96d56Sopenharmony_ci mock.reset_mock() 547db96d56Sopenharmony_ci 557db96d56Sopenharmony_ci mock(d, foo=d, bar=d) 567db96d56Sopenharmony_ci mock.method(d, zinga=d, alpha=d) 577db96d56Sopenharmony_ci mock().method(a1=d, z99=d) 587db96d56Sopenharmony_ci 597db96d56Sopenharmony_ci expected = [ 607db96d56Sopenharmony_ci call(ANY, foo=ANY, bar=ANY), 617db96d56Sopenharmony_ci call.method(ANY, zinga=ANY, alpha=ANY), 627db96d56Sopenharmony_ci call(), call().method(a1=ANY, z99=ANY) 637db96d56Sopenharmony_ci ] 647db96d56Sopenharmony_ci self.assertEqual(expected, mock.mock_calls) 657db96d56Sopenharmony_ci self.assertEqual(mock.mock_calls, expected) 667db96d56Sopenharmony_ci 677db96d56Sopenharmony_ci def test_any_no_spec(self): 687db96d56Sopenharmony_ci # This is a regression test for bpo-37555 697db96d56Sopenharmony_ci class Foo: 707db96d56Sopenharmony_ci def __eq__(self, other): pass 717db96d56Sopenharmony_ci 727db96d56Sopenharmony_ci mock = Mock() 737db96d56Sopenharmony_ci mock(Foo(), 1) 747db96d56Sopenharmony_ci mock.assert_has_calls([call(ANY, 1)]) 757db96d56Sopenharmony_ci mock.assert_called_with(ANY, 1) 767db96d56Sopenharmony_ci mock.assert_any_call(ANY, 1) 777db96d56Sopenharmony_ci 787db96d56Sopenharmony_ci def test_any_and_spec_set(self): 797db96d56Sopenharmony_ci # This is a regression test for bpo-37555 807db96d56Sopenharmony_ci class Foo: 817db96d56Sopenharmony_ci def __eq__(self, other): pass 827db96d56Sopenharmony_ci 837db96d56Sopenharmony_ci mock = Mock(spec=Foo) 847db96d56Sopenharmony_ci 857db96d56Sopenharmony_ci mock(Foo(), 1) 867db96d56Sopenharmony_ci mock.assert_has_calls([call(ANY, 1)]) 877db96d56Sopenharmony_ci mock.assert_called_with(ANY, 1) 887db96d56Sopenharmony_ci mock.assert_any_call(ANY, 1) 897db96d56Sopenharmony_ci 907db96d56Sopenharmony_ciclass CallTest(unittest.TestCase): 917db96d56Sopenharmony_ci 927db96d56Sopenharmony_ci def test_call_with_call(self): 937db96d56Sopenharmony_ci kall = _Call() 947db96d56Sopenharmony_ci self.assertEqual(kall, _Call()) 957db96d56Sopenharmony_ci self.assertEqual(kall, _Call(('',))) 967db96d56Sopenharmony_ci self.assertEqual(kall, _Call(((),))) 977db96d56Sopenharmony_ci self.assertEqual(kall, _Call(({},))) 987db96d56Sopenharmony_ci self.assertEqual(kall, _Call(('', ()))) 997db96d56Sopenharmony_ci self.assertEqual(kall, _Call(('', {}))) 1007db96d56Sopenharmony_ci self.assertEqual(kall, _Call(('', (), {}))) 1017db96d56Sopenharmony_ci self.assertEqual(kall, _Call(('foo',))) 1027db96d56Sopenharmony_ci self.assertEqual(kall, _Call(('bar', ()))) 1037db96d56Sopenharmony_ci self.assertEqual(kall, _Call(('baz', {}))) 1047db96d56Sopenharmony_ci self.assertEqual(kall, _Call(('spam', (), {}))) 1057db96d56Sopenharmony_ci 1067db96d56Sopenharmony_ci kall = _Call(((1, 2, 3),)) 1077db96d56Sopenharmony_ci self.assertEqual(kall, _Call(((1, 2, 3),))) 1087db96d56Sopenharmony_ci self.assertEqual(kall, _Call(('', (1, 2, 3)))) 1097db96d56Sopenharmony_ci self.assertEqual(kall, _Call(((1, 2, 3), {}))) 1107db96d56Sopenharmony_ci self.assertEqual(kall, _Call(('', (1, 2, 3), {}))) 1117db96d56Sopenharmony_ci 1127db96d56Sopenharmony_ci kall = _Call(((1, 2, 4),)) 1137db96d56Sopenharmony_ci self.assertNotEqual(kall, _Call(('', (1, 2, 3)))) 1147db96d56Sopenharmony_ci self.assertNotEqual(kall, _Call(('', (1, 2, 3), {}))) 1157db96d56Sopenharmony_ci 1167db96d56Sopenharmony_ci kall = _Call(('foo', (1, 2, 4),)) 1177db96d56Sopenharmony_ci self.assertNotEqual(kall, _Call(('', (1, 2, 4)))) 1187db96d56Sopenharmony_ci self.assertNotEqual(kall, _Call(('', (1, 2, 4), {}))) 1197db96d56Sopenharmony_ci self.assertNotEqual(kall, _Call(('bar', (1, 2, 4)))) 1207db96d56Sopenharmony_ci self.assertNotEqual(kall, _Call(('bar', (1, 2, 4), {}))) 1217db96d56Sopenharmony_ci 1227db96d56Sopenharmony_ci kall = _Call(({'a': 3},)) 1237db96d56Sopenharmony_ci self.assertEqual(kall, _Call(('', (), {'a': 3}))) 1247db96d56Sopenharmony_ci self.assertEqual(kall, _Call(('', {'a': 3}))) 1257db96d56Sopenharmony_ci self.assertEqual(kall, _Call(((), {'a': 3}))) 1267db96d56Sopenharmony_ci self.assertEqual(kall, _Call(({'a': 3},))) 1277db96d56Sopenharmony_ci 1287db96d56Sopenharmony_ci 1297db96d56Sopenharmony_ci def test_empty__Call(self): 1307db96d56Sopenharmony_ci args = _Call() 1317db96d56Sopenharmony_ci 1327db96d56Sopenharmony_ci self.assertEqual(args, ()) 1337db96d56Sopenharmony_ci self.assertEqual(args, ('foo',)) 1347db96d56Sopenharmony_ci self.assertEqual(args, ((),)) 1357db96d56Sopenharmony_ci self.assertEqual(args, ('foo', ())) 1367db96d56Sopenharmony_ci self.assertEqual(args, ('foo',(), {})) 1377db96d56Sopenharmony_ci self.assertEqual(args, ('foo', {})) 1387db96d56Sopenharmony_ci self.assertEqual(args, ({},)) 1397db96d56Sopenharmony_ci 1407db96d56Sopenharmony_ci 1417db96d56Sopenharmony_ci def test_named_empty_call(self): 1427db96d56Sopenharmony_ci args = _Call(('foo', (), {})) 1437db96d56Sopenharmony_ci 1447db96d56Sopenharmony_ci self.assertEqual(args, ('foo',)) 1457db96d56Sopenharmony_ci self.assertEqual(args, ('foo', ())) 1467db96d56Sopenharmony_ci self.assertEqual(args, ('foo',(), {})) 1477db96d56Sopenharmony_ci self.assertEqual(args, ('foo', {})) 1487db96d56Sopenharmony_ci 1497db96d56Sopenharmony_ci self.assertNotEqual(args, ((),)) 1507db96d56Sopenharmony_ci self.assertNotEqual(args, ()) 1517db96d56Sopenharmony_ci self.assertNotEqual(args, ({},)) 1527db96d56Sopenharmony_ci self.assertNotEqual(args, ('bar',)) 1537db96d56Sopenharmony_ci self.assertNotEqual(args, ('bar', ())) 1547db96d56Sopenharmony_ci self.assertNotEqual(args, ('bar', {})) 1557db96d56Sopenharmony_ci 1567db96d56Sopenharmony_ci 1577db96d56Sopenharmony_ci def test_call_with_args(self): 1587db96d56Sopenharmony_ci args = _Call(((1, 2, 3), {})) 1597db96d56Sopenharmony_ci 1607db96d56Sopenharmony_ci self.assertEqual(args, ((1, 2, 3),)) 1617db96d56Sopenharmony_ci self.assertEqual(args, ('foo', (1, 2, 3))) 1627db96d56Sopenharmony_ci self.assertEqual(args, ('foo', (1, 2, 3), {})) 1637db96d56Sopenharmony_ci self.assertEqual(args, ((1, 2, 3), {})) 1647db96d56Sopenharmony_ci self.assertEqual(args.args, (1, 2, 3)) 1657db96d56Sopenharmony_ci self.assertEqual(args.kwargs, {}) 1667db96d56Sopenharmony_ci 1677db96d56Sopenharmony_ci 1687db96d56Sopenharmony_ci def test_named_call_with_args(self): 1697db96d56Sopenharmony_ci args = _Call(('foo', (1, 2, 3), {})) 1707db96d56Sopenharmony_ci 1717db96d56Sopenharmony_ci self.assertEqual(args, ('foo', (1, 2, 3))) 1727db96d56Sopenharmony_ci self.assertEqual(args, ('foo', (1, 2, 3), {})) 1737db96d56Sopenharmony_ci self.assertEqual(args.args, (1, 2, 3)) 1747db96d56Sopenharmony_ci self.assertEqual(args.kwargs, {}) 1757db96d56Sopenharmony_ci 1767db96d56Sopenharmony_ci self.assertNotEqual(args, ((1, 2, 3),)) 1777db96d56Sopenharmony_ci self.assertNotEqual(args, ((1, 2, 3), {})) 1787db96d56Sopenharmony_ci 1797db96d56Sopenharmony_ci 1807db96d56Sopenharmony_ci def test_call_with_kwargs(self): 1817db96d56Sopenharmony_ci args = _Call(((), dict(a=3, b=4))) 1827db96d56Sopenharmony_ci 1837db96d56Sopenharmony_ci self.assertEqual(args, (dict(a=3, b=4),)) 1847db96d56Sopenharmony_ci self.assertEqual(args, ('foo', dict(a=3, b=4))) 1857db96d56Sopenharmony_ci self.assertEqual(args, ('foo', (), dict(a=3, b=4))) 1867db96d56Sopenharmony_ci self.assertEqual(args, ((), dict(a=3, b=4))) 1877db96d56Sopenharmony_ci self.assertEqual(args.args, ()) 1887db96d56Sopenharmony_ci self.assertEqual(args.kwargs, dict(a=3, b=4)) 1897db96d56Sopenharmony_ci 1907db96d56Sopenharmony_ci 1917db96d56Sopenharmony_ci def test_named_call_with_kwargs(self): 1927db96d56Sopenharmony_ci args = _Call(('foo', (), dict(a=3, b=4))) 1937db96d56Sopenharmony_ci 1947db96d56Sopenharmony_ci self.assertEqual(args, ('foo', dict(a=3, b=4))) 1957db96d56Sopenharmony_ci self.assertEqual(args, ('foo', (), dict(a=3, b=4))) 1967db96d56Sopenharmony_ci self.assertEqual(args.args, ()) 1977db96d56Sopenharmony_ci self.assertEqual(args.kwargs, dict(a=3, b=4)) 1987db96d56Sopenharmony_ci 1997db96d56Sopenharmony_ci self.assertNotEqual(args, (dict(a=3, b=4),)) 2007db96d56Sopenharmony_ci self.assertNotEqual(args, ((), dict(a=3, b=4))) 2017db96d56Sopenharmony_ci 2027db96d56Sopenharmony_ci 2037db96d56Sopenharmony_ci def test_call_with_args_call_empty_name(self): 2047db96d56Sopenharmony_ci args = _Call(((1, 2, 3), {})) 2057db96d56Sopenharmony_ci 2067db96d56Sopenharmony_ci self.assertEqual(args, call(1, 2, 3)) 2077db96d56Sopenharmony_ci self.assertEqual(call(1, 2, 3), args) 2087db96d56Sopenharmony_ci self.assertIn(call(1, 2, 3), [args]) 2097db96d56Sopenharmony_ci 2107db96d56Sopenharmony_ci 2117db96d56Sopenharmony_ci def test_call_ne(self): 2127db96d56Sopenharmony_ci self.assertNotEqual(_Call(((1, 2, 3),)), call(1, 2)) 2137db96d56Sopenharmony_ci self.assertFalse(_Call(((1, 2, 3),)) != call(1, 2, 3)) 2147db96d56Sopenharmony_ci self.assertTrue(_Call(((1, 2), {})) != call(1, 2, 3)) 2157db96d56Sopenharmony_ci 2167db96d56Sopenharmony_ci 2177db96d56Sopenharmony_ci def test_call_non_tuples(self): 2187db96d56Sopenharmony_ci kall = _Call(((1, 2, 3),)) 2197db96d56Sopenharmony_ci for value in 1, None, self, int: 2207db96d56Sopenharmony_ci self.assertNotEqual(kall, value) 2217db96d56Sopenharmony_ci self.assertFalse(kall == value) 2227db96d56Sopenharmony_ci 2237db96d56Sopenharmony_ci 2247db96d56Sopenharmony_ci def test_repr(self): 2257db96d56Sopenharmony_ci self.assertEqual(repr(_Call()), 'call()') 2267db96d56Sopenharmony_ci self.assertEqual(repr(_Call(('foo',))), 'call.foo()') 2277db96d56Sopenharmony_ci 2287db96d56Sopenharmony_ci self.assertEqual(repr(_Call(((1, 2, 3), {'a': 'b'}))), 2297db96d56Sopenharmony_ci "call(1, 2, 3, a='b')") 2307db96d56Sopenharmony_ci self.assertEqual(repr(_Call(('bar', (1, 2, 3), {'a': 'b'}))), 2317db96d56Sopenharmony_ci "call.bar(1, 2, 3, a='b')") 2327db96d56Sopenharmony_ci 2337db96d56Sopenharmony_ci self.assertEqual(repr(call), 'call') 2347db96d56Sopenharmony_ci self.assertEqual(str(call), 'call') 2357db96d56Sopenharmony_ci 2367db96d56Sopenharmony_ci self.assertEqual(repr(call()), 'call()') 2377db96d56Sopenharmony_ci self.assertEqual(repr(call(1)), 'call(1)') 2387db96d56Sopenharmony_ci self.assertEqual(repr(call(zz='thing')), "call(zz='thing')") 2397db96d56Sopenharmony_ci 2407db96d56Sopenharmony_ci self.assertEqual(repr(call().foo), 'call().foo') 2417db96d56Sopenharmony_ci self.assertEqual(repr(call(1).foo.bar(a=3).bing), 2427db96d56Sopenharmony_ci 'call().foo.bar().bing') 2437db96d56Sopenharmony_ci self.assertEqual( 2447db96d56Sopenharmony_ci repr(call().foo(1, 2, a=3)), 2457db96d56Sopenharmony_ci "call().foo(1, 2, a=3)" 2467db96d56Sopenharmony_ci ) 2477db96d56Sopenharmony_ci self.assertEqual(repr(call()()), "call()()") 2487db96d56Sopenharmony_ci self.assertEqual(repr(call(1)(2)), "call()(2)") 2497db96d56Sopenharmony_ci self.assertEqual( 2507db96d56Sopenharmony_ci repr(call()().bar().baz.beep(1)), 2517db96d56Sopenharmony_ci "call()().bar().baz.beep(1)" 2527db96d56Sopenharmony_ci ) 2537db96d56Sopenharmony_ci 2547db96d56Sopenharmony_ci 2557db96d56Sopenharmony_ci def test_call(self): 2567db96d56Sopenharmony_ci self.assertEqual(call(), ('', (), {})) 2577db96d56Sopenharmony_ci self.assertEqual(call('foo', 'bar', one=3, two=4), 2587db96d56Sopenharmony_ci ('', ('foo', 'bar'), {'one': 3, 'two': 4})) 2597db96d56Sopenharmony_ci 2607db96d56Sopenharmony_ci mock = Mock() 2617db96d56Sopenharmony_ci mock(1, 2, 3) 2627db96d56Sopenharmony_ci mock(a=3, b=6) 2637db96d56Sopenharmony_ci self.assertEqual(mock.call_args_list, 2647db96d56Sopenharmony_ci [call(1, 2, 3), call(a=3, b=6)]) 2657db96d56Sopenharmony_ci 2667db96d56Sopenharmony_ci def test_attribute_call(self): 2677db96d56Sopenharmony_ci self.assertEqual(call.foo(1), ('foo', (1,), {})) 2687db96d56Sopenharmony_ci self.assertEqual(call.bar.baz(fish='eggs'), 2697db96d56Sopenharmony_ci ('bar.baz', (), {'fish': 'eggs'})) 2707db96d56Sopenharmony_ci 2717db96d56Sopenharmony_ci mock = Mock() 2727db96d56Sopenharmony_ci mock.foo(1, 2 ,3) 2737db96d56Sopenharmony_ci mock.bar.baz(a=3, b=6) 2747db96d56Sopenharmony_ci self.assertEqual(mock.method_calls, 2757db96d56Sopenharmony_ci [call.foo(1, 2, 3), call.bar.baz(a=3, b=6)]) 2767db96d56Sopenharmony_ci 2777db96d56Sopenharmony_ci 2787db96d56Sopenharmony_ci def test_extended_call(self): 2797db96d56Sopenharmony_ci result = call(1).foo(2).bar(3, a=4) 2807db96d56Sopenharmony_ci self.assertEqual(result, ('().foo().bar', (3,), dict(a=4))) 2817db96d56Sopenharmony_ci 2827db96d56Sopenharmony_ci mock = MagicMock() 2837db96d56Sopenharmony_ci mock(1, 2, a=3, b=4) 2847db96d56Sopenharmony_ci self.assertEqual(mock.call_args, call(1, 2, a=3, b=4)) 2857db96d56Sopenharmony_ci self.assertNotEqual(mock.call_args, call(1, 2, 3)) 2867db96d56Sopenharmony_ci 2877db96d56Sopenharmony_ci self.assertEqual(mock.call_args_list, [call(1, 2, a=3, b=4)]) 2887db96d56Sopenharmony_ci self.assertEqual(mock.mock_calls, [call(1, 2, a=3, b=4)]) 2897db96d56Sopenharmony_ci 2907db96d56Sopenharmony_ci mock = MagicMock() 2917db96d56Sopenharmony_ci mock.foo(1).bar()().baz.beep(a=6) 2927db96d56Sopenharmony_ci 2937db96d56Sopenharmony_ci last_call = call.foo(1).bar()().baz.beep(a=6) 2947db96d56Sopenharmony_ci self.assertEqual(mock.mock_calls[-1], last_call) 2957db96d56Sopenharmony_ci self.assertEqual(mock.mock_calls, last_call.call_list()) 2967db96d56Sopenharmony_ci 2977db96d56Sopenharmony_ci 2987db96d56Sopenharmony_ci def test_extended_not_equal(self): 2997db96d56Sopenharmony_ci a = call(x=1).foo 3007db96d56Sopenharmony_ci b = call(x=2).foo 3017db96d56Sopenharmony_ci self.assertEqual(a, a) 3027db96d56Sopenharmony_ci self.assertEqual(b, b) 3037db96d56Sopenharmony_ci self.assertNotEqual(a, b) 3047db96d56Sopenharmony_ci 3057db96d56Sopenharmony_ci 3067db96d56Sopenharmony_ci def test_nested_calls_not_equal(self): 3077db96d56Sopenharmony_ci a = call(x=1).foo().bar 3087db96d56Sopenharmony_ci b = call(x=2).foo().bar 3097db96d56Sopenharmony_ci self.assertEqual(a, a) 3107db96d56Sopenharmony_ci self.assertEqual(b, b) 3117db96d56Sopenharmony_ci self.assertNotEqual(a, b) 3127db96d56Sopenharmony_ci 3137db96d56Sopenharmony_ci 3147db96d56Sopenharmony_ci def test_call_list(self): 3157db96d56Sopenharmony_ci mock = MagicMock() 3167db96d56Sopenharmony_ci mock(1) 3177db96d56Sopenharmony_ci self.assertEqual(call(1).call_list(), mock.mock_calls) 3187db96d56Sopenharmony_ci 3197db96d56Sopenharmony_ci mock = MagicMock() 3207db96d56Sopenharmony_ci mock(1).method(2) 3217db96d56Sopenharmony_ci self.assertEqual(call(1).method(2).call_list(), 3227db96d56Sopenharmony_ci mock.mock_calls) 3237db96d56Sopenharmony_ci 3247db96d56Sopenharmony_ci mock = MagicMock() 3257db96d56Sopenharmony_ci mock(1).method(2)(3) 3267db96d56Sopenharmony_ci self.assertEqual(call(1).method(2)(3).call_list(), 3277db96d56Sopenharmony_ci mock.mock_calls) 3287db96d56Sopenharmony_ci 3297db96d56Sopenharmony_ci mock = MagicMock() 3307db96d56Sopenharmony_ci int(mock(1).method(2)(3).foo.bar.baz(4)(5)) 3317db96d56Sopenharmony_ci kall = call(1).method(2)(3).foo.bar.baz(4)(5).__int__() 3327db96d56Sopenharmony_ci self.assertEqual(kall.call_list(), mock.mock_calls) 3337db96d56Sopenharmony_ci 3347db96d56Sopenharmony_ci 3357db96d56Sopenharmony_ci def test_call_any(self): 3367db96d56Sopenharmony_ci self.assertEqual(call, ANY) 3377db96d56Sopenharmony_ci 3387db96d56Sopenharmony_ci m = MagicMock() 3397db96d56Sopenharmony_ci int(m) 3407db96d56Sopenharmony_ci self.assertEqual(m.mock_calls, [ANY]) 3417db96d56Sopenharmony_ci self.assertEqual([ANY], m.mock_calls) 3427db96d56Sopenharmony_ci 3437db96d56Sopenharmony_ci 3447db96d56Sopenharmony_ci def test_two_args_call(self): 3457db96d56Sopenharmony_ci args = _Call(((1, 2), {'a': 3}), two=True) 3467db96d56Sopenharmony_ci self.assertEqual(len(args), 2) 3477db96d56Sopenharmony_ci self.assertEqual(args[0], (1, 2)) 3487db96d56Sopenharmony_ci self.assertEqual(args[1], {'a': 3}) 3497db96d56Sopenharmony_ci 3507db96d56Sopenharmony_ci other_args = _Call(((1, 2), {'a': 3})) 3517db96d56Sopenharmony_ci self.assertEqual(args, other_args) 3527db96d56Sopenharmony_ci 3537db96d56Sopenharmony_ci def test_call_with_name(self): 3547db96d56Sopenharmony_ci self.assertEqual(_Call((), 'foo')[0], 'foo') 3557db96d56Sopenharmony_ci self.assertEqual(_Call((('bar', 'barz'),),)[0], '') 3567db96d56Sopenharmony_ci self.assertEqual(_Call((('bar', 'barz'), {'hello': 'world'}),)[0], '') 3577db96d56Sopenharmony_ci 3587db96d56Sopenharmony_ci def test_dunder_call(self): 3597db96d56Sopenharmony_ci m = MagicMock() 3607db96d56Sopenharmony_ci m().foo()['bar']() 3617db96d56Sopenharmony_ci self.assertEqual( 3627db96d56Sopenharmony_ci m.mock_calls, 3637db96d56Sopenharmony_ci [call(), call().foo(), call().foo().__getitem__('bar'), call().foo().__getitem__()()] 3647db96d56Sopenharmony_ci ) 3657db96d56Sopenharmony_ci m = MagicMock() 3667db96d56Sopenharmony_ci m().foo()['bar'] = 1 3677db96d56Sopenharmony_ci self.assertEqual( 3687db96d56Sopenharmony_ci m.mock_calls, 3697db96d56Sopenharmony_ci [call(), call().foo(), call().foo().__setitem__('bar', 1)] 3707db96d56Sopenharmony_ci ) 3717db96d56Sopenharmony_ci m = MagicMock() 3727db96d56Sopenharmony_ci iter(m().foo()) 3737db96d56Sopenharmony_ci self.assertEqual( 3747db96d56Sopenharmony_ci m.mock_calls, 3757db96d56Sopenharmony_ci [call(), call().foo(), call().foo().__iter__()] 3767db96d56Sopenharmony_ci ) 3777db96d56Sopenharmony_ci 3787db96d56Sopenharmony_ci 3797db96d56Sopenharmony_ciclass SpecSignatureTest(unittest.TestCase): 3807db96d56Sopenharmony_ci 3817db96d56Sopenharmony_ci def _check_someclass_mock(self, mock): 3827db96d56Sopenharmony_ci self.assertRaises(AttributeError, getattr, mock, 'foo') 3837db96d56Sopenharmony_ci mock.one(1, 2) 3847db96d56Sopenharmony_ci mock.one.assert_called_with(1, 2) 3857db96d56Sopenharmony_ci self.assertRaises(AssertionError, 3867db96d56Sopenharmony_ci mock.one.assert_called_with, 3, 4) 3877db96d56Sopenharmony_ci self.assertRaises(TypeError, mock.one, 1) 3887db96d56Sopenharmony_ci 3897db96d56Sopenharmony_ci mock.two() 3907db96d56Sopenharmony_ci mock.two.assert_called_with() 3917db96d56Sopenharmony_ci self.assertRaises(AssertionError, 3927db96d56Sopenharmony_ci mock.two.assert_called_with, 3) 3937db96d56Sopenharmony_ci self.assertRaises(TypeError, mock.two, 1) 3947db96d56Sopenharmony_ci 3957db96d56Sopenharmony_ci mock.three() 3967db96d56Sopenharmony_ci mock.three.assert_called_with() 3977db96d56Sopenharmony_ci self.assertRaises(AssertionError, 3987db96d56Sopenharmony_ci mock.three.assert_called_with, 3) 3997db96d56Sopenharmony_ci self.assertRaises(TypeError, mock.three, 3, 2) 4007db96d56Sopenharmony_ci 4017db96d56Sopenharmony_ci mock.three(1) 4027db96d56Sopenharmony_ci mock.three.assert_called_with(1) 4037db96d56Sopenharmony_ci 4047db96d56Sopenharmony_ci mock.three(a=1) 4057db96d56Sopenharmony_ci mock.three.assert_called_with(a=1) 4067db96d56Sopenharmony_ci 4077db96d56Sopenharmony_ci 4087db96d56Sopenharmony_ci def test_basic(self): 4097db96d56Sopenharmony_ci mock = create_autospec(SomeClass) 4107db96d56Sopenharmony_ci self._check_someclass_mock(mock) 4117db96d56Sopenharmony_ci mock = create_autospec(SomeClass()) 4127db96d56Sopenharmony_ci self._check_someclass_mock(mock) 4137db96d56Sopenharmony_ci 4147db96d56Sopenharmony_ci 4157db96d56Sopenharmony_ci def test_create_autospec_return_value(self): 4167db96d56Sopenharmony_ci def f(): pass 4177db96d56Sopenharmony_ci mock = create_autospec(f, return_value='foo') 4187db96d56Sopenharmony_ci self.assertEqual(mock(), 'foo') 4197db96d56Sopenharmony_ci 4207db96d56Sopenharmony_ci class Foo(object): 4217db96d56Sopenharmony_ci pass 4227db96d56Sopenharmony_ci 4237db96d56Sopenharmony_ci mock = create_autospec(Foo, return_value='foo') 4247db96d56Sopenharmony_ci self.assertEqual(mock(), 'foo') 4257db96d56Sopenharmony_ci 4267db96d56Sopenharmony_ci 4277db96d56Sopenharmony_ci def test_autospec_reset_mock(self): 4287db96d56Sopenharmony_ci m = create_autospec(int) 4297db96d56Sopenharmony_ci int(m) 4307db96d56Sopenharmony_ci m.reset_mock() 4317db96d56Sopenharmony_ci self.assertEqual(m.__int__.call_count, 0) 4327db96d56Sopenharmony_ci 4337db96d56Sopenharmony_ci 4347db96d56Sopenharmony_ci def test_mocking_unbound_methods(self): 4357db96d56Sopenharmony_ci class Foo(object): 4367db96d56Sopenharmony_ci def foo(self, foo): pass 4377db96d56Sopenharmony_ci p = patch.object(Foo, 'foo') 4387db96d56Sopenharmony_ci mock_foo = p.start() 4397db96d56Sopenharmony_ci Foo().foo(1) 4407db96d56Sopenharmony_ci 4417db96d56Sopenharmony_ci mock_foo.assert_called_with(1) 4427db96d56Sopenharmony_ci 4437db96d56Sopenharmony_ci 4447db96d56Sopenharmony_ci def test_create_autospec_keyword_arguments(self): 4457db96d56Sopenharmony_ci class Foo(object): 4467db96d56Sopenharmony_ci a = 3 4477db96d56Sopenharmony_ci m = create_autospec(Foo, a='3') 4487db96d56Sopenharmony_ci self.assertEqual(m.a, '3') 4497db96d56Sopenharmony_ci 4507db96d56Sopenharmony_ci 4517db96d56Sopenharmony_ci def test_create_autospec_keyword_only_arguments(self): 4527db96d56Sopenharmony_ci def foo(a, *, b=None): pass 4537db96d56Sopenharmony_ci 4547db96d56Sopenharmony_ci m = create_autospec(foo) 4557db96d56Sopenharmony_ci m(1) 4567db96d56Sopenharmony_ci m.assert_called_with(1) 4577db96d56Sopenharmony_ci self.assertRaises(TypeError, m, 1, 2) 4587db96d56Sopenharmony_ci 4597db96d56Sopenharmony_ci m(2, b=3) 4607db96d56Sopenharmony_ci m.assert_called_with(2, b=3) 4617db96d56Sopenharmony_ci 4627db96d56Sopenharmony_ci 4637db96d56Sopenharmony_ci def test_function_as_instance_attribute(self): 4647db96d56Sopenharmony_ci obj = SomeClass() 4657db96d56Sopenharmony_ci def f(a): pass 4667db96d56Sopenharmony_ci obj.f = f 4677db96d56Sopenharmony_ci 4687db96d56Sopenharmony_ci mock = create_autospec(obj) 4697db96d56Sopenharmony_ci mock.f('bing') 4707db96d56Sopenharmony_ci mock.f.assert_called_with('bing') 4717db96d56Sopenharmony_ci 4727db96d56Sopenharmony_ci 4737db96d56Sopenharmony_ci def test_spec_as_list(self): 4747db96d56Sopenharmony_ci # because spec as a list of strings in the mock constructor means 4757db96d56Sopenharmony_ci # something very different we treat a list instance as the type. 4767db96d56Sopenharmony_ci mock = create_autospec([]) 4777db96d56Sopenharmony_ci mock.append('foo') 4787db96d56Sopenharmony_ci mock.append.assert_called_with('foo') 4797db96d56Sopenharmony_ci 4807db96d56Sopenharmony_ci self.assertRaises(AttributeError, getattr, mock, 'foo') 4817db96d56Sopenharmony_ci 4827db96d56Sopenharmony_ci class Foo(object): 4837db96d56Sopenharmony_ci foo = [] 4847db96d56Sopenharmony_ci 4857db96d56Sopenharmony_ci mock = create_autospec(Foo) 4867db96d56Sopenharmony_ci mock.foo.append(3) 4877db96d56Sopenharmony_ci mock.foo.append.assert_called_with(3) 4887db96d56Sopenharmony_ci self.assertRaises(AttributeError, getattr, mock.foo, 'foo') 4897db96d56Sopenharmony_ci 4907db96d56Sopenharmony_ci 4917db96d56Sopenharmony_ci def test_attributes(self): 4927db96d56Sopenharmony_ci class Sub(SomeClass): 4937db96d56Sopenharmony_ci attr = SomeClass() 4947db96d56Sopenharmony_ci 4957db96d56Sopenharmony_ci sub_mock = create_autospec(Sub) 4967db96d56Sopenharmony_ci 4977db96d56Sopenharmony_ci for mock in (sub_mock, sub_mock.attr): 4987db96d56Sopenharmony_ci self._check_someclass_mock(mock) 4997db96d56Sopenharmony_ci 5007db96d56Sopenharmony_ci 5017db96d56Sopenharmony_ci def test_spec_has_descriptor_returning_function(self): 5027db96d56Sopenharmony_ci 5037db96d56Sopenharmony_ci class CrazyDescriptor(object): 5047db96d56Sopenharmony_ci 5057db96d56Sopenharmony_ci def __get__(self, obj, type_): 5067db96d56Sopenharmony_ci if obj is None: 5077db96d56Sopenharmony_ci return lambda x: None 5087db96d56Sopenharmony_ci 5097db96d56Sopenharmony_ci class MyClass(object): 5107db96d56Sopenharmony_ci 5117db96d56Sopenharmony_ci some_attr = CrazyDescriptor() 5127db96d56Sopenharmony_ci 5137db96d56Sopenharmony_ci mock = create_autospec(MyClass) 5147db96d56Sopenharmony_ci mock.some_attr(1) 5157db96d56Sopenharmony_ci with self.assertRaises(TypeError): 5167db96d56Sopenharmony_ci mock.some_attr() 5177db96d56Sopenharmony_ci with self.assertRaises(TypeError): 5187db96d56Sopenharmony_ci mock.some_attr(1, 2) 5197db96d56Sopenharmony_ci 5207db96d56Sopenharmony_ci 5217db96d56Sopenharmony_ci def test_spec_has_function_not_in_bases(self): 5227db96d56Sopenharmony_ci 5237db96d56Sopenharmony_ci class CrazyClass(object): 5247db96d56Sopenharmony_ci 5257db96d56Sopenharmony_ci def __dir__(self): 5267db96d56Sopenharmony_ci return super(CrazyClass, self).__dir__()+['crazy'] 5277db96d56Sopenharmony_ci 5287db96d56Sopenharmony_ci def __getattr__(self, item): 5297db96d56Sopenharmony_ci if item == 'crazy': 5307db96d56Sopenharmony_ci return lambda x: x 5317db96d56Sopenharmony_ci raise AttributeError(item) 5327db96d56Sopenharmony_ci 5337db96d56Sopenharmony_ci inst = CrazyClass() 5347db96d56Sopenharmony_ci with self.assertRaises(AttributeError): 5357db96d56Sopenharmony_ci inst.other 5367db96d56Sopenharmony_ci self.assertEqual(inst.crazy(42), 42) 5377db96d56Sopenharmony_ci 5387db96d56Sopenharmony_ci mock = create_autospec(inst) 5397db96d56Sopenharmony_ci mock.crazy(42) 5407db96d56Sopenharmony_ci with self.assertRaises(TypeError): 5417db96d56Sopenharmony_ci mock.crazy() 5427db96d56Sopenharmony_ci with self.assertRaises(TypeError): 5437db96d56Sopenharmony_ci mock.crazy(1, 2) 5447db96d56Sopenharmony_ci 5457db96d56Sopenharmony_ci 5467db96d56Sopenharmony_ci def test_builtin_functions_types(self): 5477db96d56Sopenharmony_ci # we could replace builtin functions / methods with a function 5487db96d56Sopenharmony_ci # with *args / **kwargs signature. Using the builtin method type 5497db96d56Sopenharmony_ci # as a spec seems to work fairly well though. 5507db96d56Sopenharmony_ci class BuiltinSubclass(list): 5517db96d56Sopenharmony_ci def bar(self, arg): pass 5527db96d56Sopenharmony_ci sorted = sorted 5537db96d56Sopenharmony_ci attr = {} 5547db96d56Sopenharmony_ci 5557db96d56Sopenharmony_ci mock = create_autospec(BuiltinSubclass) 5567db96d56Sopenharmony_ci mock.append(3) 5577db96d56Sopenharmony_ci mock.append.assert_called_with(3) 5587db96d56Sopenharmony_ci self.assertRaises(AttributeError, getattr, mock.append, 'foo') 5597db96d56Sopenharmony_ci 5607db96d56Sopenharmony_ci mock.bar('foo') 5617db96d56Sopenharmony_ci mock.bar.assert_called_with('foo') 5627db96d56Sopenharmony_ci self.assertRaises(TypeError, mock.bar, 'foo', 'bar') 5637db96d56Sopenharmony_ci self.assertRaises(AttributeError, getattr, mock.bar, 'foo') 5647db96d56Sopenharmony_ci 5657db96d56Sopenharmony_ci mock.sorted([1, 2]) 5667db96d56Sopenharmony_ci mock.sorted.assert_called_with([1, 2]) 5677db96d56Sopenharmony_ci self.assertRaises(AttributeError, getattr, mock.sorted, 'foo') 5687db96d56Sopenharmony_ci 5697db96d56Sopenharmony_ci mock.attr.pop(3) 5707db96d56Sopenharmony_ci mock.attr.pop.assert_called_with(3) 5717db96d56Sopenharmony_ci self.assertRaises(AttributeError, getattr, mock.attr, 'foo') 5727db96d56Sopenharmony_ci 5737db96d56Sopenharmony_ci 5747db96d56Sopenharmony_ci def test_method_calls(self): 5757db96d56Sopenharmony_ci class Sub(SomeClass): 5767db96d56Sopenharmony_ci attr = SomeClass() 5777db96d56Sopenharmony_ci 5787db96d56Sopenharmony_ci mock = create_autospec(Sub) 5797db96d56Sopenharmony_ci mock.one(1, 2) 5807db96d56Sopenharmony_ci mock.two() 5817db96d56Sopenharmony_ci mock.three(3) 5827db96d56Sopenharmony_ci 5837db96d56Sopenharmony_ci expected = [call.one(1, 2), call.two(), call.three(3)] 5847db96d56Sopenharmony_ci self.assertEqual(mock.method_calls, expected) 5857db96d56Sopenharmony_ci 5867db96d56Sopenharmony_ci mock.attr.one(1, 2) 5877db96d56Sopenharmony_ci mock.attr.two() 5887db96d56Sopenharmony_ci mock.attr.three(3) 5897db96d56Sopenharmony_ci 5907db96d56Sopenharmony_ci expected.extend( 5917db96d56Sopenharmony_ci [call.attr.one(1, 2), call.attr.two(), call.attr.three(3)] 5927db96d56Sopenharmony_ci ) 5937db96d56Sopenharmony_ci self.assertEqual(mock.method_calls, expected) 5947db96d56Sopenharmony_ci 5957db96d56Sopenharmony_ci 5967db96d56Sopenharmony_ci def test_magic_methods(self): 5977db96d56Sopenharmony_ci class BuiltinSubclass(list): 5987db96d56Sopenharmony_ci attr = {} 5997db96d56Sopenharmony_ci 6007db96d56Sopenharmony_ci mock = create_autospec(BuiltinSubclass) 6017db96d56Sopenharmony_ci self.assertEqual(list(mock), []) 6027db96d56Sopenharmony_ci self.assertRaises(TypeError, int, mock) 6037db96d56Sopenharmony_ci self.assertRaises(TypeError, int, mock.attr) 6047db96d56Sopenharmony_ci self.assertEqual(list(mock), []) 6057db96d56Sopenharmony_ci 6067db96d56Sopenharmony_ci self.assertIsInstance(mock['foo'], MagicMock) 6077db96d56Sopenharmony_ci self.assertIsInstance(mock.attr['foo'], MagicMock) 6087db96d56Sopenharmony_ci 6097db96d56Sopenharmony_ci 6107db96d56Sopenharmony_ci def test_spec_set(self): 6117db96d56Sopenharmony_ci class Sub(SomeClass): 6127db96d56Sopenharmony_ci attr = SomeClass() 6137db96d56Sopenharmony_ci 6147db96d56Sopenharmony_ci for spec in (Sub, Sub()): 6157db96d56Sopenharmony_ci mock = create_autospec(spec, spec_set=True) 6167db96d56Sopenharmony_ci self._check_someclass_mock(mock) 6177db96d56Sopenharmony_ci 6187db96d56Sopenharmony_ci self.assertRaises(AttributeError, setattr, mock, 'foo', 'bar') 6197db96d56Sopenharmony_ci self.assertRaises(AttributeError, setattr, mock.attr, 'foo', 'bar') 6207db96d56Sopenharmony_ci 6217db96d56Sopenharmony_ci 6227db96d56Sopenharmony_ci def test_descriptors(self): 6237db96d56Sopenharmony_ci class Foo(object): 6247db96d56Sopenharmony_ci @classmethod 6257db96d56Sopenharmony_ci def f(cls, a, b): pass 6267db96d56Sopenharmony_ci @staticmethod 6277db96d56Sopenharmony_ci def g(a, b): pass 6287db96d56Sopenharmony_ci 6297db96d56Sopenharmony_ci class Bar(Foo): pass 6307db96d56Sopenharmony_ci 6317db96d56Sopenharmony_ci class Baz(SomeClass, Bar): pass 6327db96d56Sopenharmony_ci 6337db96d56Sopenharmony_ci for spec in (Foo, Foo(), Bar, Bar(), Baz, Baz()): 6347db96d56Sopenharmony_ci mock = create_autospec(spec) 6357db96d56Sopenharmony_ci mock.f(1, 2) 6367db96d56Sopenharmony_ci mock.f.assert_called_once_with(1, 2) 6377db96d56Sopenharmony_ci 6387db96d56Sopenharmony_ci mock.g(3, 4) 6397db96d56Sopenharmony_ci mock.g.assert_called_once_with(3, 4) 6407db96d56Sopenharmony_ci 6417db96d56Sopenharmony_ci 6427db96d56Sopenharmony_ci def test_recursive(self): 6437db96d56Sopenharmony_ci class A(object): 6447db96d56Sopenharmony_ci def a(self): pass 6457db96d56Sopenharmony_ci foo = 'foo bar baz' 6467db96d56Sopenharmony_ci bar = foo 6477db96d56Sopenharmony_ci 6487db96d56Sopenharmony_ci A.B = A 6497db96d56Sopenharmony_ci mock = create_autospec(A) 6507db96d56Sopenharmony_ci 6517db96d56Sopenharmony_ci mock() 6527db96d56Sopenharmony_ci self.assertFalse(mock.B.called) 6537db96d56Sopenharmony_ci 6547db96d56Sopenharmony_ci mock.a() 6557db96d56Sopenharmony_ci mock.B.a() 6567db96d56Sopenharmony_ci self.assertEqual(mock.method_calls, [call.a(), call.B.a()]) 6577db96d56Sopenharmony_ci 6587db96d56Sopenharmony_ci self.assertIs(A.foo, A.bar) 6597db96d56Sopenharmony_ci self.assertIsNot(mock.foo, mock.bar) 6607db96d56Sopenharmony_ci mock.foo.lower() 6617db96d56Sopenharmony_ci self.assertRaises(AssertionError, mock.bar.lower.assert_called_with) 6627db96d56Sopenharmony_ci 6637db96d56Sopenharmony_ci 6647db96d56Sopenharmony_ci def test_spec_inheritance_for_classes(self): 6657db96d56Sopenharmony_ci class Foo(object): 6667db96d56Sopenharmony_ci def a(self, x): pass 6677db96d56Sopenharmony_ci class Bar(object): 6687db96d56Sopenharmony_ci def f(self, y): pass 6697db96d56Sopenharmony_ci 6707db96d56Sopenharmony_ci class_mock = create_autospec(Foo) 6717db96d56Sopenharmony_ci 6727db96d56Sopenharmony_ci self.assertIsNot(class_mock, class_mock()) 6737db96d56Sopenharmony_ci 6747db96d56Sopenharmony_ci for this_mock in class_mock, class_mock(): 6757db96d56Sopenharmony_ci this_mock.a(x=5) 6767db96d56Sopenharmony_ci this_mock.a.assert_called_with(x=5) 6777db96d56Sopenharmony_ci this_mock.a.assert_called_with(5) 6787db96d56Sopenharmony_ci self.assertRaises(TypeError, this_mock.a, 'foo', 'bar') 6797db96d56Sopenharmony_ci self.assertRaises(AttributeError, getattr, this_mock, 'b') 6807db96d56Sopenharmony_ci 6817db96d56Sopenharmony_ci instance_mock = create_autospec(Foo()) 6827db96d56Sopenharmony_ci instance_mock.a(5) 6837db96d56Sopenharmony_ci instance_mock.a.assert_called_with(5) 6847db96d56Sopenharmony_ci instance_mock.a.assert_called_with(x=5) 6857db96d56Sopenharmony_ci self.assertRaises(TypeError, instance_mock.a, 'foo', 'bar') 6867db96d56Sopenharmony_ci self.assertRaises(AttributeError, getattr, instance_mock, 'b') 6877db96d56Sopenharmony_ci 6887db96d56Sopenharmony_ci # The return value isn't isn't callable 6897db96d56Sopenharmony_ci self.assertRaises(TypeError, instance_mock) 6907db96d56Sopenharmony_ci 6917db96d56Sopenharmony_ci instance_mock.Bar.f(6) 6927db96d56Sopenharmony_ci instance_mock.Bar.f.assert_called_with(6) 6937db96d56Sopenharmony_ci instance_mock.Bar.f.assert_called_with(y=6) 6947db96d56Sopenharmony_ci self.assertRaises(AttributeError, getattr, instance_mock.Bar, 'g') 6957db96d56Sopenharmony_ci 6967db96d56Sopenharmony_ci instance_mock.Bar().f(6) 6977db96d56Sopenharmony_ci instance_mock.Bar().f.assert_called_with(6) 6987db96d56Sopenharmony_ci instance_mock.Bar().f.assert_called_with(y=6) 6997db96d56Sopenharmony_ci self.assertRaises(AttributeError, getattr, instance_mock.Bar(), 'g') 7007db96d56Sopenharmony_ci 7017db96d56Sopenharmony_ci 7027db96d56Sopenharmony_ci def test_inherit(self): 7037db96d56Sopenharmony_ci class Foo(object): 7047db96d56Sopenharmony_ci a = 3 7057db96d56Sopenharmony_ci 7067db96d56Sopenharmony_ci Foo.Foo = Foo 7077db96d56Sopenharmony_ci 7087db96d56Sopenharmony_ci # class 7097db96d56Sopenharmony_ci mock = create_autospec(Foo) 7107db96d56Sopenharmony_ci instance = mock() 7117db96d56Sopenharmony_ci self.assertRaises(AttributeError, getattr, instance, 'b') 7127db96d56Sopenharmony_ci 7137db96d56Sopenharmony_ci attr_instance = mock.Foo() 7147db96d56Sopenharmony_ci self.assertRaises(AttributeError, getattr, attr_instance, 'b') 7157db96d56Sopenharmony_ci 7167db96d56Sopenharmony_ci # instance 7177db96d56Sopenharmony_ci mock = create_autospec(Foo()) 7187db96d56Sopenharmony_ci self.assertRaises(AttributeError, getattr, mock, 'b') 7197db96d56Sopenharmony_ci self.assertRaises(TypeError, mock) 7207db96d56Sopenharmony_ci 7217db96d56Sopenharmony_ci # attribute instance 7227db96d56Sopenharmony_ci call_result = mock.Foo() 7237db96d56Sopenharmony_ci self.assertRaises(AttributeError, getattr, call_result, 'b') 7247db96d56Sopenharmony_ci 7257db96d56Sopenharmony_ci 7267db96d56Sopenharmony_ci def test_builtins(self): 7277db96d56Sopenharmony_ci # used to fail with infinite recursion 7287db96d56Sopenharmony_ci create_autospec(1) 7297db96d56Sopenharmony_ci 7307db96d56Sopenharmony_ci create_autospec(int) 7317db96d56Sopenharmony_ci create_autospec('foo') 7327db96d56Sopenharmony_ci create_autospec(str) 7337db96d56Sopenharmony_ci create_autospec({}) 7347db96d56Sopenharmony_ci create_autospec(dict) 7357db96d56Sopenharmony_ci create_autospec([]) 7367db96d56Sopenharmony_ci create_autospec(list) 7377db96d56Sopenharmony_ci create_autospec(set()) 7387db96d56Sopenharmony_ci create_autospec(set) 7397db96d56Sopenharmony_ci create_autospec(1.0) 7407db96d56Sopenharmony_ci create_autospec(float) 7417db96d56Sopenharmony_ci create_autospec(1j) 7427db96d56Sopenharmony_ci create_autospec(complex) 7437db96d56Sopenharmony_ci create_autospec(False) 7447db96d56Sopenharmony_ci create_autospec(True) 7457db96d56Sopenharmony_ci 7467db96d56Sopenharmony_ci 7477db96d56Sopenharmony_ci def test_function(self): 7487db96d56Sopenharmony_ci def f(a, b): pass 7497db96d56Sopenharmony_ci 7507db96d56Sopenharmony_ci mock = create_autospec(f) 7517db96d56Sopenharmony_ci self.assertRaises(TypeError, mock) 7527db96d56Sopenharmony_ci mock(1, 2) 7537db96d56Sopenharmony_ci mock.assert_called_with(1, 2) 7547db96d56Sopenharmony_ci mock.assert_called_with(1, b=2) 7557db96d56Sopenharmony_ci mock.assert_called_with(a=1, b=2) 7567db96d56Sopenharmony_ci 7577db96d56Sopenharmony_ci f.f = f 7587db96d56Sopenharmony_ci mock = create_autospec(f) 7597db96d56Sopenharmony_ci self.assertRaises(TypeError, mock.f) 7607db96d56Sopenharmony_ci mock.f(3, 4) 7617db96d56Sopenharmony_ci mock.f.assert_called_with(3, 4) 7627db96d56Sopenharmony_ci mock.f.assert_called_with(a=3, b=4) 7637db96d56Sopenharmony_ci 7647db96d56Sopenharmony_ci 7657db96d56Sopenharmony_ci def test_skip_attributeerrors(self): 7667db96d56Sopenharmony_ci class Raiser(object): 7677db96d56Sopenharmony_ci def __get__(self, obj, type=None): 7687db96d56Sopenharmony_ci if obj is None: 7697db96d56Sopenharmony_ci raise AttributeError('Can only be accessed via an instance') 7707db96d56Sopenharmony_ci 7717db96d56Sopenharmony_ci class RaiserClass(object): 7727db96d56Sopenharmony_ci raiser = Raiser() 7737db96d56Sopenharmony_ci 7747db96d56Sopenharmony_ci @staticmethod 7757db96d56Sopenharmony_ci def existing(a, b): 7767db96d56Sopenharmony_ci return a + b 7777db96d56Sopenharmony_ci 7787db96d56Sopenharmony_ci self.assertEqual(RaiserClass.existing(1, 2), 3) 7797db96d56Sopenharmony_ci s = create_autospec(RaiserClass) 7807db96d56Sopenharmony_ci self.assertRaises(TypeError, lambda x: s.existing(1, 2, 3)) 7817db96d56Sopenharmony_ci self.assertEqual(s.existing(1, 2), s.existing.return_value) 7827db96d56Sopenharmony_ci self.assertRaises(AttributeError, lambda: s.nonexisting) 7837db96d56Sopenharmony_ci 7847db96d56Sopenharmony_ci # check we can fetch the raiser attribute and it has no spec 7857db96d56Sopenharmony_ci obj = s.raiser 7867db96d56Sopenharmony_ci obj.foo, obj.bar 7877db96d56Sopenharmony_ci 7887db96d56Sopenharmony_ci 7897db96d56Sopenharmony_ci def test_signature_class(self): 7907db96d56Sopenharmony_ci class Foo(object): 7917db96d56Sopenharmony_ci def __init__(self, a, b=3): pass 7927db96d56Sopenharmony_ci 7937db96d56Sopenharmony_ci mock = create_autospec(Foo) 7947db96d56Sopenharmony_ci 7957db96d56Sopenharmony_ci self.assertRaises(TypeError, mock) 7967db96d56Sopenharmony_ci mock(1) 7977db96d56Sopenharmony_ci mock.assert_called_once_with(1) 7987db96d56Sopenharmony_ci mock.assert_called_once_with(a=1) 7997db96d56Sopenharmony_ci self.assertRaises(AssertionError, mock.assert_called_once_with, 2) 8007db96d56Sopenharmony_ci 8017db96d56Sopenharmony_ci mock(4, 5) 8027db96d56Sopenharmony_ci mock.assert_called_with(4, 5) 8037db96d56Sopenharmony_ci mock.assert_called_with(a=4, b=5) 8047db96d56Sopenharmony_ci self.assertRaises(AssertionError, mock.assert_called_with, a=5, b=4) 8057db96d56Sopenharmony_ci 8067db96d56Sopenharmony_ci 8077db96d56Sopenharmony_ci def test_class_with_no_init(self): 8087db96d56Sopenharmony_ci # this used to raise an exception 8097db96d56Sopenharmony_ci # due to trying to get a signature from object.__init__ 8107db96d56Sopenharmony_ci class Foo(object): 8117db96d56Sopenharmony_ci pass 8127db96d56Sopenharmony_ci create_autospec(Foo) 8137db96d56Sopenharmony_ci 8147db96d56Sopenharmony_ci 8157db96d56Sopenharmony_ci def test_signature_callable(self): 8167db96d56Sopenharmony_ci class Callable(object): 8177db96d56Sopenharmony_ci def __init__(self, x, y): pass 8187db96d56Sopenharmony_ci def __call__(self, a): pass 8197db96d56Sopenharmony_ci 8207db96d56Sopenharmony_ci mock = create_autospec(Callable) 8217db96d56Sopenharmony_ci mock(1, 2) 8227db96d56Sopenharmony_ci mock.assert_called_once_with(1, 2) 8237db96d56Sopenharmony_ci mock.assert_called_once_with(x=1, y=2) 8247db96d56Sopenharmony_ci self.assertRaises(TypeError, mock, 'a') 8257db96d56Sopenharmony_ci 8267db96d56Sopenharmony_ci instance = mock(1, 2) 8277db96d56Sopenharmony_ci self.assertRaises(TypeError, instance) 8287db96d56Sopenharmony_ci instance(a='a') 8297db96d56Sopenharmony_ci instance.assert_called_once_with('a') 8307db96d56Sopenharmony_ci instance.assert_called_once_with(a='a') 8317db96d56Sopenharmony_ci instance('a') 8327db96d56Sopenharmony_ci instance.assert_called_with('a') 8337db96d56Sopenharmony_ci instance.assert_called_with(a='a') 8347db96d56Sopenharmony_ci 8357db96d56Sopenharmony_ci mock = create_autospec(Callable(1, 2)) 8367db96d56Sopenharmony_ci mock(a='a') 8377db96d56Sopenharmony_ci mock.assert_called_once_with(a='a') 8387db96d56Sopenharmony_ci self.assertRaises(TypeError, mock) 8397db96d56Sopenharmony_ci mock('a') 8407db96d56Sopenharmony_ci mock.assert_called_with('a') 8417db96d56Sopenharmony_ci 8427db96d56Sopenharmony_ci 8437db96d56Sopenharmony_ci def test_signature_noncallable(self): 8447db96d56Sopenharmony_ci class NonCallable(object): 8457db96d56Sopenharmony_ci def __init__(self): 8467db96d56Sopenharmony_ci pass 8477db96d56Sopenharmony_ci 8487db96d56Sopenharmony_ci mock = create_autospec(NonCallable) 8497db96d56Sopenharmony_ci instance = mock() 8507db96d56Sopenharmony_ci mock.assert_called_once_with() 8517db96d56Sopenharmony_ci self.assertRaises(TypeError, mock, 'a') 8527db96d56Sopenharmony_ci self.assertRaises(TypeError, instance) 8537db96d56Sopenharmony_ci self.assertRaises(TypeError, instance, 'a') 8547db96d56Sopenharmony_ci 8557db96d56Sopenharmony_ci mock = create_autospec(NonCallable()) 8567db96d56Sopenharmony_ci self.assertRaises(TypeError, mock) 8577db96d56Sopenharmony_ci self.assertRaises(TypeError, mock, 'a') 8587db96d56Sopenharmony_ci 8597db96d56Sopenharmony_ci 8607db96d56Sopenharmony_ci def test_create_autospec_none(self): 8617db96d56Sopenharmony_ci class Foo(object): 8627db96d56Sopenharmony_ci bar = None 8637db96d56Sopenharmony_ci 8647db96d56Sopenharmony_ci mock = create_autospec(Foo) 8657db96d56Sopenharmony_ci none = mock.bar 8667db96d56Sopenharmony_ci self.assertNotIsInstance(none, type(None)) 8677db96d56Sopenharmony_ci 8687db96d56Sopenharmony_ci none.foo() 8697db96d56Sopenharmony_ci none.foo.assert_called_once_with() 8707db96d56Sopenharmony_ci 8717db96d56Sopenharmony_ci 8727db96d56Sopenharmony_ci def test_autospec_functions_with_self_in_odd_place(self): 8737db96d56Sopenharmony_ci class Foo(object): 8747db96d56Sopenharmony_ci def f(a, self): pass 8757db96d56Sopenharmony_ci 8767db96d56Sopenharmony_ci a = create_autospec(Foo) 8777db96d56Sopenharmony_ci a.f(10) 8787db96d56Sopenharmony_ci a.f.assert_called_with(10) 8797db96d56Sopenharmony_ci a.f.assert_called_with(self=10) 8807db96d56Sopenharmony_ci a.f(self=10) 8817db96d56Sopenharmony_ci a.f.assert_called_with(10) 8827db96d56Sopenharmony_ci a.f.assert_called_with(self=10) 8837db96d56Sopenharmony_ci 8847db96d56Sopenharmony_ci 8857db96d56Sopenharmony_ci def test_autospec_data_descriptor(self): 8867db96d56Sopenharmony_ci class Descriptor(object): 8877db96d56Sopenharmony_ci def __init__(self, value): 8887db96d56Sopenharmony_ci self.value = value 8897db96d56Sopenharmony_ci 8907db96d56Sopenharmony_ci def __get__(self, obj, cls=None): 8917db96d56Sopenharmony_ci return self 8927db96d56Sopenharmony_ci 8937db96d56Sopenharmony_ci def __set__(self, obj, value): pass 8947db96d56Sopenharmony_ci 8957db96d56Sopenharmony_ci class MyProperty(property): 8967db96d56Sopenharmony_ci pass 8977db96d56Sopenharmony_ci 8987db96d56Sopenharmony_ci class Foo(object): 8997db96d56Sopenharmony_ci __slots__ = ['slot'] 9007db96d56Sopenharmony_ci 9017db96d56Sopenharmony_ci @property 9027db96d56Sopenharmony_ci def prop(self): pass 9037db96d56Sopenharmony_ci 9047db96d56Sopenharmony_ci @MyProperty 9057db96d56Sopenharmony_ci def subprop(self): pass 9067db96d56Sopenharmony_ci 9077db96d56Sopenharmony_ci desc = Descriptor(42) 9087db96d56Sopenharmony_ci 9097db96d56Sopenharmony_ci foo = create_autospec(Foo) 9107db96d56Sopenharmony_ci 9117db96d56Sopenharmony_ci def check_data_descriptor(mock_attr): 9127db96d56Sopenharmony_ci # Data descriptors don't have a spec. 9137db96d56Sopenharmony_ci self.assertIsInstance(mock_attr, MagicMock) 9147db96d56Sopenharmony_ci mock_attr(1, 2, 3) 9157db96d56Sopenharmony_ci mock_attr.abc(4, 5, 6) 9167db96d56Sopenharmony_ci mock_attr.assert_called_once_with(1, 2, 3) 9177db96d56Sopenharmony_ci mock_attr.abc.assert_called_once_with(4, 5, 6) 9187db96d56Sopenharmony_ci 9197db96d56Sopenharmony_ci # property 9207db96d56Sopenharmony_ci check_data_descriptor(foo.prop) 9217db96d56Sopenharmony_ci # property subclass 9227db96d56Sopenharmony_ci check_data_descriptor(foo.subprop) 9237db96d56Sopenharmony_ci # class __slot__ 9247db96d56Sopenharmony_ci check_data_descriptor(foo.slot) 9257db96d56Sopenharmony_ci # plain data descriptor 9267db96d56Sopenharmony_ci check_data_descriptor(foo.desc) 9277db96d56Sopenharmony_ci 9287db96d56Sopenharmony_ci 9297db96d56Sopenharmony_ci def test_autospec_on_bound_builtin_function(self): 9307db96d56Sopenharmony_ci meth = types.MethodType(time.ctime, time.time()) 9317db96d56Sopenharmony_ci self.assertIsInstance(meth(), str) 9327db96d56Sopenharmony_ci mocked = create_autospec(meth) 9337db96d56Sopenharmony_ci 9347db96d56Sopenharmony_ci # no signature, so no spec to check against 9357db96d56Sopenharmony_ci mocked() 9367db96d56Sopenharmony_ci mocked.assert_called_once_with() 9377db96d56Sopenharmony_ci mocked.reset_mock() 9387db96d56Sopenharmony_ci mocked(4, 5, 6) 9397db96d56Sopenharmony_ci mocked.assert_called_once_with(4, 5, 6) 9407db96d56Sopenharmony_ci 9417db96d56Sopenharmony_ci 9427db96d56Sopenharmony_ci def test_autospec_getattr_partial_function(self): 9437db96d56Sopenharmony_ci # bpo-32153 : getattr returning partial functions without 9447db96d56Sopenharmony_ci # __name__ should not create AttributeError in create_autospec 9457db96d56Sopenharmony_ci class Foo: 9467db96d56Sopenharmony_ci 9477db96d56Sopenharmony_ci def __getattr__(self, attribute): 9487db96d56Sopenharmony_ci return partial(lambda name: name, attribute) 9497db96d56Sopenharmony_ci 9507db96d56Sopenharmony_ci proxy = Foo() 9517db96d56Sopenharmony_ci autospec = create_autospec(proxy) 9527db96d56Sopenharmony_ci self.assertFalse(hasattr(autospec, '__name__')) 9537db96d56Sopenharmony_ci 9547db96d56Sopenharmony_ci 9557db96d56Sopenharmony_ci def test_autospec_signature_staticmethod(self): 9567db96d56Sopenharmony_ci class Foo: 9577db96d56Sopenharmony_ci @staticmethod 9587db96d56Sopenharmony_ci def static_method(a, b=10, *, c): pass 9597db96d56Sopenharmony_ci 9607db96d56Sopenharmony_ci mock = create_autospec(Foo.__dict__['static_method']) 9617db96d56Sopenharmony_ci self.assertEqual(inspect.signature(Foo.static_method), inspect.signature(mock)) 9627db96d56Sopenharmony_ci 9637db96d56Sopenharmony_ci 9647db96d56Sopenharmony_ci def test_autospec_signature_classmethod(self): 9657db96d56Sopenharmony_ci class Foo: 9667db96d56Sopenharmony_ci @classmethod 9677db96d56Sopenharmony_ci def class_method(cls, a, b=10, *, c): pass 9687db96d56Sopenharmony_ci 9697db96d56Sopenharmony_ci mock = create_autospec(Foo.__dict__['class_method']) 9707db96d56Sopenharmony_ci self.assertEqual(inspect.signature(Foo.class_method), inspect.signature(mock)) 9717db96d56Sopenharmony_ci 9727db96d56Sopenharmony_ci 9737db96d56Sopenharmony_ci def test_spec_inspect_signature(self): 9747db96d56Sopenharmony_ci 9757db96d56Sopenharmony_ci def myfunc(x, y): pass 9767db96d56Sopenharmony_ci 9777db96d56Sopenharmony_ci mock = create_autospec(myfunc) 9787db96d56Sopenharmony_ci mock(1, 2) 9797db96d56Sopenharmony_ci mock(x=1, y=2) 9807db96d56Sopenharmony_ci 9817db96d56Sopenharmony_ci self.assertEqual(inspect.signature(mock), inspect.signature(myfunc)) 9827db96d56Sopenharmony_ci self.assertEqual(mock.mock_calls, [call(1, 2), call(x=1, y=2)]) 9837db96d56Sopenharmony_ci self.assertRaises(TypeError, mock, 1) 9847db96d56Sopenharmony_ci 9857db96d56Sopenharmony_ci 9867db96d56Sopenharmony_ci def test_spec_inspect_signature_annotations(self): 9877db96d56Sopenharmony_ci 9887db96d56Sopenharmony_ci def foo(a: int, b: int=10, *, c:int) -> int: 9897db96d56Sopenharmony_ci return a + b + c 9907db96d56Sopenharmony_ci 9917db96d56Sopenharmony_ci self.assertEqual(foo(1, 2 , c=3), 6) 9927db96d56Sopenharmony_ci mock = create_autospec(foo) 9937db96d56Sopenharmony_ci mock(1, 2, c=3) 9947db96d56Sopenharmony_ci mock(1, c=3) 9957db96d56Sopenharmony_ci 9967db96d56Sopenharmony_ci self.assertEqual(inspect.signature(mock), inspect.signature(foo)) 9977db96d56Sopenharmony_ci self.assertEqual(mock.mock_calls, [call(1, 2, c=3), call(1, c=3)]) 9987db96d56Sopenharmony_ci self.assertRaises(TypeError, mock, 1) 9997db96d56Sopenharmony_ci self.assertRaises(TypeError, mock, 1, 2, 3, c=4) 10007db96d56Sopenharmony_ci 10017db96d56Sopenharmony_ci 10027db96d56Sopenharmony_ci def test_spec_function_no_name(self): 10037db96d56Sopenharmony_ci func = lambda: 'nope' 10047db96d56Sopenharmony_ci mock = create_autospec(func) 10057db96d56Sopenharmony_ci self.assertEqual(mock.__name__, 'funcopy') 10067db96d56Sopenharmony_ci 10077db96d56Sopenharmony_ci 10087db96d56Sopenharmony_ci def test_spec_function_assert_has_calls(self): 10097db96d56Sopenharmony_ci def f(a): pass 10107db96d56Sopenharmony_ci mock = create_autospec(f) 10117db96d56Sopenharmony_ci mock(1) 10127db96d56Sopenharmony_ci mock.assert_has_calls([call(1)]) 10137db96d56Sopenharmony_ci with self.assertRaises(AssertionError): 10147db96d56Sopenharmony_ci mock.assert_has_calls([call(2)]) 10157db96d56Sopenharmony_ci 10167db96d56Sopenharmony_ci 10177db96d56Sopenharmony_ci def test_spec_function_assert_any_call(self): 10187db96d56Sopenharmony_ci def f(a): pass 10197db96d56Sopenharmony_ci mock = create_autospec(f) 10207db96d56Sopenharmony_ci mock(1) 10217db96d56Sopenharmony_ci mock.assert_any_call(1) 10227db96d56Sopenharmony_ci with self.assertRaises(AssertionError): 10237db96d56Sopenharmony_ci mock.assert_any_call(2) 10247db96d56Sopenharmony_ci 10257db96d56Sopenharmony_ci 10267db96d56Sopenharmony_ci def test_spec_function_reset_mock(self): 10277db96d56Sopenharmony_ci def f(a): pass 10287db96d56Sopenharmony_ci rv = Mock() 10297db96d56Sopenharmony_ci mock = create_autospec(f, return_value=rv) 10307db96d56Sopenharmony_ci mock(1)(2) 10317db96d56Sopenharmony_ci self.assertEqual(mock.mock_calls, [call(1)]) 10327db96d56Sopenharmony_ci self.assertEqual(rv.mock_calls, [call(2)]) 10337db96d56Sopenharmony_ci mock.reset_mock() 10347db96d56Sopenharmony_ci self.assertEqual(mock.mock_calls, []) 10357db96d56Sopenharmony_ci self.assertEqual(rv.mock_calls, []) 10367db96d56Sopenharmony_ci 10377db96d56Sopenharmony_ci 10387db96d56Sopenharmony_ciclass TestCallList(unittest.TestCase): 10397db96d56Sopenharmony_ci 10407db96d56Sopenharmony_ci def test_args_list_contains_call_list(self): 10417db96d56Sopenharmony_ci mock = Mock() 10427db96d56Sopenharmony_ci self.assertIsInstance(mock.call_args_list, _CallList) 10437db96d56Sopenharmony_ci 10447db96d56Sopenharmony_ci mock(1, 2) 10457db96d56Sopenharmony_ci mock(a=3) 10467db96d56Sopenharmony_ci mock(3, 4) 10477db96d56Sopenharmony_ci mock(b=6) 10487db96d56Sopenharmony_ci 10497db96d56Sopenharmony_ci for kall in call(1, 2), call(a=3), call(3, 4), call(b=6): 10507db96d56Sopenharmony_ci self.assertIn(kall, mock.call_args_list) 10517db96d56Sopenharmony_ci 10527db96d56Sopenharmony_ci calls = [call(a=3), call(3, 4)] 10537db96d56Sopenharmony_ci self.assertIn(calls, mock.call_args_list) 10547db96d56Sopenharmony_ci calls = [call(1, 2), call(a=3)] 10557db96d56Sopenharmony_ci self.assertIn(calls, mock.call_args_list) 10567db96d56Sopenharmony_ci calls = [call(3, 4), call(b=6)] 10577db96d56Sopenharmony_ci self.assertIn(calls, mock.call_args_list) 10587db96d56Sopenharmony_ci calls = [call(3, 4)] 10597db96d56Sopenharmony_ci self.assertIn(calls, mock.call_args_list) 10607db96d56Sopenharmony_ci 10617db96d56Sopenharmony_ci self.assertNotIn(call('fish'), mock.call_args_list) 10627db96d56Sopenharmony_ci self.assertNotIn([call('fish')], mock.call_args_list) 10637db96d56Sopenharmony_ci 10647db96d56Sopenharmony_ci 10657db96d56Sopenharmony_ci def test_call_list_str(self): 10667db96d56Sopenharmony_ci mock = Mock() 10677db96d56Sopenharmony_ci mock(1, 2) 10687db96d56Sopenharmony_ci mock.foo(a=3) 10697db96d56Sopenharmony_ci mock.foo.bar().baz('fish', cat='dog') 10707db96d56Sopenharmony_ci 10717db96d56Sopenharmony_ci expected = ( 10727db96d56Sopenharmony_ci "[call(1, 2),\n" 10737db96d56Sopenharmony_ci " call.foo(a=3),\n" 10747db96d56Sopenharmony_ci " call.foo.bar(),\n" 10757db96d56Sopenharmony_ci " call.foo.bar().baz('fish', cat='dog')]" 10767db96d56Sopenharmony_ci ) 10777db96d56Sopenharmony_ci self.assertEqual(str(mock.mock_calls), expected) 10787db96d56Sopenharmony_ci 10797db96d56Sopenharmony_ci 10807db96d56Sopenharmony_ci def test_propertymock(self): 10817db96d56Sopenharmony_ci p = patch('%s.SomeClass.one' % __name__, new_callable=PropertyMock) 10827db96d56Sopenharmony_ci mock = p.start() 10837db96d56Sopenharmony_ci try: 10847db96d56Sopenharmony_ci SomeClass.one 10857db96d56Sopenharmony_ci mock.assert_called_once_with() 10867db96d56Sopenharmony_ci 10877db96d56Sopenharmony_ci s = SomeClass() 10887db96d56Sopenharmony_ci s.one 10897db96d56Sopenharmony_ci mock.assert_called_with() 10907db96d56Sopenharmony_ci self.assertEqual(mock.mock_calls, [call(), call()]) 10917db96d56Sopenharmony_ci 10927db96d56Sopenharmony_ci s.one = 3 10937db96d56Sopenharmony_ci self.assertEqual(mock.mock_calls, [call(), call(), call(3)]) 10947db96d56Sopenharmony_ci finally: 10957db96d56Sopenharmony_ci p.stop() 10967db96d56Sopenharmony_ci 10977db96d56Sopenharmony_ci 10987db96d56Sopenharmony_ci def test_propertymock_bare(self): 10997db96d56Sopenharmony_ci m = MagicMock() 11007db96d56Sopenharmony_ci p = PropertyMock() 11017db96d56Sopenharmony_ci type(m).foo = p 11027db96d56Sopenharmony_ci 11037db96d56Sopenharmony_ci returned = m.foo 11047db96d56Sopenharmony_ci p.assert_called_once_with() 11057db96d56Sopenharmony_ci self.assertIsInstance(returned, MagicMock) 11067db96d56Sopenharmony_ci self.assertNotIsInstance(returned, PropertyMock) 11077db96d56Sopenharmony_ci 11087db96d56Sopenharmony_ci 11097db96d56Sopenharmony_ci def test_propertymock_returnvalue(self): 11107db96d56Sopenharmony_ci m = MagicMock() 11117db96d56Sopenharmony_ci p = PropertyMock(return_value=42) 11127db96d56Sopenharmony_ci type(m).foo = p 11137db96d56Sopenharmony_ci 11147db96d56Sopenharmony_ci returned = m.foo 11157db96d56Sopenharmony_ci p.assert_called_once_with() 11167db96d56Sopenharmony_ci self.assertEqual(returned, 42) 11177db96d56Sopenharmony_ci self.assertNotIsInstance(returned, PropertyMock) 11187db96d56Sopenharmony_ci 11197db96d56Sopenharmony_ci 11207db96d56Sopenharmony_ci def test_propertymock_side_effect(self): 11217db96d56Sopenharmony_ci m = MagicMock() 11227db96d56Sopenharmony_ci p = PropertyMock(side_effect=ValueError) 11237db96d56Sopenharmony_ci type(m).foo = p 11247db96d56Sopenharmony_ci 11257db96d56Sopenharmony_ci with self.assertRaises(ValueError): 11267db96d56Sopenharmony_ci m.foo 11277db96d56Sopenharmony_ci p.assert_called_once_with() 11287db96d56Sopenharmony_ci 11297db96d56Sopenharmony_ci 11307db96d56Sopenharmony_ciclass TestCallablePredicate(unittest.TestCase): 11317db96d56Sopenharmony_ci 11327db96d56Sopenharmony_ci def test_type(self): 11337db96d56Sopenharmony_ci for obj in [str, bytes, int, list, tuple, SomeClass]: 11347db96d56Sopenharmony_ci self.assertTrue(_callable(obj)) 11357db96d56Sopenharmony_ci 11367db96d56Sopenharmony_ci def test_call_magic_method(self): 11377db96d56Sopenharmony_ci class Callable: 11387db96d56Sopenharmony_ci def __call__(self): pass 11397db96d56Sopenharmony_ci instance = Callable() 11407db96d56Sopenharmony_ci self.assertTrue(_callable(instance)) 11417db96d56Sopenharmony_ci 11427db96d56Sopenharmony_ci def test_staticmethod(self): 11437db96d56Sopenharmony_ci class WithStaticMethod: 11447db96d56Sopenharmony_ci @staticmethod 11457db96d56Sopenharmony_ci def staticfunc(): pass 11467db96d56Sopenharmony_ci self.assertTrue(_callable(WithStaticMethod.staticfunc)) 11477db96d56Sopenharmony_ci 11487db96d56Sopenharmony_ci def test_non_callable_staticmethod(self): 11497db96d56Sopenharmony_ci class BadStaticMethod: 11507db96d56Sopenharmony_ci not_callable = staticmethod(None) 11517db96d56Sopenharmony_ci self.assertFalse(_callable(BadStaticMethod.not_callable)) 11527db96d56Sopenharmony_ci 11537db96d56Sopenharmony_ci def test_classmethod(self): 11547db96d56Sopenharmony_ci class WithClassMethod: 11557db96d56Sopenharmony_ci @classmethod 11567db96d56Sopenharmony_ci def classfunc(cls): pass 11577db96d56Sopenharmony_ci self.assertTrue(_callable(WithClassMethod.classfunc)) 11587db96d56Sopenharmony_ci 11597db96d56Sopenharmony_ci def test_non_callable_classmethod(self): 11607db96d56Sopenharmony_ci class BadClassMethod: 11617db96d56Sopenharmony_ci not_callable = classmethod(None) 11627db96d56Sopenharmony_ci self.assertFalse(_callable(BadClassMethod.not_callable)) 11637db96d56Sopenharmony_ci 11647db96d56Sopenharmony_ci 11657db96d56Sopenharmony_ciif __name__ == '__main__': 11667db96d56Sopenharmony_ci unittest.main() 1167