blob: 5fb6e717ecac64dfe19ae23fab27c757d652d0e2 [file] [log] [blame]
Akronb7aab872021-11-04 17:11:04 +01001define(['state','state/manager'], function (stateClass, stateManagerClass) {
Akron308a6032019-12-05 16:27:34 +01002
3 describe('KorAP.State', function () {
4 it('should be initializable', function () {
5 let s = stateClass.create();
6 expect(s.get()).toBeFalsy();
7
8 s = stateClass.create(true);
9 expect(s.get()).toBeTruthy();
10 });
11
12 it('should be settable and gettable', function () {
13 let s = stateClass.create();
14 expect(s.get()).toBeFalsy();
15 s.set(true);
16 expect(s.get()).toBeTruthy();
17 });
18
Akron72c1c9d2021-11-05 10:46:34 +010019 it('should accept a default value', function () {
20 let s = stateClass.create([true, false]);
21 expect(s.get()).toBeTruthy();
22 s.set(false);
23 expect(s.get()).toBeFalsy();
24
25 s = stateClass.create([true, false]);
26 s.setIfNotYet(false);
27 expect(s.get()).toBeFalsy();
28
29 s.setIfNotYet(true);
30 expect(s.get()).toBeFalsy();
31 });
32
Akron308a6032019-12-05 16:27:34 +010033 it('should be associatable', function () {
34 let s = stateClass.create();
35
36 // Create
37 let obj1 = {
38 x : false,
39 setState : function (value) {
40 this.x = value;
41 }
42 };
43
44 // Create
45 let obj2 = {
46 x : true,
47 setState : function (value) {
48 this.x = value;
49 }
50 };
Akronb69cbf12020-10-01 13:04:44 +020051
52 expect(s.associates()).toEqual(0);
Akron308a6032019-12-05 16:27:34 +010053 expect(s.get()).toBeFalsy();
54 expect(obj1.x).toBeFalsy();
55 expect(obj2.x).toBeTruthy();
56
57 // Associate object with state
58 s.associate(obj1);
Akronb69cbf12020-10-01 13:04:44 +020059 expect(s.associates()).toEqual(1);
Akron308a6032019-12-05 16:27:34 +010060 s.associate(obj2);
Akronb69cbf12020-10-01 13:04:44 +020061 expect(s.associates()).toEqual(2);
Akron308a6032019-12-05 16:27:34 +010062
63 expect(s.get()).toBeFalsy();
64 expect(obj1.x).toBeFalsy();
65 expect(obj2.x).toBeFalsy();
66
67 s.set(true);
68
69 expect(s.get()).toBeTruthy();
70 expect(obj1.x).toBeTruthy();
71 expect(obj2.x).toBeTruthy();
72 });
Akron38ed5dc2020-10-01 17:33:00 +020073
74 it('should be clearable', function () {
75 let s = stateClass.create();
76
77 // Create
78 let obj1 = {
79 x : false,
80 setState : function (value) {
81 this.x = value;
82 }
83 };
84
85 // Create
86 let obj2 = {
87 x : true,
88 setState : function (value) {
89 this.x = value;
90 }
91 };
92
93 expect(s.associates()).toEqual(0);
94 expect(s.get()).toBeFalsy();
95 expect(obj1.x).toBeFalsy();
96 expect(obj2.x).toBeTruthy();
97
98 // Associate object with state
99 s.associate(obj1);
100 expect(s.associates()).toEqual(1);
101 s.associate(obj2);
102 expect(s.associates()).toEqual(2);
103
104 expect(s.get()).toBeFalsy();
105 expect(obj1.x).toBeFalsy();
106 expect(obj2.x).toBeFalsy();
107
108 s.clear();
109
110 s.set(true);
111 expect(s.get()).toBeTruthy();
112 expect(obj1.x).toBeFalsy();
113 expect(obj2.x).toBeFalsy();
114
115 s.set(false);
116 expect(s.get()).toBeFalsy();
117 expect(obj1.x).toBeFalsy();
118 expect(obj2.x).toBeFalsy();
119 });
Akron237abc42020-10-07 14:14:52 +0200120
121 it('should roll', function () {
122 let s = stateClass.create(['der','alte','mann']);
123
124 expect(s.get()).toEqual('der');
125 s.roll();
126 expect(s.get()).toEqual('alte');
127 s.roll();
128 expect(s.get()).toEqual('mann');
129 s.roll();
130 expect(s.get()).toEqual('der');
131 s.roll();
132 expect(s.get()).toEqual('alte');
133
134 s.set('alte');
135 expect(s.get()).toEqual('alte');
136 s.roll();
137 expect(s.get()).toEqual('mann');
138 });
Akron308a6032019-12-05 16:27:34 +0100139 });
Akronb7aab872021-11-04 17:11:04 +0100140
141 describe('KorAP.State.Manager', function () {
142
Akronb7aab872021-11-04 17:11:04 +0100143 it('should be initializable', function () {
144
Akron25cd9282021-11-22 16:50:27 +0100145 const el = document.createElement('input');
Akronb7aab872021-11-04 17:11:04 +0100146 let sm = stateManagerClass.create(el);
147 expect(sm).toBeTruthy();
148
Akron25cd9282021-11-22 16:50:27 +0100149 expect(sm.toString()).toEqual("");
Akronb7aab872021-11-04 17:11:04 +0100150 });
151
152
153 it('should be extensible', function () {
Akron25cd9282021-11-22 16:50:27 +0100154
155 const el = document.createElement('input');
Akronb7aab872021-11-04 17:11:04 +0100156 const sm = stateManagerClass.create(el);
157 expect(sm).toBeTruthy();
158
159 const s1 = sm.newState('test', [1,2,3]);
160
Akron25cd9282021-11-22 16:50:27 +0100161 expect(sm.toString()).toEqual("");
Akronb7aab872021-11-04 17:11:04 +0100162
163 s1.set(2);
164
Akron25cd9282021-11-22 16:50:27 +0100165 expect(sm.toString()).toEqual("\"test\":2");
Akronb7aab872021-11-04 17:11:04 +0100166
167 s1.set(3);
168
Akron25cd9282021-11-22 16:50:27 +0100169 expect(sm.toString()).toEqual("\"test\":3");
Akronb7aab872021-11-04 17:11:04 +0100170
171 const s2 = sm.newState('glemm', [true,false]);
172
Akron25cd9282021-11-22 16:50:27 +0100173 let serial = JSON.parse('{' + sm.toString() + '}');
Akronb7aab872021-11-04 17:11:04 +0100174 expect(serial["test"]).toEqual(3);
175 expect(serial["glemm"]).toBeUndefined();
176
177 s2.set(false);
178
Akron25cd9282021-11-22 16:50:27 +0100179 serial = JSON.parse('{' + sm.toString() + '}');
Akronb7aab872021-11-04 17:11:04 +0100180 expect(serial["test"]).toEqual(3);
181 expect(serial["glemm"]).toEqual(false);
182 });
Akron25cd9282021-11-22 16:50:27 +0100183
184
185 it('should serialize correctly', function () {
186 const el = document.createElement('input');
187 const sm = stateManagerClass.create(el);
188 expect(sm).toBeTruthy();
189
190 const s1 = sm.newState('x', [1,2,3]);
191
192 expect(sm.toString()).toEqual("");
193
194 s1.set(2);
195
196 expect(sm.toString()).toEqual("\"x\":2");
197
198 const s2 = sm.newState('y', [true,false]);
199 s2.set(false)
200
201 const s3 = sm.newState('z', ['a','b','c']);
202 s3.set('b')
203
204 expect(sm.toString().indexOf("\"x\":2")).not.toEqual(-1);
205 expect(sm.toString().indexOf("\"y\":false")).not.toEqual(-1);
206 expect(sm.toString().indexOf("\"z\":\"b\"")).not.toEqual(-1);
207 expect(sm.toString().indexOf("\"a\":\"d\"")).toEqual(-1);
208 });
Akronb7aab872021-11-04 17:11:04 +0100209 });
Akron308a6032019-12-05 16:27:34 +0100210});