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