(obj, observer, done)
| 51 | } |
| 52 | |
| 53 | export function executeSharedPropertyObserverTests(obj, observer, done) { |
| 54 | let context = 'test-context'; |
| 55 | let callable0 = { call: jasmine.createSpy('callable0') }; |
| 56 | let callable1 = { call: jasmine.createSpy('callable1') }; |
| 57 | let callable2 = { call: jasmine.createSpy('callable2') }; |
| 58 | let callable3 = { call: jasmine.createSpy('callable3') }; |
| 59 | let callable4 = { call: jasmine.createSpy('callable4') }; |
| 60 | let callable5 = { call: jasmine.createSpy('callable5') }; |
| 61 | let oldValue; |
| 62 | let newValue; |
| 63 | let values = ['alkjdfs', 0, false, {}, [], null, undefined, 'foo']; |
| 64 | let next; |
| 65 | spyOn(observer, 'addSubscriber').and.callThrough(); |
| 66 | spyOn(observer, 'removeSubscriber').and.callThrough(); |
| 67 | // hasSubscribers, hasSubscriber |
| 68 | expect(observer.hasSubscribers()).toBe(false); |
| 69 | expect(observer.hasSubscriber(context, callable0)).toBe(false); |
| 70 | observer.subscribe(context, callable0); |
| 71 | expect(observer.addSubscriber).toHaveBeenCalledWith(context, callable0); |
| 72 | expect(countSubscribers(observer)).toBe(1); |
| 73 | expect(observer.hasSubscribers()).toBe(true); |
| 74 | expect(observer.hasSubscriber(context, callable0)).toBe(true); |
| 75 | // doesn't allow multiple subscribe |
| 76 | observer.subscribe(context, callable0); |
| 77 | expect(observer.addSubscriber).toHaveBeenCalledWith(context, callable0); |
| 78 | expect(countSubscribers(observer)).toBe(1); |
| 79 | // doesn't allow multiple unsubscribe |
| 80 | observer.unsubscribe(context, callable0); |
| 81 | expect(observer.removeSubscriber).toHaveBeenCalledWith(context, callable0); |
| 82 | expect(countSubscribers(observer)).toBe(0); |
| 83 | observer.unsubscribe(context, callable0); |
| 84 | expect(observer.removeSubscriber).toHaveBeenCalledWith(context, callable0); |
| 85 | expect(countSubscribers(observer)).toBe(0); |
| 86 | |
| 87 | // overflows into "rest" array |
| 88 | observer.subscribe(context, callable0); |
| 89 | expect(observer._callable0).toBe(callable0); |
| 90 | expect(countSubscribers(observer)).toBe(1); |
| 91 | expect(observer.hasSubscribers()).toBe(true); |
| 92 | expect(observer.hasSubscriber(context, callable0)).toBe(true); |
| 93 | |
| 94 | observer.subscribe(context, callable1); |
| 95 | expect(observer._callable1).toBe(callable1); |
| 96 | expect(countSubscribers(observer)).toBe(2); |
| 97 | expect(observer.hasSubscribers()).toBe(true); |
| 98 | expect(observer.hasSubscriber(context, callable1)).toBe(true); |
| 99 | |
| 100 | observer.subscribe(context, callable2); |
| 101 | expect(observer._callable2).toBe(callable2); |
| 102 | expect(countSubscribers(observer)).toBe(3); |
| 103 | expect(observer.hasSubscribers()).toBe(true); |
| 104 | expect(observer.hasSubscriber(context, callable2)).toBe(true); |
| 105 | |
| 106 | observer.subscribe(context, callable3); |
| 107 | expect(observer._callablesRest[0]).toBe(callable3); |
| 108 | expect(countSubscribers(observer)).toBe(4); |
| 109 | expect(observer.hasSubscribers()).toBe(true); |
| 110 | expect(observer.hasSubscriber(context, callable3)).toBe(true); |
no test coverage detected