]> git.proxmox.com Git - extjs.git/blame - extjs/packages/core/test/specs/Evented.js
add extjs 6.0.1 sources
[extjs.git] / extjs / packages / core / test / specs / Evented.js
CommitLineData
6527f429
DM
1describe("Ext.Evented", function () {\r
2 function createSuite(mode) {\r
3 function getCls(cfg) {\r
4 var base;\r
5 cfg = cfg || {};\r
6\r
7 if (mode === 'extension') {\r
8 base = {\r
9 extend: "Ext.Evented",\r
10 eventedConfig: {\r
11 foo: 'foo'\r
12 }\r
13 }\r
14 } else {\r
15 base = {\r
16 extend: "Ext.mixin.Observable",\r
17 config: {\r
18 foo: {\r
19 $value: 'foo',\r
20 evented: true\r
21 }\r
22 }\r
23 }\r
24 }\r
25 Ext.merge(cfg, base);\r
26 return Ext.define(null, cfg);\r
27 }\r
28\r
29 describe("Evented Config via " + mode, function () {\r
30 describe("Getter/Setter", function () {\r
31 var Cls;\r
32 beforeEach(function () {\r
33 Cls = getCls();\r
34 });\r
35\r
36 it("getter should should return initial value", function () {\r
37 var cmp = Ext.create(Cls, {});\r
38 expect(cmp.getFoo()).toBe('foo');\r
39 });\r
40\r
41 it("getter should return value set by setter", function () {\r
42 var cmp = Ext.create(Cls, {});\r
43 cmp.setFoo('bar');\r
44 expect(cmp.getFoo()).toBe('bar');\r
45 })\r
46 });\r
47\r
48 describe("Config Lifecycle", function () {\r
49 var Cls;\r
50 beforeEach(function () {\r
51 var cfg = {\r
52 applyFoo: function (newValue, oldValue) {\r
53 return newValue;\r
54 },\r
55 updateFoo: function (newValue) {\r
56\r
57 }\r
58 };\r
59 Cls = getCls(cfg);\r
60 });\r
61\r
62 it("applier should be called with proper new and old values", function () {\r
63 var cmp = Ext.create(Cls, {});\r
64 spyOn(cmp, 'applyFoo');\r
65\r
66 cmp.setFoo('bar');\r
67 expect(cmp.applyFoo).toHaveBeenCalledWith('bar', 'foo');\r
68 });\r
69\r
70 it("updater should be called with proper new and old values", function () {\r
71 var cmp = Ext.create(Cls, {});\r
72 spyOn(cmp, 'updateFoo');\r
73\r
74 cmp.setFoo('bar');\r
75 expect(cmp.updateFoo).toHaveBeenCalledWith('bar', 'foo');\r
76 });\r
77\r
78 it("should run each lifecycle function once when set", function () {\r
79 var cmp = Ext.create(Cls, {});\r
80 spyOn(cmp, 'setFoo').andCallThrough();\r
81 spyOn(cmp, 'applyFoo').andCallThrough();\r
82 spyOn(cmp, 'updateFoo').andCallThrough();\r
83\r
84 cmp.setFoo('bar');\r
85\r
86 expect(cmp.setFoo.callCount).toEqual(1);\r
87 expect(cmp.applyFoo.callCount).toEqual(1);\r
88 expect(cmp.updateFoo.callCount).toEqual(1);\r
89\r
90 })\r
91 });\r
92\r
93 describe("Evented Events listeners via listener config", function () {\r
94 var Cls;\r
95 beforeEach(function () {\r
96 var cfg = {\r
97 listeners: {\r
98 foochange: 'onFooChange',\r
99 beforefoochange: 'onBeforeFooChange'\r
100 },\r
101 onFooChange: function (cmp, newValue, oldValue) {\r
102 },\r
103 onBeforeFooChange: function (cmp, newValue, oldValue) {\r
104 }\r
105 };\r
106 Cls = getCls(cfg);\r
107 });\r
108\r
109 it("setter should trigger change listener once with proper args and scope", function () {\r
110 var cmp = Ext.create(Cls, {});\r
111 spyOn(cmp, 'onFooChange');\r
112\r
113 cmp.setFoo('bar');\r
114\r
115 expect(cmp.onFooChange.callCount).toEqual(1);\r
116 expect(cmp.onFooChange.mostRecentCall.object).toBe(cmp);\r
117 expect(cmp.onFooChange.mostRecentCall.args[0]).toBe(cmp);\r
118 expect(cmp.onFooChange.mostRecentCall.args[1]).toBe('bar');\r
119 expect(cmp.onFooChange.mostRecentCall.args[2]).toBe('foo');\r
120 });\r
121\r
122 it("setter should trigger beforechange listener once with proper args and scope", function () {\r
123 var cmp = Ext.create(Cls, {});\r
124 spyOn(cmp, 'onBeforeFooChange');\r
125\r
126 cmp.setFoo('bar');\r
127\r
128 expect(cmp.onBeforeFooChange.callCount).toEqual(1);\r
129 expect(cmp.onBeforeFooChange.mostRecentCall.object).toBe(cmp);\r
130 expect(cmp.onBeforeFooChange.mostRecentCall.args[0]).toBe(cmp);\r
131 expect(cmp.onBeforeFooChange.mostRecentCall.args[1]).toBe('bar');\r
132 expect(cmp.onBeforeFooChange.mostRecentCall.args[2]).toBe('foo');\r
133 });\r
134\r
135 });\r
136\r
137 describe("Evented Event listeners via on with order options", function () {\r
138 it("setter should trigger beforechange, before change, change, after change in proper order", function () {\r
139 var Cls = getCls({}),\r
140 cmp = Ext.create(Cls, {}),\r
141 order = [];\r
142\r
143 cmp.on('beforefoochange', function () {\r
144 order.push(1)\r
145 });\r
146 cmp.on('foochange', function () {\r
147 order.push(2)\r
148 }, this, null, 'before');\r
149 cmp.on('foochange', function () {\r
150 order.push(3)\r
151 });\r
152 cmp.on('foochange', function () {\r
153 order.push(4)\r
154 }, this, null, 'after');\r
155 cmp.setFoo('bar');\r
156\r
157 expect(order).toEqual([1, 2, 3, 4]);\r
158 });\r
159 });\r
160\r
161 describe("Evented Event listeners via on, onBefore & onAfter", function () {\r
162 it("setter should trigger beforechange, before change, change, after change in proper order", function () {\r
163\r
164 var Cls = getCls({}),\r
165 cmp = Ext.create(Cls, {}),\r
166 order = [];\r
167\r
168 cmp.on('beforefoochange', function () {\r
169 order.push(1)\r
170 });\r
171 cmp.onBefore('foochange', function () {\r
172 order.push(2)\r
173 });\r
174 cmp.on('foochange', function () {\r
175 order.push(3)\r
176 });\r
177 cmp.onAfter('foochange', function () {\r
178 order.push(4)\r
179 });\r
180 cmp.setFoo('bar');\r
181\r
182 expect(order).toEqual([1, 2, 3, 4]);\r
183 });\r
184 });\r
185\r
186\r
187 describe("Evented config beforeChange Listener", function () {\r
188 it("beforeChange event should be given a controller as the 4th parameter with resume/pause functions", function () {\r
189 var cfg = {\r
190 listeners: {\r
191 beforefoochange: 'onBeforeFooChange'\r
192 },\r
193 onBeforeFooChange: function (cmp, newValue, oldValue, controller) {\r
194 },\r
195 updateFoo: function (newValue, oldValue) {\r
196 }\r
197 },\r
198 Cls = getCls(cfg),\r
199 cmp = Ext.create(Cls, {}),\r
200 controller, args;\r
201\r
202 spyOn(cmp, 'onBeforeFooChange');\r
203 cmp.setFoo('bar');\r
204\r
205 args = cmp.onBeforeFooChange.mostRecentCall.args;\r
206 expect(args.length).toBeGreaterThan(3);\r
207 controller = args[3];\r
208 expect(controller.pause).toBeDefined();\r
209 expect(controller.resume).toBeDefined();\r
210 });\r
211\r
212 it("controller pause should delay updater until resume is called", function (done) {\r
213 var cfg = {\r
214 listeners: {\r
215 beforefoochange: 'onBeforeFooChange'\r
216 },\r
217 onBeforeFooChange: function (cmp, newValue, oldValue, controller) {\r
218 controller.pause();\r
219 setTimeout(function () {\r
220 controller.resume();\r
221 expect(cmp.updateFoo.callCount).toBe(1);\r
222 done();\r
223 }, 500)\r
224 },\r
225 updateFoo: function (newValue, oldValue) {\r
226 }\r
227 },\r
228 Cls = getCls(cfg),\r
229 cmp = Ext.create(Cls, {});\r
230\r
231 spyOn(cmp, 'updateFoo');\r
232 cmp.setFoo('bar');\r
233 expect(cmp.updateFoo.callCount).toBe(0);\r
234 });\r
235 });\r
236 });\r
237 }\r
238 \r
239 createSuite('extension');\r
240 createSuite('metadata');\r
241});\r