1 $(document).ready(function () {
3 create = function (o) {
4 if (typeof Object.create === 'function') {
5 return Object.create(o);
11 module('list-events', {
13 openerp = window.openerp.init([]);
14 window.openerp.web.corelib(openerp);
15 window.openerp.web.coresetup(openerp);
16 window.openerp.web.chrome(openerp);
18 window.openerp.web.data(openerp);
19 window.openerp.web.views(openerp);
20 window.openerp.web.list(openerp);
23 test('Simple event triggering', function () {
24 var e = create(openerp.web.list.Events), passed = false;
25 e.bind('foo', function () { passed = true; });
29 test('Bind all', function () {
30 var e = create(openerp.web.list.Events), event = null;
31 e.bind(null, function (ev) { event = ev; });
33 strictEqual(event, 'foo');
35 test('Propagate trigger params', function () {
36 var e = create(openerp.web.list.Events), p = false;
37 e.bind(null, function (_, param) { p = param });
38 e.trigger('foo', true);
41 test('Bind multiple callbacks', function () {
42 var e = create(openerp.web.list.Events), count;
43 e.bind('foo', function () { count++; })
44 .bind('bar', function () { count++; })
45 .bind(null, function () { count++; })
46 .bind('foo', function () { count++; })
47 .bind(null, function () { count++; })
48 .bind(null, function () { count++; });
52 strictEqual(count, 5);
56 strictEqual(count, 4);
60 strictEqual(count, 3);
62 test('Mixin events', function () {
63 var cls = openerp.web.Class.extend({
64 method: function () { this.trigger('e'); }
66 cls.include(openerp.web.list.Events);
67 var instance = new cls, triggered = false;
69 instance.bind('e', function () { triggered = true; });
74 test('Unbind all handlers', function () {
75 var e = create(openerp.web.list.Events), passed = 0;
76 e.bind('foo', function () { passed++; });
78 strictEqual(passed, 1);
81 strictEqual(passed, 1);
83 test('Unbind one handler', function () {
84 var e = create(openerp.web.list.Events), p1 = 0, p2 = 0,
85 h1 = function () { p1++; }, h2 = function () { p2++; };
97 module('list-records', {
99 openerp = window.openerp.init([]);
100 window.openerp.web.corelib(openerp);
101 window.openerp.web.coresetup(openerp);
102 window.openerp.web.chrome(openerp);
103 // views loader stuff
104 window.openerp.web.data(openerp);
105 window.openerp.web.views(openerp);
106 window.openerp.web.list(openerp);
109 test('Basic record initialization', function () {
110 var r = new openerp.web.list.Record({qux: 3});
113 strictEqual(r.get('foo'), 1);
114 strictEqual(r.get('bar'), 2);
115 strictEqual(r.get('qux'), 3);
117 test('Change all the things', function () {
118 var r = new openerp.web.list.Record(), changed = false, field;
119 r.bind('change', function () { changed = true; });
120 r.bind(null, function (e) { field = field || e.split(':')[1]});
122 strictEqual(r.get('foo'), 1);
124 strictEqual(field, 'foo');
126 test('Change single field', function () {
127 var r = new openerp.web.list.Record(), changed = 0;
128 r.bind('change:foo', function () { changed++; });
131 strictEqual(r.get('foo'), 1);
132 strictEqual(r.get('bar'), 1);
133 strictEqual(changed, 1);
136 module('list-collections-degenerate', {
138 openerp = window.openerp.init([]);
139 window.openerp.web.corelib(openerp);
140 window.openerp.web.coresetup(openerp);
141 window.openerp.web.chrome(openerp);
142 // views loader stuff
143 window.openerp.web.data(openerp);
144 window.openerp.web.views(openerp);
145 window.openerp.web.list(openerp);
148 test('Fetch from collection', function () {
149 var c = new openerp.web.list.Collection();
150 strictEqual(c.length, 0);
151 c.add({id: 1, value: 2});
152 c.add({id: 2, value: 3});
153 c.add({id: 3, value: 5});
154 c.add({id: 4, value: 7});
155 strictEqual(c.length, 4);
156 var r = c.at(2), r2 = c.get(1);
158 ok(r instanceof openerp.web.list.Record);
159 strictEqual(r.get('id'), 3);
160 strictEqual(r.get('value'), 5);
162 ok(r2 instanceof openerp.web.list.Record);
163 strictEqual(r2.get('id'), 1);
164 strictEqual(r2.get('value'), 2);
166 test('Add at index', function () {
167 var c = new openerp.web.list.Collection([
172 strictEqual(c.at(1).get('value'), 10);
173 equal(c.at(3), undefined);
174 c.add({id:4, value: 55}, {at: 1});
175 strictEqual(c.at(1).get('value'), 55);
176 strictEqual(c.at(3).get('value'), 20);
178 test('Remove record', function () {
179 var c = new openerp.web.list.Collection([
184 var record = c.get(2);
185 strictEqual(c.length, 3);
187 strictEqual(c.length, 2);
188 equal(c.get(2), undefined);
189 strictEqual(c.at(1).get('value'), 20);
191 test('Remove unbind', function () {
193 c = new openerp.web.list.Collection([ {id: 1, value: 5} ]);
194 c.bind('change', function () { changed = true; });
195 var record = c.get(1);
197 record.set('value', 42);
198 ok(!changed, 'removed records should not trigger events in their ' +
199 'parent collection');
201 test('Reset', function () {
202 var event, obj, c = new openerp.web.list.Collection([
207 c.bind(null, function (e, instance) { event = e; obj = instance; });
209 strictEqual(c.length, 0);
210 strictEqual(event, 'reset');
217 c.reset([{id: 42, value: 55}]);
218 strictEqual(c.length, 1);
219 strictEqual(c.get(42).get('value'), 55);
221 test('Reset unbind', function () {
223 c = new openerp.web.list.Collection([ {id: 1, value: 5} ]);
224 c.bind('change', function () { changed = true; });
225 var record = c.get(1);
227 record.set('value', 42);
228 ok(!changed, 'removed records should not trigger events in their ' +
229 'parent collection');
232 test('Events propagation', function () {
234 var c = new openerp.web.list.Collection([
239 c.bind('change:value', function (e, record, value) {
242 c.get(1).set('value', 6);
243 c.get(2).set('value', 11);
244 c.get(3).set('value', 21);
245 deepEqual(values, [6, 11, 21]);
247 test('BTree', function () {
248 var root = new openerp.web.list.Collection(),
249 c = root.proxy('admin'),
251 c.add({id: 1, name: "Administrator", login: 'admin'});
252 c.add({id: 3, name: "Demo", login: 'demo'});
253 root.bind('change:wealth', function () {
254 total = (root.get(1).get('wealth') || 0) + (root.get(3).get('wealth') || 0);
257 strictEqual(total, 0);
258 c.at(0).set('wealth', 42);
259 strictEqual(total, 42);
260 c.at(1).set('wealth', 5);
261 strictEqual(total, 47);
264 module('list-hofs', {
266 openerp = window.openerp.init([]);
267 window.openerp.web.corelib(openerp);
268 window.openerp.web.coresetup(openerp);
269 window.openerp.web.chrome(openerp);
270 // views loader stuff
271 window.openerp.web.data(openerp);
272 window.openerp.web.views(openerp);
273 window.openerp.web.list(openerp);
276 test('each, degenerate', function () {
277 var c = new openerp.web.list.Collection([
282 c.each(function (record) {
283 ids.push(record.get('id'));
287 'degenerate collections should be iterated in record order');
289 test('each, deep', function () {
290 var root = new openerp.web.list.Collection(),
292 root.proxy('foo').add([
295 {id: 3, value: 20}]);
296 root.proxy('bar').add([
299 {id: 30, value: 20}]);
300 root.each(function (record) {
301 ids.push(record.get('id'));
303 // No contract on sub-collection iteration order (for now anyway)
304 ids.sort(function (a, b) { return a - b; });
306 ids, [1, 2, 3, 10, 20, 30],
307 'tree collections should be deeply iterated');
309 test('map, degenerate', function () {
310 var c = new openerp.web.list.Collection([
315 var ids = c.map(function (record) {
316 return record.get('id');
320 'degenerate collections should be iterated in record order');
322 test('map, deep', function () {
323 var root = new openerp.web.list.Collection();
324 root.proxy('foo').add([
327 {id: 3, value: 20}]);
328 root.proxy('bar').add([
331 {id: 30, value: 20}]);
332 var ids = root.map(function (record) {
333 return record.get('id');
335 // No contract on sub-collection iteration order (for now anyway)
336 ids.sort(function (a, b) { return a - b; });
338 ids, [1, 2, 3, 10, 20, 30],
339 'tree collections should be deeply iterated');
342 module("list-weirds", {
344 openerp = window.openerp.init([]);
345 window.openerp.web.corelib(openerp);
346 window.openerp.web.coresetup(openerp);
347 window.openerp.web.chrome(openerp);
348 // views loader stuff
349 window.openerp.web.data(openerp);
350 window.openerp.web.views(openerp);
351 window.openerp.web.list(openerp);
354 test('set-from-noid', function () {
355 var root = new openerp.web.list.Collection();
357 root.at(0).set('id', 42);
358 var record = root.get(42);
359 equal(root.length, 1);
360 equal(record.get('v'), 3, "should have fetched the original record");
362 test('set-from-previd', function () {
363 var root = new openerp.web.list.Collection();
364 root.add({id: 1, v: 2});
365 root.get(1).set('id', 42);
366 var record = root.get(42);
367 equal(root.length, 1);
368 equal(record.get('v'), 2, "should have fetched the original record");