1 | import DeviceSensor from '../DeviceSensor';
|
2 | import MockNativeSensorModule from './mocks/MockNativeSensorModule';
|
3 |
|
4 | it(`tracks the listener count on iOS`, () => {
|
5 | const nativeModule = new MockNativeSensorModule();
|
6 | const sensor = new DeviceSensor(nativeModule, 'mockDidUpdate');
|
7 |
|
8 |
|
9 | const subscription1 = sensor.addListener(() => {});
|
10 | expect(nativeModule.addListener).toHaveBeenCalledTimes(1);
|
11 |
|
12 | sensor.addListener(() => {});
|
13 | sensor.addListener(() => {});
|
14 | expect(nativeModule.addListener).toHaveBeenCalledTimes(3);
|
15 |
|
16 |
|
17 | subscription1.remove();
|
18 | expect(nativeModule.removeListeners).toHaveBeenCalledTimes(1);
|
19 | expect(nativeModule.removeListeners).toHaveBeenLastCalledWith(1);
|
20 |
|
21 | sensor.removeAllListeners();
|
22 | expect(_countRemovedListeners(nativeModule)).toBe(3);
|
23 | });
|
24 |
|
25 | it(`doesn't manually start and stop observing on iOS`, () => {
|
26 | const nativeModule = new MockNativeSensorModule();
|
27 | const sensor = new DeviceSensor(nativeModule, 'mockDidUpdate');
|
28 |
|
29 | expect(nativeModule.startObserving).not.toHaveBeenCalled();
|
30 | expect(nativeModule.stopObserving).not.toHaveBeenCalled();
|
31 |
|
32 |
|
33 | let subscription1 = sensor.addListener(() => {});
|
34 | expect(nativeModule.startObserving).not.toHaveBeenCalled();
|
35 | let subscription2 = sensor.addListener(() => {});
|
36 | expect(nativeModule.startObserving).not.toHaveBeenCalled();
|
37 |
|
38 |
|
39 | subscription1.remove();
|
40 | expect(nativeModule.stopObserving).not.toHaveBeenCalled();
|
41 | subscription2.remove();
|
42 | expect(nativeModule.stopObserving).not.toHaveBeenCalled();
|
43 | });
|
44 |
|
45 | it(`doesn't fail when a subscription is removed twice`, () => {
|
46 | const nativeModule = new MockNativeSensorModule();
|
47 | const sensor = new DeviceSensor(nativeModule, 'mockDidUpdate');
|
48 |
|
49 |
|
50 | let subscription = sensor.addListener(() => {});
|
51 | expect(sensor.hasListeners()).toBe(true);
|
52 |
|
53 |
|
54 | subscription.remove();
|
55 | expect(sensor.hasListeners()).toBe(false);
|
56 | expect(() => subscription.remove()).not.toThrow();
|
57 | expect(() => sensor.removeSubscription(subscription)).not.toThrow();
|
58 | });
|
59 |
|
60 | function _countRemovedListeners(nativeModule) {
|
61 | let sum = 0;
|
62 | for (let call of nativeModule.removeListeners.mock.calls) {
|
63 | expect(typeof call[0] === 'number').toBe(true);
|
64 | sum += call[0];
|
65 | }
|
66 | return sum;
|
67 | }
|