Best Python code snippet using playwright-python
testhelpers.py
Source:testhelpers.py  
...44            mock(d, foo=d, bar=d)45            mock.method(d, zinga=d, alpha=d)46            mock().method(a1=d, z99=d)47            expected = [48                call(ANY, foo=ANY, bar=ANY),49                call.method(ANY, zinga=ANY, alpha=ANY),50                call(), call().method(a1=ANY, z99=ANY)51            ]52            self.assertEqual(expected, mock.mock_calls)53            self.assertEqual(mock.mock_calls, expected)54class CallTest(unittest.TestCase):55    def test_call_with_call(self):56        kall = _Call()57        self.assertEqual(kall, _Call())58        self.assertEqual(kall, _Call(('',)))59        self.assertEqual(kall, _Call(((),)))60        self.assertEqual(kall, _Call(({},)))61        self.assertEqual(kall, _Call(('', ())))62        self.assertEqual(kall, _Call(('', {})))63        self.assertEqual(kall, _Call(('', (), {})))64        self.assertEqual(kall, _Call(('foo',)))65        self.assertEqual(kall, _Call(('bar', ())))66        self.assertEqual(kall, _Call(('baz', {})))67        self.assertEqual(kall, _Call(('spam', (), {})))68        kall = _Call(((1, 2, 3),))69        self.assertEqual(kall, _Call(((1, 2, 3),)))70        self.assertEqual(kall, _Call(('', (1, 2, 3))))71        self.assertEqual(kall, _Call(((1, 2, 3), {})))72        self.assertEqual(kall, _Call(('', (1, 2, 3), {})))73        kall = _Call(((1, 2, 4),))74        self.assertNotEqual(kall, _Call(('', (1, 2, 3))))75        self.assertNotEqual(kall, _Call(('', (1, 2, 3), {})))76        kall = _Call(('foo', (1, 2, 4),))77        self.assertNotEqual(kall, _Call(('', (1, 2, 4))))78        self.assertNotEqual(kall, _Call(('', (1, 2, 4), {})))79        self.assertNotEqual(kall, _Call(('bar', (1, 2, 4))))80        self.assertNotEqual(kall, _Call(('bar', (1, 2, 4), {})))81        kall = _Call(({'a': 3},))82        self.assertEqual(kall, _Call(('', (), {'a': 3})))83        self.assertEqual(kall, _Call(('', {'a': 3})))84        self.assertEqual(kall, _Call(((), {'a': 3})))85        self.assertEqual(kall, _Call(({'a': 3},)))86    def test_empty__Call(self):87        args = _Call()88        self.assertEqual(args, ())89        self.assertEqual(args, ('foo',))90        self.assertEqual(args, ((),))91        self.assertEqual(args, ('foo', ()))92        self.assertEqual(args, ('foo',(), {}))93        self.assertEqual(args, ('foo', {}))94        self.assertEqual(args, ({},))95    def test_named_empty_call(self):96        args = _Call(('foo', (), {}))97        self.assertEqual(args, ('foo',))98        self.assertEqual(args, ('foo', ()))99        self.assertEqual(args, ('foo',(), {}))100        self.assertEqual(args, ('foo', {}))101        self.assertNotEqual(args, ((),))102        self.assertNotEqual(args, ())103        self.assertNotEqual(args, ({},))104        self.assertNotEqual(args, ('bar',))105        self.assertNotEqual(args, ('bar', ()))106        self.assertNotEqual(args, ('bar', {}))107    def test_call_with_args(self):108        args = _Call(((1, 2, 3), {}))109        self.assertEqual(args, ((1, 2, 3),))110        self.assertEqual(args, ('foo', (1, 2, 3)))111        self.assertEqual(args, ('foo', (1, 2, 3), {}))112        self.assertEqual(args, ((1, 2, 3), {}))113    def test_named_call_with_args(self):114        args = _Call(('foo', (1, 2, 3), {}))115        self.assertEqual(args, ('foo', (1, 2, 3)))116        self.assertEqual(args, ('foo', (1, 2, 3), {}))117        self.assertNotEqual(args, ((1, 2, 3),))118        self.assertNotEqual(args, ((1, 2, 3), {}))119    def test_call_with_kwargs(self):120        args = _Call(((), dict(a=3, b=4)))121        self.assertEqual(args, (dict(a=3, b=4),))122        self.assertEqual(args, ('foo', dict(a=3, b=4)))123        self.assertEqual(args, ('foo', (), dict(a=3, b=4)))124        self.assertEqual(args, ((), dict(a=3, b=4)))125    def test_named_call_with_kwargs(self):126        args = _Call(('foo', (), dict(a=3, b=4)))127        self.assertEqual(args, ('foo', dict(a=3, b=4)))128        self.assertEqual(args, ('foo', (), dict(a=3, b=4)))129        self.assertNotEqual(args, (dict(a=3, b=4),))130        self.assertNotEqual(args, ((), dict(a=3, b=4)))131    def test_call_with_args_call_empty_name(self):132        args = _Call(((1, 2, 3), {}))133        self.assertEqual(args, call(1, 2, 3))134        self.assertEqual(call(1, 2, 3), args)135        self.assertIn(call(1, 2, 3), [args])136    def test_call_ne(self):137        self.assertNotEqual(_Call(((1, 2, 3),)), call(1, 2))138        self.assertFalse(_Call(((1, 2, 3),)) != call(1, 2, 3))139        self.assertTrue(_Call(((1, 2), {})) != call(1, 2, 3))140    def test_call_non_tuples(self):141        kall = _Call(((1, 2, 3),))142        for value in 1, None, self, int:143            self.assertNotEqual(kall, value)144            self.assertFalse(kall == value)145    def test_repr(self):146        self.assertEqual(repr(_Call()), 'call()')147        self.assertEqual(repr(_Call(('foo',))), 'call.foo()')148        self.assertEqual(repr(_Call(((1, 2, 3), {'a': 'b'}))),149                         "call(1, 2, 3, a='b')")150        self.assertEqual(repr(_Call(('bar', (1, 2, 3), {'a': 'b'}))),151                         "call.bar(1, 2, 3, a='b')")152        self.assertEqual(repr(call), 'call')153        self.assertEqual(str(call), 'call')154        self.assertEqual(repr(call()), 'call()')155        self.assertEqual(repr(call(1)), 'call(1)')156        self.assertEqual(repr(call(zz='thing')), "call(zz='thing')")157        self.assertEqual(repr(call().foo), 'call().foo')158        self.assertEqual(repr(call(1).foo.bar(a=3).bing),159                         'call().foo.bar().bing')160        self.assertEqual(161            repr(call().foo(1, 2, a=3)),162            "call().foo(1, 2, a=3)"163        )164        self.assertEqual(repr(call()()), "call()()")165        self.assertEqual(repr(call(1)(2)), "call()(2)")166        self.assertEqual(167            repr(call()().bar().baz.beep(1)),168            "call()().bar().baz.beep(1)"169        )170    def test_call(self):171        self.assertEqual(call(), ('', (), {}))172        self.assertEqual(call('foo', 'bar', one=3, two=4),173                         ('', ('foo', 'bar'), {'one': 3, 'two': 4}))174        mock = Mock()175        mock(1, 2, 3)176        mock(a=3, b=6)177        self.assertEqual(mock.call_args_list,178                         [call(1, 2, 3), call(a=3, b=6)])179    def test_attribute_call(self):180        self.assertEqual(call.foo(1), ('foo', (1,), {}))181        self.assertEqual(call.bar.baz(fish='eggs'),182                         ('bar.baz', (), {'fish': 'eggs'}))183        mock = Mock()184        mock.foo(1, 2 ,3)185        mock.bar.baz(a=3, b=6)186        self.assertEqual(mock.method_calls,187                         [call.foo(1, 2, 3), call.bar.baz(a=3, b=6)])188    def test_extended_call(self):189        result = call(1).foo(2).bar(3, a=4)190        self.assertEqual(result, ('().foo().bar', (3,), dict(a=4)))191        mock = MagicMock()192        mock(1, 2, a=3, b=4)193        self.assertEqual(mock.call_args, call(1, 2, a=3, b=4))194        self.assertNotEqual(mock.call_args, call(1, 2, 3))195        self.assertEqual(mock.call_args_list, [call(1, 2, a=3, b=4)])196        self.assertEqual(mock.mock_calls, [call(1, 2, a=3, b=4)])197        mock = MagicMock()198        mock.foo(1).bar()().baz.beep(a=6)199        last_call = call.foo(1).bar()().baz.beep(a=6)200        self.assertEqual(mock.mock_calls[-1], last_call)201        self.assertEqual(mock.mock_calls, last_call.call_list())202    def test_extended_not_equal(self):203        a = call(x=1).foo204        b = call(x=2).foo205        self.assertEqual(a, a)206        self.assertEqual(b, b)207        self.assertNotEqual(a, b)208    def test_nested_calls_not_equal(self):209        a = call(x=1).foo().bar210        b = call(x=2).foo().bar211        self.assertEqual(a, a)212        self.assertEqual(b, b)213        self.assertNotEqual(a, b)214    def test_call_list(self):215        mock = MagicMock()216        mock(1)217        self.assertEqual(call(1).call_list(), mock.mock_calls)218        mock = MagicMock()219        mock(1).method(2)220        self.assertEqual(call(1).method(2).call_list(),221                         mock.mock_calls)222        mock = MagicMock()223        mock(1).method(2)(3)224        self.assertEqual(call(1).method(2)(3).call_list(),225                         mock.mock_calls)226        mock = MagicMock()227        int(mock(1).method(2)(3).foo.bar.baz(4)(5))228        kall = call(1).method(2)(3).foo.bar.baz(4)(5).__int__()229        self.assertEqual(kall.call_list(), mock.mock_calls)230    def test_call_any(self):231        self.assertEqual(call, ANY)232        m = MagicMock()233        int(m)234        self.assertEqual(m.mock_calls, [ANY])235        self.assertEqual([ANY], m.mock_calls)236    def test_two_args_call(self):237        args = _Call(((1, 2), {'a': 3}), two=True)238        self.assertEqual(len(args), 2)239        self.assertEqual(args[0], (1, 2))240        self.assertEqual(args[1], {'a': 3})241        other_args = _Call(((1, 2), {'a': 3}))242        self.assertEqual(args, other_args)243    def test_call_with_name(self):244        self.assertEqual(_Call((), 'foo')[0], 'foo')245        self.assertEqual(_Call((('bar', 'barz'),),)[0], '')246        self.assertEqual(_Call((('bar', 'barz'), {'hello': 'world'}),)[0], '')247class SpecSignatureTest(unittest.TestCase):248    def _check_someclass_mock(self, mock):249        self.assertRaises(AttributeError, getattr, mock, 'foo')250        mock.one(1, 2)251        mock.one.assert_called_with(1, 2)252        self.assertRaises(AssertionError,253                          mock.one.assert_called_with, 3, 4)254        self.assertRaises(TypeError, mock.one, 1)255        mock.two()256        mock.two.assert_called_with()257        self.assertRaises(AssertionError,258                          mock.two.assert_called_with, 3)259        self.assertRaises(TypeError, mock.two, 1)260        mock.three()261        mock.three.assert_called_with()262        self.assertRaises(AssertionError,263                          mock.three.assert_called_with, 3)264        self.assertRaises(TypeError, mock.three, 3, 2)265        mock.three(1)266        mock.three.assert_called_with(1)267        mock.three(a=1)268        mock.three.assert_called_with(a=1)269    def test_basic(self):270        mock = create_autospec(SomeClass)271        self._check_someclass_mock(mock)272        mock = create_autospec(SomeClass())273        self._check_someclass_mock(mock)274    def test_create_autospec_return_value(self):275        def f():276            pass277        mock = create_autospec(f, return_value='foo')278        self.assertEqual(mock(), 'foo')279        class Foo(object):280            pass281        mock = create_autospec(Foo, return_value='foo')282        self.assertEqual(mock(), 'foo')283    def test_autospec_reset_mock(self):284        m = create_autospec(int)285        int(m)286        m.reset_mock()287        self.assertEqual(m.__int__.call_count, 0)288    def test_mocking_unbound_methods(self):289        class Foo(object):290            def foo(self, foo):291                pass292        p = patch.object(Foo, 'foo')293        mock_foo = p.start()294        Foo().foo(1)295        mock_foo.assert_called_with(1)296    def test_create_autospec_unbound_methods(self):297        # see mock issue 128298        # this is expected to fail until the issue is fixed299        return300        class Foo(object):301            def foo(self):302                pass303        klass = create_autospec(Foo)304        instance = klass()305        self.assertRaises(TypeError, instance.foo, 1)306        # Note: no type checking on the "self" parameter307        klass.foo(1)308        klass.foo.assert_called_with(1)309        self.assertRaises(TypeError, klass.foo)310    def test_create_autospec_keyword_arguments(self):311        class Foo(object):312            a = 3313        m = create_autospec(Foo, a='3')314        self.assertEqual(m.a, '3')315    def test_create_autospec_keyword_only_arguments(self):316        def foo(a, *, b=None):317            pass318        m = create_autospec(foo)319        m(1)320        m.assert_called_with(1)321        self.assertRaises(TypeError, m, 1, 2)322        m(2, b=3)323        m.assert_called_with(2, b=3)324    def test_function_as_instance_attribute(self):325        obj = SomeClass()326        def f(a):327            pass328        obj.f = f329        mock = create_autospec(obj)330        mock.f('bing')331        mock.f.assert_called_with('bing')332    def test_spec_as_list(self):333        # because spec as a list of strings in the mock constructor means334        # something very different we treat a list instance as the type.335        mock = create_autospec([])336        mock.append('foo')337        mock.append.assert_called_with('foo')338        self.assertRaises(AttributeError, getattr, mock, 'foo')339        class Foo(object):340            foo = []341        mock = create_autospec(Foo)342        mock.foo.append(3)343        mock.foo.append.assert_called_with(3)344        self.assertRaises(AttributeError, getattr, mock.foo, 'foo')345    def test_attributes(self):346        class Sub(SomeClass):347            attr = SomeClass()348        sub_mock = create_autospec(Sub)349        for mock in (sub_mock, sub_mock.attr):350            self._check_someclass_mock(mock)351    def test_builtin_functions_types(self):352        # we could replace builtin functions / methods with a function353        # with *args / **kwargs signature. Using the builtin method type354        # as a spec seems to work fairly well though.355        class BuiltinSubclass(list):356            def bar(self, arg):357                pass358            sorted = sorted359            attr = {}360        mock = create_autospec(BuiltinSubclass)361        mock.append(3)362        mock.append.assert_called_with(3)363        self.assertRaises(AttributeError, getattr, mock.append, 'foo')364        mock.bar('foo')365        mock.bar.assert_called_with('foo')366        self.assertRaises(TypeError, mock.bar, 'foo', 'bar')367        self.assertRaises(AttributeError, getattr, mock.bar, 'foo')368        mock.sorted([1, 2])369        mock.sorted.assert_called_with([1, 2])370        self.assertRaises(AttributeError, getattr, mock.sorted, 'foo')371        mock.attr.pop(3)372        mock.attr.pop.assert_called_with(3)373        self.assertRaises(AttributeError, getattr, mock.attr, 'foo')374    def test_method_calls(self):375        class Sub(SomeClass):376            attr = SomeClass()377        mock = create_autospec(Sub)378        mock.one(1, 2)379        mock.two()380        mock.three(3)381        expected = [call.one(1, 2), call.two(), call.three(3)]382        self.assertEqual(mock.method_calls, expected)383        mock.attr.one(1, 2)384        mock.attr.two()385        mock.attr.three(3)386        expected.extend(387            [call.attr.one(1, 2), call.attr.two(), call.attr.three(3)]388        )389        self.assertEqual(mock.method_calls, expected)390    def test_magic_methods(self):391        class BuiltinSubclass(list):392            attr = {}393        mock = create_autospec(BuiltinSubclass)394        self.assertEqual(list(mock), [])395        self.assertRaises(TypeError, int, mock)396        self.assertRaises(TypeError, int, mock.attr)397        self.assertEqual(list(mock), [])398        self.assertIsInstance(mock['foo'], MagicMock)399        self.assertIsInstance(mock.attr['foo'], MagicMock)400    def test_spec_set(self):401        class Sub(SomeClass):402            attr = SomeClass()403        for spec in (Sub, Sub()):404            mock = create_autospec(spec, spec_set=True)405            self._check_someclass_mock(mock)406            self.assertRaises(AttributeError, setattr, mock, 'foo', 'bar')407            self.assertRaises(AttributeError, setattr, mock.attr, 'foo', 'bar')408    def test_descriptors(self):409        class Foo(object):410            @classmethod411            def f(cls, a, b):412                pass413            @staticmethod414            def g(a, b):415                pass416        class Bar(Foo):417            pass418        class Baz(SomeClass, Bar):419            pass420        for spec in (Foo, Foo(), Bar, Bar(), Baz, Baz()):421            mock = create_autospec(spec)422            mock.f(1, 2)423            mock.f.assert_called_once_with(1, 2)424            mock.g(3, 4)425            mock.g.assert_called_once_with(3, 4)426    def test_recursive(self):427        class A(object):428            def a(self):429                pass430            foo = 'foo bar baz'431            bar = foo432        A.B = A433        mock = create_autospec(A)434        mock()435        self.assertFalse(mock.B.called)436        mock.a()437        mock.B.a()438        self.assertEqual(mock.method_calls, [call.a(), call.B.a()])439        self.assertIs(A.foo, A.bar)440        self.assertIsNot(mock.foo, mock.bar)441        mock.foo.lower()442        self.assertRaises(AssertionError, mock.bar.lower.assert_called_with)443    def test_spec_inheritance_for_classes(self):444        class Foo(object):445            def a(self, x):446                pass447            class Bar(object):448                def f(self, y):449                    pass450        class_mock = create_autospec(Foo)451        self.assertIsNot(class_mock, class_mock())452        for this_mock in class_mock, class_mock():453            this_mock.a(x=5)454            this_mock.a.assert_called_with(x=5)455            this_mock.a.assert_called_with(5)456            self.assertRaises(TypeError, this_mock.a, 'foo', 'bar')457            self.assertRaises(AttributeError, getattr, this_mock, 'b')458        instance_mock = create_autospec(Foo())459        instance_mock.a(5)460        instance_mock.a.assert_called_with(5)461        instance_mock.a.assert_called_with(x=5)462        self.assertRaises(TypeError, instance_mock.a, 'foo', 'bar')463        self.assertRaises(AttributeError, getattr, instance_mock, 'b')464        # The return value isn't isn't callable465        self.assertRaises(TypeError, instance_mock)466        instance_mock.Bar.f(6)467        instance_mock.Bar.f.assert_called_with(6)468        instance_mock.Bar.f.assert_called_with(y=6)469        self.assertRaises(AttributeError, getattr, instance_mock.Bar, 'g')470        instance_mock.Bar().f(6)471        instance_mock.Bar().f.assert_called_with(6)472        instance_mock.Bar().f.assert_called_with(y=6)473        self.assertRaises(AttributeError, getattr, instance_mock.Bar(), 'g')474    def test_inherit(self):475        class Foo(object):476            a = 3477        Foo.Foo = Foo478        # class479        mock = create_autospec(Foo)480        instance = mock()481        self.assertRaises(AttributeError, getattr, instance, 'b')482        attr_instance = mock.Foo()483        self.assertRaises(AttributeError, getattr, attr_instance, 'b')484        # instance485        mock = create_autospec(Foo())486        self.assertRaises(AttributeError, getattr, mock, 'b')487        self.assertRaises(TypeError, mock)488        # attribute instance489        call_result = mock.Foo()490        self.assertRaises(AttributeError, getattr, call_result, 'b')491    def test_builtins(self):492        # used to fail with infinite recursion493        create_autospec(1)494        create_autospec(int)495        create_autospec('foo')496        create_autospec(str)497        create_autospec({})498        create_autospec(dict)499        create_autospec([])500        create_autospec(list)501        create_autospec(set())502        create_autospec(set)503        create_autospec(1.0)504        create_autospec(float)505        create_autospec(1j)506        create_autospec(complex)507        create_autospec(False)508        create_autospec(True)509    def test_function(self):510        def f(a, b):511            pass512        mock = create_autospec(f)513        self.assertRaises(TypeError, mock)514        mock(1, 2)515        mock.assert_called_with(1, 2)516        mock.assert_called_with(1, b=2)517        mock.assert_called_with(a=1, b=2)518        f.f = f519        mock = create_autospec(f)520        self.assertRaises(TypeError, mock.f)521        mock.f(3, 4)522        mock.f.assert_called_with(3, 4)523        mock.f.assert_called_with(a=3, b=4)524    def test_skip_attributeerrors(self):525        class Raiser(object):526            def __get__(self, obj, type=None):527                if obj is None:528                    raise AttributeError('Can only be accessed via an instance')529        class RaiserClass(object):530            raiser = Raiser()531            @staticmethod532            def existing(a, b):533                return a + b534        s = create_autospec(RaiserClass)535        self.assertRaises(TypeError, lambda x: s.existing(1, 2, 3))536        s.existing(1, 2)537        self.assertRaises(AttributeError, lambda: s.nonexisting)538        # check we can fetch the raiser attribute and it has no spec539        obj = s.raiser540        obj.foo, obj.bar541    def test_signature_class(self):542        class Foo(object):543            def __init__(self, a, b=3):544                pass545        mock = create_autospec(Foo)546        self.assertRaises(TypeError, mock)547        mock(1)548        mock.assert_called_once_with(1)549        mock.assert_called_once_with(a=1)550        self.assertRaises(AssertionError, mock.assert_called_once_with, 2)551        mock(4, 5)552        mock.assert_called_with(4, 5)553        mock.assert_called_with(a=4, b=5)554        self.assertRaises(AssertionError, mock.assert_called_with, a=5, b=4)555    def test_class_with_no_init(self):556        # this used to raise an exception557        # due to trying to get a signature from object.__init__558        class Foo(object):559            pass560        create_autospec(Foo)561    def test_signature_callable(self):562        class Callable(object):563            def __init__(self, x, y):564                pass565            def __call__(self, a):566                pass567        mock = create_autospec(Callable)568        mock(1, 2)569        mock.assert_called_once_with(1, 2)570        mock.assert_called_once_with(x=1, y=2)571        self.assertRaises(TypeError, mock, 'a')572        instance = mock(1, 2)573        self.assertRaises(TypeError, instance)574        instance(a='a')575        instance.assert_called_once_with('a')576        instance.assert_called_once_with(a='a')577        instance('a')578        instance.assert_called_with('a')579        instance.assert_called_with(a='a')580        mock = create_autospec(Callable(1, 2))581        mock(a='a')582        mock.assert_called_once_with(a='a')583        self.assertRaises(TypeError, mock)584        mock('a')585        mock.assert_called_with('a')586    def test_signature_noncallable(self):587        class NonCallable(object):588            def __init__(self):589                pass590        mock = create_autospec(NonCallable)591        instance = mock()592        mock.assert_called_once_with()593        self.assertRaises(TypeError, mock, 'a')594        self.assertRaises(TypeError, instance)595        self.assertRaises(TypeError, instance, 'a')596        mock = create_autospec(NonCallable())597        self.assertRaises(TypeError, mock)598        self.assertRaises(TypeError, mock, 'a')599    def test_create_autospec_none(self):600        class Foo(object):601            bar = None602        mock = create_autospec(Foo)603        none = mock.bar604        self.assertNotIsInstance(none, type(None))605        none.foo()606        none.foo.assert_called_once_with()607    def test_autospec_functions_with_self_in_odd_place(self):608        class Foo(object):609            def f(a, self):610                pass611        a = create_autospec(Foo)612        a.f(10)613        a.f.assert_called_with(10)614        a.f.assert_called_with(self=10)615        a.f(self=10)616        a.f.assert_called_with(10)617        a.f.assert_called_with(self=10)618    def test_autospec_data_descriptor(self):619        class Descriptor(object):620            def __init__(self, value):621                self.value = value622            def __get__(self, obj, cls=None):623                if obj is None:624                    return self625                return self.value626            def __set__(self, obj, value):627                pass628        class MyProperty(property):629            pass630        class Foo(object):631            __slots__ = ['slot']632            @property633            def prop(self):634                return 3635            @MyProperty636            def subprop(self):637                return 4638            desc = Descriptor(42)639        foo = create_autospec(Foo)640        def check_data_descriptor(mock_attr):641            # Data descriptors don't have a spec.642            self.assertIsInstance(mock_attr, MagicMock)643            mock_attr(1, 2, 3)644            mock_attr.abc(4, 5, 6)645            mock_attr.assert_called_once_with(1, 2, 3)646            mock_attr.abc.assert_called_once_with(4, 5, 6)647        # property648        check_data_descriptor(foo.prop)649        # property subclass650        check_data_descriptor(foo.subprop)651        # class __slot__652        check_data_descriptor(foo.slot)653        # plain data descriptor654        check_data_descriptor(foo.desc)655    def test_autospec_on_bound_builtin_function(self):656        meth = types.MethodType(time.ctime, time.time())657        self.assertIsInstance(meth(), str)658        mocked = create_autospec(meth)659        # no signature, so no spec to check against660        mocked()661        mocked.assert_called_once_with()662        mocked.reset_mock()663        mocked(4, 5, 6)664        mocked.assert_called_once_with(4, 5, 6)665    def test_autospec_getattr_partial_function(self):666        # bpo-32153 : getattr returning partial functions without667        # __name__ should not create AttributeError in create_autospec668        class Foo:669            def __getattr__(self, attribute):670                return partial(lambda name: name, attribute)671        proxy = Foo()672        autospec = create_autospec(proxy)673        self.assertFalse(hasattr(autospec, '__name__'))674    def test_spec_inspect_signature(self):675        def myfunc(x, y):676            pass677        mock = create_autospec(myfunc)678        mock(1, 2)679        mock(x=1, y=2)680        self.assertEqual(inspect.getfullargspec(mock), inspect.getfullargspec(myfunc))681        self.assertEqual(mock.mock_calls, [call(1, 2), call(x=1, y=2)])682        self.assertRaises(TypeError, mock, 1)683    def test_spec_inspect_signature_annotations(self):684        def foo(a: int, b: int=10, *, c:int) -> int:685            return a + b + c686        mock = create_autospec(foo)687        mock(1, 2, c=3)688        mock(1, c=3)689        self.assertEqual(inspect.getfullargspec(mock), inspect.getfullargspec(foo))690        self.assertEqual(mock.mock_calls, [call(1, 2, c=3), call(1, c=3)])691        self.assertRaises(TypeError, mock, 1)692        self.assertRaises(TypeError, mock, 1, 2, 3, c=4)693class TestCallList(unittest.TestCase):694    def test_args_list_contains_call_list(self):695        mock = Mock()696        self.assertIsInstance(mock.call_args_list, _CallList)697        mock(1, 2)698        mock(a=3)699        mock(3, 4)700        mock(b=6)701        for kall in call(1, 2), call(a=3), call(3, 4), call(b=6):702            self.assertIn(kall, mock.call_args_list)703        calls = [call(a=3), call(3, 4)]704        self.assertIn(calls, mock.call_args_list)705        calls = [call(1, 2), call(a=3)]706        self.assertIn(calls, mock.call_args_list)707        calls = [call(3, 4), call(b=6)]708        self.assertIn(calls, mock.call_args_list)709        calls = [call(3, 4)]710        self.assertIn(calls, mock.call_args_list)711        self.assertNotIn(call('fish'), mock.call_args_list)712        self.assertNotIn([call('fish')], mock.call_args_list)713    def test_call_list_str(self):714        mock = Mock()715        mock(1, 2)716        mock.foo(a=3)717        mock.foo.bar().baz('fish', cat='dog')718        expected = (719            "[call(1, 2),\n"720            " call.foo(a=3),\n"721            " call.foo.bar(),\n"722            " call.foo.bar().baz('fish', cat='dog')]"723        )724        self.assertEqual(str(mock.mock_calls), expected)725    def test_propertymock(self):726        p = patch('%s.SomeClass.one' % __name__, new_callable=PropertyMock)727        mock = p.start()728        try:729            SomeClass.one730            mock.assert_called_once_with()731            s = SomeClass()732            s.one733            mock.assert_called_with()734            self.assertEqual(mock.mock_calls, [call(), call()])735            s.one = 3736            self.assertEqual(mock.mock_calls, [call(), call(), call(3)])737        finally:738            p.stop()739    def test_propertymock_returnvalue(self):740        m = MagicMock()741        p = PropertyMock()742        type(m).foo = p743        returned = m.foo744        p.assert_called_once_with()745        self.assertIsInstance(returned, MagicMock)746        self.assertNotIsInstance(returned, PropertyMock)747class TestCallablePredicate(unittest.TestCase):748    def test_type(self):749        for obj in [str, bytes, int, list, tuple, SomeClass]:750            self.assertTrue(_callable(obj))...pjsua_app.py
Source:pjsua_app.py  
...60	if ci.state == py_pjsua.PJSIP_INV_STATE_DISCONNECTED:61		g_current_call = py_pjsua.PJSUA_INVALID_ID62# Callback for incoming call63#64def on_incoming_call(acc_id, call_id, rdata):65	global g_current_call66	67	if g_current_call != py_pjsua.PJSUA_INVALID_ID:68		# There's call in progress - answer Busy69		py_pjsua.call_answer(call_id, 486, None, None)70		return71	72	g_current_call = call_id73	ci = py_pjsua.call_get_info(call_id)74	write_log(3, "*** Incoming call: " + call_name(call_id) + "***")75	write_log(3, "*** Press a to answer or h to hangup  ***")76	77	78	79# Callback when media state has changed (e.g. established or terminated)80#81def on_call_media_state(call_id):82	ci = py_pjsua.call_get_info(call_id)83	if ci.media_status == py_pjsua.PJSUA_CALL_MEDIA_ACTIVE:84		py_pjsua.conf_connect(ci.conf_slot, 0)85		py_pjsua.conf_connect(0, ci.conf_slot)86		write_log(3, call_name(call_id) + ": media is active")87	else:88		write_log(3, call_name(call_id) + ": media is inactive")89# Callback when account registration state has changed90#91def on_reg_state(acc_id):92	acc_info = py_pjsua.acc_get_info(acc_id)93	if acc_info.has_registration != 0:94		cmd = "registration"95	else:96		cmd = "unregistration"97	if acc_info.status != 0 and acc_info.status != 200:98		write_log(3, "Account " + cmd + " failed: rc=" + `acc_info.status` + " " + acc_info.status_text)99	else:100		write_log(3, "Account " + cmd + " success")101# Callback when buddy's presence state has changed102#103def on_buddy_state(buddy_id):104	write_log(3, "On Buddy state called")105	buddy_info = py_pjsua.buddy_get_info(buddy_id)106	if buddy_info.status != 0 and buddy_info.status != 200:107		write_log(3, "Status of " + `buddy_info.uri` + " is " + `buddy_info.status_text`)108	else:109		write_log(3, "Status : " + `buddy_info.status`)110# Callback on incoming pager (MESSAGE)111#		112def on_pager(call_id, strfrom, strto, contact, mime_type, text):113	write_log(3, "MESSAGE from " + `strfrom` + " : " + `text`)114# Callback on the delivery status of outgoing pager (MESSAGE)115#	116def on_pager_status(call_id, strto, body, user_data, status, reason):117	write_log(3, "MESSAGE to " + `strto` + " status " + `status` + " reason " + `reason`)118# Received typing indication119#120def on_typing(call_id, strfrom, to, contact, is_typing):121	str_t = ""122	if is_typing:123		str_t = "is typing.."124	else:125		str_t = "has stopped typing"126	write_log(3, "IM indication: " + strfrom + " " + str_t)127# Received the status of previous call transfer request128#129def on_call_transfer_status(call_id,status_code,status_text,final,p_cont):130	strfinal = ""131	if final == 1:132		strfinal = "[final]"133	134	write_log(3, "Call " + `call_id` + ": transfer status= " + `status_code` + " " + status_text+ " " + strfinal)135	      136	if status_code/100 == 2:137		write_log(3, "Call " + `call_id` + " : call transfered successfully, disconnecting call")138		status = py_pjsua.call_hangup(call_id, 410, None, None)139		p_cont = 0140# Callback on incoming call transfer request141#		142def on_call_transfer_request(call_id, dst, code):143	write_log(3, "Call transfer request from " + `call_id` + " to " + dst + " with code " + `code`)144#145# Initialize pjsua.146#147def app_init():148	global g_acc_id, g_ua_cfg149	# Create pjsua before anything else150	status = py_pjsua.create()151	if status != 0:152		err_exit("pjsua create() error", status)153	# Create and initialize logging config154	log_cfg = py_pjsua.logging_config_default()155	log_cfg.level = C_LOG_LEVEL156	log_cfg.cb = log_cb157	# Create and initialize pjsua config158	# Note: for this Python module, thread_cnt must be 0 since Python159	#       doesn't like to be called from alien thread (pjsua's thread160	#       in this case)	    161	ua_cfg = py_pjsua.config_default()162	ua_cfg.thread_cnt = 0163	ua_cfg.user_agent = "PJSUA/Python 0.1"164	ua_cfg.cb.on_incoming_call = on_incoming_call165	ua_cfg.cb.on_call_media_state = on_call_media_state166	ua_cfg.cb.on_reg_state = on_reg_state167	ua_cfg.cb.on_call_state = on_call_state168	ua_cfg.cb.on_buddy_state = on_buddy_state169	ua_cfg.cb.on_pager = on_pager170	ua_cfg.cb.on_pager_status = on_pager_status171	ua_cfg.cb.on_typing = on_typing172	ua_cfg.cb.on_call_transfer_status = on_call_transfer_status173	ua_cfg.cb.on_call_transfer_request = on_call_transfer_request174	# Configure STUN setting175	if C_STUN_HOST != "":176	    ua_cfg.stun_host = C_STUN_HOST;177	# Create and initialize media config178	med_cfg = py_pjsua.media_config_default()179	med_cfg.ec_tail_len = 0180	#181	# Initialize pjsua!!182	#183	status = py_pjsua.init(ua_cfg, log_cfg, med_cfg)184	if status != 0:185		err_exit("pjsua init() error", status)186	# Configure UDP transport config187	transport_cfg = py_pjsua.transport_config_default()188	transport_cfg.port = C_SIP_PORT189	# Create UDP transport190	status, transport_id = \191	    py_pjsua.transport_create(py_pjsua.PJSIP_TRANSPORT_UDP, transport_cfg)192	if status != 0:193		err_exit("Error creating UDP transport", status)194		195	# Create initial default account196	status, acc_id = py_pjsua.acc_add_local(transport_id, 1)197	if status != 0:198		err_exit("Error creating account", status)199	g_acc_id = acc_id200	g_ua_cfg = ua_cfg201# Add SIP account interractively202#203def add_account():204	global g_acc_id205	acc_domain = ""206	acc_username = ""207	acc_passwd =""208	confirm = ""209	210	# Input account configs211	print "Your SIP domain (e.g. myprovider.com): ",212	acc_domain = sys.stdin.readline()213	if acc_domain == "\n": 214		return215	acc_domain = acc_domain.replace("\n", "")216	print "Your username (e.g. alice): ",217	acc_username = sys.stdin.readline()218	if acc_username == "\n":219		return220	acc_username = acc_username.replace("\n", "")221	print "Your password (e.g. secret): ",222	acc_passwd = sys.stdin.readline()223	if acc_passwd == "\n":224		return225	acc_passwd = acc_passwd.replace("\n", "")226	# Configure account configuration227	acc_cfg = py_pjsua.acc_config_default()228	acc_cfg.id = "sip:" + acc_username + "@" + acc_domain229	acc_cfg.reg_uri = "sip:" + acc_domain230	cred_info = py_pjsua.Pjsip_Cred_Info()231	cred_info.realm = "*"232	cred_info.scheme = "digest"233	cred_info.username = acc_username234	cred_info.data_type = 0235	cred_info.data = acc_passwd236	acc_cfg.cred_info.append(1)237	acc_cfg.cred_info[0] = cred_info238	# Add new SIP account239	status, acc_id = py_pjsua.acc_add(acc_cfg, 1)240	if status != 0:241		py_pjsua.perror(THIS_FILE, "Error adding SIP account", status)242	else:243		g_acc_id = acc_id244		write_log(3, "Account " + acc_cfg.id + " added")245def add_player():246	global g_wav_files247	global g_wav_id248	global g_wav_port249	250	file_name = ""251	status = -1252	wav_id = 0253	254	print "Enter the path of the file player(e.g. /tmp/audio.wav): ",255	file_name = sys.stdin.readline()256	if file_name == "\n": 257		return258	file_name = file_name.replace("\n", "")259	status, wav_id = py_pjsua.player_create(file_name, 0)260	if status != 0:261		py_pjsua.perror(THIS_FILE, "Error adding file player ", status)262	else:263		g_wav_files.append(file_name)264		if g_wav_id == 0:265			g_wav_id = wav_id266			g_wav_port = py_pjsua.player_get_conf_port(wav_id)267		write_log(3, "File player " + file_name + " added")268		269def add_recorder():270	global g_rec_file271	global g_rec_id272	global g_rec_port273	274	file_name = ""275	status = -1276	rec_id = 0277	278	print "Enter the path of the file recorder(e.g. /tmp/audio.wav): ",279	file_name = sys.stdin.readline()280	if file_name == "\n": 281		return282	file_name = file_name.replace("\n", "")283	status, rec_id = py_pjsua.recorder_create(file_name, 0, None, 0, 0)284	if status != 0:285		py_pjsua.perror(THIS_FILE, "Error adding file recorder ", status)286	else:287		g_rec_file = file_name288		g_rec_id = rec_id289		g_rec_port = py_pjsua.recorder_get_conf_port(rec_id)290		write_log(3, "File recorder " + file_name + " added")291def conf_list():292	ports = None293	print "Conference ports : "294	ports = py_pjsua.enum_conf_ports()295	for port in ports:296		info = None297		info = py_pjsua.conf_get_port_info(port)298		txlist = ""299		for listener in info.listeners:300			txlist = txlist + "#" + `listener` + " "301		302		print "Port #" + `info.slot_id` + "[" + `(info.clock_rate/1000)` + "KHz/" + `(info.samples_per_frame * 1000 / info.clock_rate)` + "ms] " + info.name + " transmitting to: " + txlist303		304def connect_port():305	src_port = 0306	dst_port = 0307	308	print "Connect src port # (empty to cancel): "309	src_port = sys.stdin.readline()310	if src_port == "\n": 311		return312	src_port = src_port.replace("\n", "")313	src_port = int(src_port)314	print "To dst port # (empty to cancel): "315	dst_port = sys.stdin.readline()316	if dst_port == "\n": 317		return318	dst_port = dst_port.replace("\n", "")319	dst_port = int(dst_port)320	status = py_pjsua.conf_connect(src_port, dst_port)321	if status != 0:322		py_pjsua.perror(THIS_FILE, "Error connecting port ", status)323	else:		324		write_log(3, "Port connected from " + `src_port` + " to " + `dst_port`)325		326def disconnect_port():327	src_port = 0328	dst_port = 0329	330	print "Disconnect src port # (empty to cancel): "331	src_port = sys.stdin.readline()332	if src_port == "\n": 333		return334	src_port = src_port.replace("\n", "")335	src_port = int(src_port)336	print "From dst port # (empty to cancel): "337	dst_port = sys.stdin.readline()338	if dst_port == "\n": 339		return340	dst_port = dst_port.replace("\n", "")341	dst_port = int(dst_port)342	status = py_pjsua.conf_disconnect(src_port, dst_port)343	if status != 0:344		py_pjsua.perror(THIS_FILE, "Error disconnecting port ", status)345	else:		346		write_log(3, "Port disconnected " + `src_port` + " from " + `dst_port`)347def dump_call_quality():348	global g_current_call349	350	buf = ""351	if g_current_call != -1:352		buf = py_pjsua.call_dump(g_current_call, 1, 1024, "  ")353		write_log(3, "\n" + buf)354	else:355		write_log(3, "No current call")356def xfer_call():357	global g_current_call358	359	if g_current_call == -1:360		361		write_log(3, "No current call")362	else:363		call = g_current_call		364		ci = py_pjsua.call_get_info(g_current_call)365		print "Transfering current call ["+ `g_current_call` + "] " + ci.remote_info366		print "Enter sip url : "367		url = sys.stdin.readline()368		if url == "\n": 369			return370		url = url.replace("\n", "")371		if call != g_current_call:372			print "Call has been disconnected"373			return374		msg_data = py_pjsua.msg_data_init()375		status = py_pjsua.call_xfer(g_current_call, url, msg_data);376		if status != 0:377			py_pjsua.perror(THIS_FILE, "Error transfering call ", status)378		else:		379			write_log(3, "Call transfered to " + url)380		381def xfer_call_replaces():382	if g_current_call == -1:383		write_log(3, "No current call")384	else:385		call = g_current_call386		387		ids = py_pjsua.enum_calls()388		if len(ids) <= 1:389			print "There are no other calls"390			return		391		ci = py_pjsua.call_get_info(g_current_call)392		print "Transfer call [" + `g_current_call` + "] " + ci.remote_info + " to one of the following:"393		for i in range(0, len(ids)):		    394			if ids[i] == call:395				continue396			call_info = py_pjsua.call_get_info(ids[i])397			print `ids[i]` + "  " +  call_info.remote_info + "  [" + call_info.state_text + "]"		398		print "Enter call number to be replaced : "399		buf = sys.stdin.readline()400		buf = buf.replace("\n","")401		if buf == "":402			return403		dst_call = int(buf)404		405		if call != g_current_call:406			print "Call has been disconnected"407			return		408		409		if dst_call == call:410			print "Destination call number must not be the same as the call being transfered"411			return412		413		if dst_call >= py_pjsua.PJSUA_MAX_CALLS:414			print "Invalid destination call number"415			return416	417		if py_pjsua.call_is_active(dst_call) == 0:418			print "Invalid destination call number"419			return		420		py_pjsua.call_xfer_replaces(call, dst_call, 0, None)421		422#423# Worker thread function.424# Python doesn't like it when it's called from an alien thread425# (pjsua's worker thread, in this case), so for Python we must426# disable worker thread in pjsua and poll pjsua from Python instead.427#428def worker_thread_main(arg):429	global C_QUIT430	thread_desc = 0;431	status = py_pjsua.thread_register("python worker", thread_desc)432	if status != 0:433		py_pjsua.perror(THIS_FILE, "Error registering thread", status)434	else:435		while C_QUIT == 0:436			py_pjsua.handle_events(50)437		print "Worker thread quitting.."438		C_QUIT = 2439# Start pjsua440#441def app_start():442	# Done with initialization, start pjsua!!443	#444	status = py_pjsua.start()445	if status != 0:446		err_exit("Error starting pjsua!", status)447	# Start worker thread448	thr = thread.start_new(worker_thread_main, (0,))449    450	print "PJSUA Started!!"451# Print account and buddy list452def print_acc_buddy_list():453	global g_acc_id454	455	acc_ids = py_pjsua.enum_accs()456	print "Account list:"457	for acc_id in acc_ids:458		acc_info = py_pjsua.acc_get_info(acc_id)459		if acc_info.has_registration == 0:460			acc_status = acc_info.status_text461		else:462			acc_status = `acc_info.status` + "/" + acc_info.status_text + " (expires=" + `acc_info.expires` + ")"463		if acc_id == g_acc_id:464			print " *",465		else:466			print "  ",467		print "[" + `acc_id` + "] " + acc_info.acc_uri + ": " + acc_status468		print "       Presence status: ",469		if acc_info.online_status != 0:470			print "Online"471		else:472			print "Invisible"473	if py_pjsua.get_buddy_count() > 0:474		print ""475		print "Buddy list:"476		buddy_ids = py_pjsua.enum_buddies()477		for buddy_id in buddy_ids:478			bi = py_pjsua.buddy_get_info(buddy_id)479			print "   [" + `buddy_id` + "] " + bi.status_text + " " + bi.uri480	481		482# Print application menu483#484def print_menu():485	print ""486	print ">>>"487	print_acc_buddy_list()488	print """489+============================================================================+490|         Call Commands :      |  Buddy, IM & Presence:   |    Account:      |491|                              |                          |                  |492|  m  Make call                | +b  Add buddy            | +a  Add account  |493|  a  Answer current call      | -b  Delete buddy         | -a  Delete accnt |494|  h  Hangup current call      |                          |                  |495|  H  Hold call                |  i  Send instant message | rr  register     |496|  v  re-inVite (release Hold) |  s  Subscribe presence   | ru  Unregister   |497|  #  Send DTMF string         |  u  Unsubscribe presence |                  |498| dq  Dump curr. call quality  |  t  ToGgle Online status |                  |499|                              +--------------------------+------------------+500|  x  Xfer call                |     Media Commands:      |    Status:       |501|  X  Xfer with Replaces       |                          |                  |502|                              | cl  List ports           |  d  Dump status  |503|                              | cc  Connect port         | dd  Dump detail  |504|                              | cd  Disconnect port      |                  |505|                              | +p  Add file player      |                  |506|------------------------------+ +r  Add file recorder    |                  |507|  q  Quit application         |                          |                  |508+============================================================================+"""509	print "You have " + `py_pjsua.call_get_count()` + " active call(s)"510	print ">>>", 511# Menu512#513def app_menu():514	global g_acc_id515	global g_current_call516	quit = 0517	while quit == 0:518		print_menu()519		choice = sys.stdin.readline()520		if choice[0] == "q":521			quit = 1522		elif choice[0] == "i":523			# Sending IM	524			print "Send IM to SIP URL: ",525			url = sys.stdin.readline()526			if url == "\n":527				continue528			# Send typing indication529			py_pjsua.im_typing(g_acc_id, url, 1, None) 530			print "The content: ",531			message = sys.stdin.readline()532			if message == "\n":533				py_pjsua.im_typing(g_acc_id, url, 0, None) 		534				continue535			# Send the IM!536			py_pjsua.im_send(g_acc_id, url, None, message, None, 0)537		elif choice[0] == "m":538			# Make call 539			print "Using account ", g_acc_id540			print "Make call to SIP URL: ",541			url = sys.stdin.readline()542			url = url.replace("\n", "")543			if url == "":544				continue545			# Initiate the call!546			status, call_id = py_pjsua.call_make_call(g_acc_id, url, 0, 0, None)547            548			if status != 0:549				py_pjsua.perror(THIS_FILE, "Error making call", status)550			else:551				g_current_call = call_id552		elif choice[0] == "+" and choice[1] == "b":553			# Add new buddy554			bc = py_pjsua.Buddy_Config()555			print "Buddy URL: ",556			bc.uri = sys.stdin.readline()557			if bc.uri == "\n":558				continue559            560			bc.uri = bc.uri.replace("\n", "")561			bc.subscribe = 1562			status, buddy_id = py_pjsua.buddy_add(bc)563			if status != 0:564				py_pjsua.perror(THIS_FILE, "Error adding buddy", status)565		elif choice[0] == "-" and choice[1] == "b":566			print "Enter buddy ID to delete : "567			buf = sys.stdin.readline()568			buf = buf.replace("\n","")569			if buf == "":570				continue571			i = int(buf)572			if py_pjsua.buddy_is_valid(i) == 0:573				print "Invalid buddy id " + `i`574			else:575				py_pjsua.buddy_del(i)576				print "Buddy " + `i` + " deleted"		577		elif choice[0] == "+" and choice[1] == "a":578			# Add account579			add_account()580		elif choice[0] == "-" and choice[1] == "a":581			print "Enter account ID to delete : "582			buf = sys.stdin.readline()583			buf = buf.replace("\n","")584			if buf == "":585				continue586			i = int(buf)587			if py_pjsua.acc_is_valid(i) == 0:588				print "Invalid account id " + `i`589			else:590				py_pjsua.acc_del(i)591				print "Account " + `i` + " deleted"592	    593		elif choice[0] == "+" and choice[1] == "p":594			add_player()595		elif choice[0] == "+" and choice[1] == "r":596			add_recorder()597		elif choice[0] == "c" and choice[1] == "l":598			conf_list()599		elif choice[0] == "c" and choice[1] == "c":600			connect_port()601		elif choice[0] == "c" and choice[1] == "d":602			disconnect_port()603		elif choice[0] == "d" and choice[1] == "q":604			dump_call_quality()605		elif choice[0] == "x":606			xfer_call()607		elif choice[0] == "X":608			xfer_call_replaces()609		elif choice[0] == "h":610			if g_current_call != py_pjsua.PJSUA_INVALID_ID:611				py_pjsua.call_hangup(g_current_call, 603, None, None)612			else:613				print "No current call"614		elif choice[0] == "H":615			if g_current_call != py_pjsua.PJSUA_INVALID_ID:616				py_pjsua.call_set_hold(g_current_call, None)617		618			else:619				print "No current call"620		elif choice[0] == "v":...test_class.py
Source:test_class.py  
1"Test the functionality of Python classes implementing operators."2import unittest3from test import test_support4testmeths = [5# Binary operations6    "add",7    "radd",8    "sub",9    "rsub",10    "mul",11    "rmul",12    "div",13    "rdiv",14    "mod",15    "rmod",16    "divmod",17    "rdivmod",18    "pow",19    "rpow",20    "rshift",21    "rrshift",22    "lshift",23    "rlshift",24    "and",25    "rand",26    "or",27    "ror",28    "xor",29    "rxor",30# List/dict operations31    "contains",32    "getitem",33    "getslice",34    "setitem",35    "setslice",36    "delitem",37    "delslice",38# Unary operations39    "neg",40    "pos",41    "abs",42# generic operations43    "init",44    ]45# These need to return something other than None46#    "coerce",47#    "hash",48#    "str",49#    "repr",50#    "int",51#    "long",52#    "float",53#    "oct",54#    "hex",55# These are separate because they can influence the test of other methods.56#    "getattr",57#    "setattr",58#    "delattr",59callLst = []60def trackCall(f):61    def track(*args, **kwargs):62        callLst.append((f.__name__, args))63        return f(*args, **kwargs)64    return track65class AllTests:66    trackCall = trackCall67    @trackCall68    def __coerce__(self, *args):69        return (self,) + args70    @trackCall71    def __hash__(self, *args):72        return hash(id(self))73    @trackCall74    def __str__(self, *args):75        return "AllTests"76    @trackCall77    def __repr__(self, *args):78        return "AllTests"79    @trackCall80    def __int__(self, *args):81        return 182    @trackCall83    def __float__(self, *args):84        return 1.085    @trackCall86    def __long__(self, *args):87        return 1L88    @trackCall89    def __oct__(self, *args):90        return '01'91    @trackCall92    def __hex__(self, *args):93        return '0x1'94    @trackCall95    def __cmp__(self, *args):96        return 097# Synthesize all the other AllTests methods from the names in testmeths.98method_template = """\99@trackCall100def __%(method)s__(self, *args):101    pass102"""103for method in testmeths:104    exec method_template % locals() in AllTests.__dict__105del method, method_template106class ClassTests(unittest.TestCase):107    def setUp(self):108        callLst[:] = []109    def assertCallStack(self, expected_calls):110        actualCallList = callLst[:]  # need to copy because the comparison below will add111                                     # additional calls to callLst112        if expected_calls != actualCallList:113            self.fail("Expected call list:\n  %s\ndoes not match actual call list\n  %s" %114                      (expected_calls, actualCallList))115    def testInit(self):116        foo = AllTests()117        self.assertCallStack([("__init__", (foo,))])118    def testBinaryOps(self):119        testme = AllTests()120        # Binary operations121        callLst[:] = []122        testme + 1123        self.assertCallStack([("__coerce__", (testme, 1)), ("__add__", (testme, 1))])124        callLst[:] = []125        1 + testme126        self.assertCallStack([("__coerce__", (testme, 1)), ("__radd__", (testme, 1))])127        callLst[:] = []128        testme - 1129        self.assertCallStack([("__coerce__", (testme, 1)), ("__sub__", (testme, 1))])130        callLst[:] = []131        1 - testme132        self.assertCallStack([("__coerce__", (testme, 1)), ("__rsub__", (testme, 1))])133        callLst[:] = []134        testme * 1135        self.assertCallStack([("__coerce__", (testme, 1)), ("__mul__", (testme, 1))])136        callLst[:] = []137        1 * testme138        self.assertCallStack([("__coerce__", (testme, 1)), ("__rmul__", (testme, 1))])139        if 1/2 == 0:140            callLst[:] = []141            testme / 1142            self.assertCallStack([("__coerce__", (testme, 1)), ("__div__", (testme, 1))])143            callLst[:] = []144            1 / testme145            self.assertCallStack([("__coerce__", (testme, 1)), ("__rdiv__", (testme, 1))])146        callLst[:] = []147        testme % 1148        self.assertCallStack([("__coerce__", (testme, 1)), ("__mod__", (testme, 1))])149        callLst[:] = []150        1 % testme151        self.assertCallStack([("__coerce__", (testme, 1)), ("__rmod__", (testme, 1))])152        callLst[:] = []153        divmod(testme,1)154        self.assertCallStack([("__coerce__", (testme, 1)), ("__divmod__", (testme, 1))])155        callLst[:] = []156        divmod(1, testme)157        self.assertCallStack([("__coerce__", (testme, 1)), ("__rdivmod__", (testme, 1))])158        callLst[:] = []159        testme ** 1160        self.assertCallStack([("__coerce__", (testme, 1)), ("__pow__", (testme, 1))])161        callLst[:] = []162        1 ** testme163        self.assertCallStack([("__coerce__", (testme, 1)), ("__rpow__", (testme, 1))])164        callLst[:] = []165        testme >> 1166        self.assertCallStack([("__coerce__", (testme, 1)), ("__rshift__", (testme, 1))])167        callLst[:] = []168        1 >> testme169        self.assertCallStack([("__coerce__", (testme, 1)), ("__rrshift__", (testme, 1))])170        callLst[:] = []171        testme << 1172        self.assertCallStack([("__coerce__", (testme, 1)), ("__lshift__", (testme, 1))])173        callLst[:] = []174        1 << testme175        self.assertCallStack([("__coerce__", (testme, 1)), ("__rlshift__", (testme, 1))])176        callLst[:] = []177        testme & 1178        self.assertCallStack([("__coerce__", (testme, 1)), ("__and__", (testme, 1))])179        callLst[:] = []180        1 & testme181        self.assertCallStack([("__coerce__", (testme, 1)), ("__rand__", (testme, 1))])182        callLst[:] = []183        testme | 1184        self.assertCallStack([("__coerce__", (testme, 1)), ("__or__", (testme, 1))])185        callLst[:] = []186        1 | testme187        self.assertCallStack([("__coerce__", (testme, 1)), ("__ror__", (testme, 1))])188        callLst[:] = []189        testme ^ 1190        self.assertCallStack([("__coerce__", (testme, 1)), ("__xor__", (testme, 1))])191        callLst[:] = []192        1 ^ testme193        self.assertCallStack([("__coerce__", (testme, 1)), ("__rxor__", (testme, 1))])194    def testListAndDictOps(self):195        testme = AllTests()196        # List/dict operations197        class Empty: pass198        try:199            1 in Empty()200            self.fail('failed, should have raised TypeError')201        except TypeError:202            pass203        callLst[:] = []204        1 in testme205        self.assertCallStack([('__contains__', (testme, 1))])206        callLst[:] = []207        testme[1]208        self.assertCallStack([('__getitem__', (testme, 1))])209        callLst[:] = []210        testme[1] = 1211        self.assertCallStack([('__setitem__', (testme, 1, 1))])212        callLst[:] = []213        del testme[1]214        self.assertCallStack([('__delitem__', (testme, 1))])215        callLst[:] = []216        testme[:42]217        self.assertCallStack([('__getslice__', (testme, 0, 42))])218        callLst[:] = []219        testme[:42] = "The Answer"220        self.assertCallStack([('__setslice__', (testme, 0, 42, "The Answer"))])221        callLst[:] = []222        del testme[:42]223        self.assertCallStack([('__delslice__', (testme, 0, 42))])224        callLst[:] = []225        testme[2:1024:10]226        self.assertCallStack([('__getitem__', (testme, slice(2, 1024, 10)))])227        callLst[:] = []228        testme[2:1024:10] = "A lot"229        self.assertCallStack([('__setitem__', (testme, slice(2, 1024, 10),230                                                                    "A lot"))])231        callLst[:] = []232        del testme[2:1024:10]233        self.assertCallStack([('__delitem__', (testme, slice(2, 1024, 10)))])234        callLst[:] = []235        testme[:42, ..., :24:, 24, 100]236        self.assertCallStack([('__getitem__', (testme, (slice(None, 42, None),237                                                        Ellipsis,238                                                        slice(None, 24, None),239                                                        24, 100)))])240        callLst[:] = []241        testme[:42, ..., :24:, 24, 100] = "Strange"242        self.assertCallStack([('__setitem__', (testme, (slice(None, 42, None),243                                                        Ellipsis,244                                                        slice(None, 24, None),245                                                        24, 100), "Strange"))])246        callLst[:] = []247        del testme[:42, ..., :24:, 24, 100]248        self.assertCallStack([('__delitem__', (testme, (slice(None, 42, None),249                                                        Ellipsis,250                                                        slice(None, 24, None),251                                                        24, 100)))])252        # Now remove the slice hooks to see if converting normal slices to253        #  slice object works.254        getslice = AllTests.__getslice__255        del AllTests.__getslice__256        setslice = AllTests.__setslice__257        del AllTests.__setslice__258        delslice = AllTests.__delslice__259        del AllTests.__delslice__260        # XXX when using new-style classes the slice testme[:42] produces261        #  slice(None, 42, None) instead of slice(0, 42, None). py3k will have262        #  to change this test.263        callLst[:] = []264        testme[:42]265        self.assertCallStack([('__getitem__', (testme, slice(0, 42, None)))])266        callLst[:] = []267        testme[:42] = "The Answer"268        self.assertCallStack([('__setitem__', (testme, slice(0, 42, None),269                                                                "The Answer"))])270        callLst[:] = []271        del testme[:42]272        self.assertCallStack([('__delitem__', (testme, slice(0, 42, None)))])273        # Restore the slice methods, or the tests will fail with regrtest -R.274        AllTests.__getslice__ = getslice275        AllTests.__setslice__ = setslice276        AllTests.__delslice__ = delslice277    @test_support.cpython_only278    def testDelItem(self):279        class A:280            ok = False281            def __delitem__(self, key):282                self.ok = True283        a = A()284        # Subtle: we need to call PySequence_SetItem, not PyMapping_SetItem.285        from _testcapi import sequence_delitem286        sequence_delitem(a, 2)287        self.assertTrue(a.ok)288    def testUnaryOps(self):289        testme = AllTests()290        callLst[:] = []291        -testme292        self.assertCallStack([('__neg__', (testme,))])293        callLst[:] = []294        +testme295        self.assertCallStack([('__pos__', (testme,))])296        callLst[:] = []297        abs(testme)298        self.assertCallStack([('__abs__', (testme,))])299        callLst[:] = []300        int(testme)301        self.assertCallStack([('__int__', (testme,))])302        callLst[:] = []303        long(testme)304        self.assertCallStack([('__long__', (testme,))])305        callLst[:] = []306        float(testme)307        self.assertCallStack([('__float__', (testme,))])308        callLst[:] = []309        oct(testme)310        self.assertCallStack([('__oct__', (testme,))])311        callLst[:] = []312        hex(testme)313        self.assertCallStack([('__hex__', (testme,))])314    def testMisc(self):315        testme = AllTests()316        callLst[:] = []317        hash(testme)318        self.assertCallStack([('__hash__', (testme,))])319        callLst[:] = []320        repr(testme)321        self.assertCallStack([('__repr__', (testme,))])322        callLst[:] = []323        str(testme)324        self.assertCallStack([('__str__', (testme,))])325        callLst[:] = []326        testme == 1327        self.assertCallStack([("__coerce__", (testme, 1)), ('__cmp__', (testme, 1))])328        callLst[:] = []329        testme < 1330        self.assertCallStack([("__coerce__", (testme, 1)), ('__cmp__', (testme, 1))])331        callLst[:] = []332        testme > 1333        self.assertCallStack([("__coerce__", (testme, 1)), ('__cmp__', (testme, 1))])334        callLst[:] = []335        eval('testme <> 1')  # XXX kill this in py3k336        self.assertCallStack([("__coerce__", (testme, 1)), ('__cmp__', (testme, 1))])337        callLst[:] = []338        testme != 1339        self.assertCallStack([("__coerce__", (testme, 1)), ('__cmp__', (testme, 1))])340        callLst[:] = []341        1 == testme342        self.assertCallStack([("__coerce__", (testme, 1)), ('__cmp__', (1, testme))])343        callLst[:] = []344        1 < testme345        self.assertCallStack([("__coerce__", (testme, 1)), ('__cmp__', (1, testme))])346        callLst[:] = []347        1 > testme348        self.assertCallStack([("__coerce__", (testme, 1)), ('__cmp__', (1, testme))])349        callLst[:] = []350        eval('1 <> testme')351        self.assertCallStack([("__coerce__", (testme, 1)), ('__cmp__', (1, testme))])352        callLst[:] = []353        1 != testme354        self.assertCallStack([("__coerce__", (testme, 1)), ('__cmp__', (1, testme))])355    def testGetSetAndDel(self):356        # Interfering tests357        class ExtraTests(AllTests):358            @trackCall359            def __getattr__(self, *args):360                return "SomeVal"361            @trackCall362            def __setattr__(self, *args):363                pass364            @trackCall365            def __delattr__(self, *args):366                pass367        testme = ExtraTests()368        callLst[:] = []369        testme.spam370        self.assertCallStack([('__getattr__', (testme, "spam"))])371        callLst[:] = []372        testme.eggs = "spam, spam, spam and ham"373        self.assertCallStack([('__setattr__', (testme, "eggs",374                                               "spam, spam, spam and ham"))])375        callLst[:] = []376        del testme.cardinal377        self.assertCallStack([('__delattr__', (testme, "cardinal"))])378    def testDel(self):379        x = []380        class DelTest:381            def __del__(self):382                x.append("crab people, crab people")383        testme = DelTest()384        del testme385        import gc386        gc.collect()387        self.assertEqual(["crab people, crab people"], x)388    def testBadTypeReturned(self):389        # return values of some method are type-checked390        class BadTypeClass:391            def __int__(self):392                return None393            __float__ = __int__394            __long__ = __int__395            __str__ = __int__396            __repr__ = __int__397            __oct__ = __int__398            __hex__ = __int__399        for f in [int, float, long, str, repr, oct, hex]:400            self.assertRaises(TypeError, f, BadTypeClass())401    def testMixIntsAndLongs(self):402        # mixing up ints and longs is okay403        class IntLongMixClass:404            @trackCall405            def __int__(self):406                return 42L407            @trackCall408            def __long__(self):409                return 64410        mixIntAndLong = IntLongMixClass()411        callLst[:] = []412        as_int = int(mixIntAndLong)413        self.assertEqual(type(as_int), long)414        self.assertEqual(as_int, 42L)415        self.assertCallStack([('__int__', (mixIntAndLong,))])416        callLst[:] = []417        as_long = long(mixIntAndLong)418        self.assertEqual(type(as_long), long)419        self.assertEqual(as_long, 64)420        self.assertCallStack([('__long__', (mixIntAndLong,))])421    def testHashStuff(self):422        # Test correct errors from hash() on objects with comparisons but423        #  no __hash__424        class C0:425            pass426        hash(C0()) # This should work; the next two should raise TypeError427        class C1:428            def __cmp__(self, other): return 0429        self.assertRaises(TypeError, hash, C1())430        class C2:431            def __eq__(self, other): return 1432        self.assertRaises(TypeError, hash, C2())433    def testSFBug532646(self):434        # Test for SF bug 532646435        class A:436            pass437        A.__call__ = A()438        a = A()439        try:440            a() # This should not segfault441        except RuntimeError:442            pass443        else:444            self.fail("Failed to raise RuntimeError")445    def testForExceptionsRaisedInInstanceGetattr2(self):446        # Tests for exceptions raised in instance_getattr2().447        def booh(self):448            raise AttributeError("booh")449        class A:450            a = property(booh)451        try:452            A().a # Raised AttributeError: A instance has no attribute 'a'453        except AttributeError, x:454            if str(x) != "booh":455                self.fail("attribute error for A().a got masked: %s" % x)456        class E:457            __eq__ = property(booh)458        E() == E() # In debug mode, caused a C-level assert() to fail459        class I:460            __init__ = property(booh)461        try:462            # In debug mode, printed XXX undetected error and463            #  raises AttributeError464            I()465        except AttributeError, x:466            pass467        else:468            self.fail("attribute error for I.__init__ got masked")469    def testHashComparisonOfMethods(self):470        # Test comparison and hash of methods471        class A:472            def __init__(self, x):473                self.x = x474            def f(self):475                pass476            def g(self):477                pass478            def __eq__(self, other):479                return self.x == other.x480            def __hash__(self):481                return self.x482        class B(A):483            pass484        a1 = A(1)485        a2 = A(2)486        self.assertEqual(a1.f, a1.f)487        self.assertNotEqual(a1.f, a2.f)488        self.assertNotEqual(a1.f, a1.g)489        self.assertEqual(a1.f, A(1).f)490        self.assertEqual(hash(a1.f), hash(a1.f))491        self.assertEqual(hash(a1.f), hash(A(1).f))492        self.assertNotEqual(A.f, a1.f)493        self.assertNotEqual(A.f, A.g)494        self.assertEqual(B.f, A.f)495        self.assertEqual(hash(B.f), hash(A.f))496        # the following triggers a SystemError in 2.4497        a = A(hash(A.f.im_func)^(-1))498        hash(a.f)499    def testAttrSlots(self):500        class C:501            pass502        for c in C, C():503            self.assertRaises(TypeError, type(c).__getattribute__, c, [])504            self.assertRaises(TypeError, type(c).__setattr__, c, [], [])505def test_main():506    with test_support.check_py3k_warnings(507            (".+__(get|set|del)slice__ has been removed", DeprecationWarning),508            ("classic int division", DeprecationWarning),509            ("<> not supported", DeprecationWarning)):510        test_support.run_unittest(ClassTests)511if __name__=='__main__':...car_telecom_utils.py
Source:car_telecom_utils.py  
...114            ad.droid.telecomCallStopListeningForEvent(call_id,115                tel_defines.EventTelecomCallStateChanged)116            return False117    return False118def hangup_call(log, ad, call_id):119    """Hangup a number120    Args:121        log: log object122        ad: android device object123        call_id: Call to hangup.124    Returns:125        True if success, False if fail.126    """127    log.info("Hanging up droid {} call {}".format(128        ad.serial, call_id))129    # First check that we are in call, otherwise fail.130    if not ad.droid.telecomIsInCall():131        log.info("We are not in-call {}".format(ad.serial))132        return False133    # Make sure we are registered with the events.134    ad.droid.telecomStartListeningForCallRemoved()135    # Disconnect call.136    ad.droid.telecomCallDisconnect(call_id)137    # Wait for removed event.138    event = None139    try:140        event = ad.ed.pop_event(141            tel_defines.EventTelecomCallRemoved,142            tel_defines.MAX_WAIT_TIME_CONNECTION_STATE_UPDATE)143    except queue.Empty:144        log.info("Did not get TelecomCallRemoved event")145        return False146    finally:147        ad.droid.telecomStopListeningForCallRemoved()148    log.info("Removed call {}".format(event))149    if event['data']['CallId'] != call_id:150        return False151    return True152def hangup_conf(log, ad, conf_id):153    """Hangup a conference call154    Args:155        log: log object156        ad: android device object157        conf_id: Conf call to hangup.158    Returns:159        True if success, False if fail.160    """161    log.info("hangup_conf: Hanging up droid {} call {}".format(162        ad.serial, conf_id))163    # First check that we are in call, otherwise fail.164    if not ad.droid.telecomIsInCall():165        log.info("We are not in-call {}".format(ad.serial))166        return False167    # Get the list of children for this conference.168    all_calls = get_call_id_children(log, ad, conf_id)169    # All calls that needs disconnecting (Parent + Children)170    all_calls.add(conf_id)171    # Make sure we are registered with the events.172    ad.droid.telecomStartListeningForCallRemoved()173    # Disconnect call.174    ad.droid.telecomCallDisconnect(conf_id)175    # Wait for removed event.176    while len(all_calls) > 0:177        event = None178        try:179            event = ad.ed.pop_event(180                tel_defines.EventTelecomCallRemoved,181                tel_defines.MAX_WAIT_TIME_CONNECTION_STATE_UPDATE)182        except queue.Empty:183            log.info("Did not get TelecomCallRemoved event")184            ad.droid.telecomStopListeningForCallRemoved()185            return False186        removed_call_id = event['data']['CallId']187        all_calls.remove(removed_call_id)188        log.info("Removed call {} left calls {}".format(removed_call_id, all_calls))189    ad.droid.telecomStopListeningForCallRemoved()190    return True191def accept_call(log, ad, call_id):192    """Accept a number193    Args:194        log: log object195        ad: android device object196        call_id: Call to accept.197    Returns:198        True if success, False if fail.199    """200    log.info("Accepting call at droid {} call {}".format(201        ad.serial, call_id))202    # First check we are in call, otherwise fail.203    if not ad.droid.telecomIsInCall():204        log.info("We are not in-call {}".format(ad.serial))205        return False206    # Accept the call and wait for the call to be accepted on AG.207    ad.droid.telecomCallAnswer(call_id, tel_defines.VT_STATE_AUDIO_ONLY)208    if not wait_for_call_state(log, ad, call_id, tel_defines.CALL_STATE_ACTIVE):209        log.error("Call {} on droid {} not active".format(210            call_id, ad.serial))211        return False212    return True213def wait_for_not_in_call(log, ad):214    """Wait for the droid to be OUT OF CALLING state.215    Args:216        log: log object217        ad: android device object218    Returns:219        True if success, False if fail.220    """221    ad.droid.telecomStartListeningForCallRemoved()222    calls = ad.droid.telecomCallGetCallIds()223    if len(calls) > 1:224        log.info("More than one call {} {}".format(calls, ad.serial))225        return False226    if len(calls) > 0:227        log.info("Got calls {} for {}".format(...LambdaTest’s Playwright tutorial will give you a broader idea about the Playwright automation framework, its unique features, and use cases with examples to exceed your understanding of Playwright testing. This tutorial will give A to Z guidance, from installing the Playwright framework to some best practices and advanced concepts.
Get 100 minutes of automation test minutes FREE!!
