(self, typecallable, creator=None)
| 481 | assert_eq() |
| 482 | |
| 483 | def _test_list_bulk(self, typecallable, creator=None): |
| 484 | if creator is None: |
| 485 | creator = self.entity_maker |
| 486 | |
| 487 | class Foo: |
| 488 | pass |
| 489 | |
| 490 | canary = Canary() |
| 491 | instrumentation.register_class(Foo) |
| 492 | d = _register_attribute( |
| 493 | Foo, |
| 494 | "attr", |
| 495 | uselist=True, |
| 496 | typecallable=typecallable, |
| 497 | useobject=True, |
| 498 | ) |
| 499 | canary.listen(d) |
| 500 | |
| 501 | obj = Foo() |
| 502 | direct = obj.attr |
| 503 | |
| 504 | e1 = creator() |
| 505 | obj.attr.append(e1) |
| 506 | |
| 507 | like_me = typecallable() |
| 508 | e2 = creator() |
| 509 | like_me.append(e2) |
| 510 | |
| 511 | self.assert_(obj.attr is direct) |
| 512 | obj.attr = like_me |
| 513 | self.assert_(obj.attr is not direct) |
| 514 | self.assert_(obj.attr is not like_me) |
| 515 | self.assert_(set(obj.attr) == {e2}) |
| 516 | self.assert_(e1 in canary.removed) |
| 517 | self.assert_(e2 in canary.added) |
| 518 | |
| 519 | e3 = creator() |
| 520 | real_list = [e3] |
| 521 | obj.attr = real_list |
| 522 | self.assert_(obj.attr is not real_list) |
| 523 | self.assert_(set(obj.attr) == {e3}) |
| 524 | self.assert_(e2 in canary.removed) |
| 525 | self.assert_(e3 in canary.added) |
| 526 | |
| 527 | e4 = creator() |
| 528 | try: |
| 529 | obj.attr = {e4} |
| 530 | self.assert_(False) |
| 531 | except TypeError: |
| 532 | self.assert_(e4 not in canary.data) |
| 533 | self.assert_(e3 in canary.data) |
| 534 | |
| 535 | e5 = creator() |
| 536 | e6 = creator() |
| 537 | e7 = creator() |
| 538 | obj.attr = [e5, e6, e7] |
| 539 | self.assert_(e5 in canary.added) |
| 540 | self.assert_(e6 in canary.added) |
no test coverage detected