UNPKG

2.31 kBPlain TextView Raw
1import DeviceSensor from '../DeviceSensor';
2import MockNativeSensorModule from './mocks/MockNativeSensorModule';
3
4it(`tracks the listener count on iOS`, () => {
5 const nativeModule = new MockNativeSensorModule();
6 const sensor = new DeviceSensor(nativeModule, 'mockDidUpdate');
7
8 // Add listeners
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 // Remove listeners
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
25it(`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 // Add listeners
33 let subscription1 = sensor.addListener(() => {});
34 expect(nativeModule.startObserving).not.toHaveBeenCalled();
35 let subscription2 = sensor.addListener(() => {});
36 expect(nativeModule.startObserving).not.toHaveBeenCalled();
37
38 // Remove listeners
39 subscription1.remove();
40 expect(nativeModule.stopObserving).not.toHaveBeenCalled();
41 subscription2.remove();
42 expect(nativeModule.stopObserving).not.toHaveBeenCalled();
43});
44
45it(`doesn't fail when a subscription is removed twice`, () => {
46 const nativeModule = new MockNativeSensorModule();
47 const sensor = new DeviceSensor(nativeModule, 'mockDidUpdate');
48
49 // Add listeners
50 let subscription = sensor.addListener(() => {});
51 expect(sensor.hasListeners()).toBe(true);
52
53 // Remove listeners
54 subscription.remove();
55 expect(sensor.hasListeners()).toBe(false);
56 expect(() => subscription.remove()).not.toThrow();
57 expect(() => sensor.removeSubscription(subscription)).not.toThrow();
58});
59
60function _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}