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!!