git.fiddlerwoaroof.com
Browse code

Use correct main, make listener-deregistration work

Ed Langley authored on 28/05/2018 20:49:17
Showing 3 changed files
... ...
@@ -2,7 +2,7 @@
2 2
   "name": "state_container",
3 3
   "version": "1.0.0",
4 4
   "description": "",
5
-  "main": "src/state_container.js",
5
+  "main": "dist/state_container.js",
6 6
   "scripts": {
7 7
     "test": "jest",
8 8
     "babel": "babel src/ -d dist/"
... ...
@@ -32,8 +32,8 @@ let common_state = {
32 32
 
33 33
     onUpdate(listener) {
34 34
         this.listeners.push(listener);
35
-        return function () {
36
-            this.listeners = this.listeners.splice(this.listeners.indexOf(listener), 1);
35
+        return () => {
36
+            this.listeners.splice(this.listeners.indexOf(listener), 1);
37 37
         };
38 38
     },
39 39
 
... ...
@@ -61,31 +61,65 @@ test("onUpdate listeners are fired when set is called", () => {
61 61
 
62 62
 test("onUpdate listeners are fired when setState is called", () => {
63 63
     let container = new StateContainer({foo: 'bar'});
64
-    let listener = sinon.spy();
64
+    let listener1 = sinon.spy();
65
+    let listener2 = sinon.spy();
65 66
 
66
-    container.onUpdate(listener);
67
+    let rfn1 = container.onUpdate(listener1);
68
+    let rfn2 = container.onUpdate(listener2);
67 69
 
68 70
     container.setState({'foo': 'hi'});
71
+    rfn1();
72
+    container.setState({'foo': 'unfoo'});
69 73
 
70
-    expect(JSON.stringify(listener.args[0]))
74
+    expect(listener1.args.length).toBe(1);
75
+    expect(JSON.stringify(listener1.args[0]))
71 76
         .toEqual(JSON.stringify(
72 77
             [{ foo: 'bar' },
73 78
              { foo: 'hi' }]
74 79
         ));
75 80
 
81
+    expect(listener2.args.length).toBe(2);
82
+    expect(JSON.stringify(listener2.args[0]))
83
+        .toEqual(JSON.stringify(
84
+            [{ foo: 'bar' },
85
+             { foo: 'hi' }]
86
+        ));
87
+    expect(JSON.stringify(listener2.args[1]))
88
+        .toEqual(JSON.stringify(
89
+            [{ foo: 'hi' },
90
+             { foo: 'unfoo' }]
91
+        ));
92
+
76 93
     container = new StateContainer({foo: 'bar'});
77 94
     const recorder = container.getRecorder();
78
-    listener = sinon.spy();
95
+    listener1 = sinon.spy();
96
+    listener2 = sinon.spy();
79 97
 
80
-    recorder.onUpdate(listener);
98
+    rfn1 = recorder.onUpdate(listener1);
99
+    rfn2 = recorder.onUpdate(listener2);
81 100
 
82 101
     recorder.setState({'foo': 'hi'});
102
+    rfn1();
103
+    recorder.setState({'foo': 'unfoo'});
104
+
105
+    expect(listener1.args.length).toBe(1);
106
+    expect(JSON.stringify(listener1.args[0]))
107
+        .toEqual(JSON.stringify(
108
+            [{ foo: 'bar' },
109
+             { foo: 'hi' }]
110
+        ));
83 111
 
84
-    expect(JSON.stringify(listener.args[0]))
112
+    expect(listener2.args.length).toBe(2);
113
+    expect(JSON.stringify(listener2.args[0]))
85 114
         .toEqual(JSON.stringify(
86 115
             [{ foo: 'bar' },
87 116
              { foo: 'hi' }]
88 117
         ));
118
+    expect(JSON.stringify(listener2.args[1]))
119
+        .toEqual(JSON.stringify(
120
+            [{ foo: 'hi' },
121
+             { foo: 'unfoo' }]
122
+        ));
89 123
 });
90 124
 
91 125
 test("recording works", () => {