Subversion Repositories Applications.papyrus

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2150 mathias 1
if(!dojo._hasResource["dojox.data.tests.stores.XmlStore"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
2
dojo._hasResource["dojox.data.tests.stores.XmlStore"] = true;
3
dojo.provide("dojox.data.tests.stores.XmlStore");
4
dojo.require("dojox.data.XmlStore");
5
dojo.require("dojo.data.api.Read");
6
dojo.require("dojo.data.api.Write");
7
 
8
 
9
dojox.data.tests.stores.XmlStore.getBooks2Store = function(){
10
	return new dojox.data.XmlStore({url: dojo.moduleUrl("dojox.data.tests", "stores/books2.xml").toString(), label: "title"});
11
};
12
 
13
dojox.data.tests.stores.XmlStore.getBooksStore = function(){
14
	return new dojox.data.XmlStore({url: dojo.moduleUrl("dojox.data.tests", "stores/books.xml").toString(), label: "title"});
15
};
16
 
17
doh.register("dojox.data.tests.stores.XmlStore",
18
	[
19
		function testReadAPI_fetch_all(t){
20
			//	summary:
21
			//		Simple test of fetching all xml items through an XML element called isbn
22
			//	description:
23
			//		Simple test of fetching all xml items through an XML element called isbn
24
			var store = dojox.data.tests.stores.XmlStore.getBooksStore();
25
 
26
			var d = new doh.Deferred();
27
			function onComplete(items, request) {
28
				t.assertEqual(20, items.length);
29
				d.callback(true);
30
			}
31
			function onError(error, request) {
32
				d.errback(error);
33
			}
34
			store.fetch({query:{isbn:"*"}, onComplete: onComplete, onError: onError});
35
			return d; //Object
36
		},
37
		function testReadAPI_fetch_one(t){
38
			//	summary:
39
			//		Simple test of fetching one xml items through an XML element called isbn
40
			//	description:
41
			//		Simple test of fetching one xml items through an XML element called isbn
42
			var store = dojox.data.tests.stores.XmlStore.getBooks2Store();
43
 
44
			var d = new doh.Deferred();
45
			function onComplete(items, request) {
46
				t.assertEqual(1, items.length);
47
				d.callback(true);
48
			}
49
			function onError(error, request) {
50
				d.errback(error);
51
			}
52
			store.fetch({query:{isbn:"A9B574"}, onComplete: onComplete, onError: onError});
53
			return d; //Object
54
		},
55
		{
56
			name: "testReadAPI_fetch_paging",
57
			timeout: 10000,
58
			runTest: function(t){
59
				//	summary:
60
				//		Simple test of fetching one xml items through an XML element called isbn
61
				//	description:
62
				//		Simple test of fetching one xml items through an XML element called isbn
63
				var store = dojox.data.tests.stores.XmlStore.getBooksStore();
64
				var d = new doh.Deferred();
65
				function dumpFirstFetch(items, request){
66
					t.assertEqual(5, items.length);
67
					request.start = 3;
68
					request.count = 1;
69
					request.onComplete = dumpSecondFetch;
70
					store.fetch(request);
71
				}
72
 
73
				function dumpSecondFetch(items, request){
74
					t.assertEqual(1, items.length);
75
					request.start = 0;
76
					request.count = 5;
77
					request.onComplete = dumpThirdFetch;
78
					store.fetch(request);
79
				}
80
 
81
				function dumpThirdFetch(items, request){
82
					t.assertEqual(5, items.length);
83
					request.start = 2;
84
					request.count = 20;
85
					request.onComplete = dumpFourthFetch;
86
					store.fetch(request);
87
				 }
88
 
89
				function dumpFourthFetch(items, request){
90
					t.assertEqual(18, items.length);
91
					request.start = 9;
92
					request.count = 100;
93
					request.onComplete = dumpFifthFetch;
94
					store.fetch(request);
95
				}
96
 
97
				function dumpFifthFetch(items, request){
98
					t.assertEqual(11, items.length);
99
					request.start = 2;
100
					request.count = 20;
101
					request.onComplete = dumpSixthFetch;
102
					store.fetch(request);
103
				}
104
 
105
				function dumpSixthFetch(items, request){
106
					t.assertEqual(18, items.length);
107
					d.callback(true);
108
				}
109
 
110
				function completed(items, request){
111
					t.assertEqual(20, items.length);
112
					request.start = 1;
113
					request.count = 5;
114
					request.onComplete = dumpFirstFetch;
115
					store.fetch(request);
116
				}
117
 
118
				function error(errData, request){
119
					 d.errback(errData);
120
				}
121
 
122
				store.fetch({onComplete: completed, onError: error});
123
				return d; //Object
124
			}
125
		},
126
		function testReadAPI_fetch_pattern0(t){
127
			//	summary:
128
			//		Simple test of fetching one xml items through an XML element called isbn with ? pattern match
129
			//	description:
130
			//		Simple test of fetching one xml items through an XML element called isbn with ? pattern match
131
			var store = dojox.data.tests.stores.XmlStore.getBooks2Store();
132
			var d = new doh.Deferred();
133
			function onComplete(items, request) {
134
				t.assertEqual(1, items.length);
135
				d.callback(true);
136
			}
137
			function onError(error, request) {
138
				d.errback(error);
139
			}
140
			store.fetch({query:{isbn:"?9B574"}, onComplete: onComplete, onError: onError});
141
			return d; //Object
142
		},
143
		function testReadAPI_fetch_pattern1(t){
144
			//	summary:
145
			//		Simple test of fetching one xml items through an XML element called isbn with ? pattern match
146
			//	description:
147
			//		Simple test of fetching one xml items through an XML element called isbn with ? pattern match
148
			var store = dojox.data.tests.stores.XmlStore.getBooks2Store();
149
			var d = new doh.Deferred();
150
			function onComplete(items, request) {
151
				t.assertEqual(4, items.length);
152
				d.callback(true);
153
			}
154
			function onError(error, request) {
155
				d.errback(error);
156
			}
157
			store.fetch({query:{isbn:"A9B57?"}, onComplete: onComplete, onError: onError});
158
			return d; //Object
159
		},
160
		function testReadAPI_fetch_pattern2(t){
161
			//	summary:
162
			//		Simple test of fetching one xml items through an XML element called isbn with * pattern match
163
			//	description:
164
			//		Simple test of fetching one xml items through an XML element called isbn with * pattern match
165
			var store = dojox.data.tests.stores.XmlStore.getBooks2Store();
166
			var d = new doh.Deferred();
167
			function onComplete(items, request) {
168
				t.assertEqual(5, items.length);
169
				d.callback(true);
170
			}
171
			function onError(error, request) {
172
				d.errback(error);
173
			}
174
			store.fetch({query:{isbn:"A9*"}, onComplete: onComplete, onError: onError});
175
			return d; //Object
176
		},
177
		function testReadAPI_fetch_pattern_caseInsensitive(t){
178
			//	summary:
179
			//		Simple test of fetching one xml items through an XML element called isbn with ? pattern match and in case insensitive mode.
180
			//	description:
181
			//		Simple test of fetching one xml items through an XML element called isbn with ? pattern match and in case insensitive mode.
182
			var store = dojox.data.tests.stores.XmlStore.getBooks2Store();
183
			var d = new doh.Deferred();
184
			function onComplete(items, request) {
185
				t.assertEqual(1, items.length);
186
				d.callback(true);
187
			}
188
			function onError(error, request) {
189
				d.errback(error);
190
			}
191
			store.fetch({query:{isbn:"?9b574"}, queryOptions: {ignoreCase: true}, onComplete: onComplete, onError: onError});
192
			return d; //Object
193
		},
194
		function testReadAPI_fetch_pattern_caseSensitive(t){
195
			//	summary:
196
			//		Simple test of fetching one xml items through an XML element called isbn with ? pattern match and in case sensitive mode.
197
			//	description:
198
			//		Simple test of fetching one xml items through an XML element called isbn with ? pattern match and in case sensitive mode.
199
			var store = dojox.data.tests.stores.XmlStore.getBooks2Store();
200
			var d = new doh.Deferred();
201
			function onComplete(items, request) {
202
				t.assertEqual(1, items.length);
203
				d.callback(true);
204
			}
205
			function onError(error, request) {
206
				d.errback(error);
207
			}
208
			store.fetch({query:{isbn:"?9B574"}, queryOptions: {ignoreCase: false}, onComplete: onComplete, onError: onError});
209
			return d; //Object
210
		},
211
		function testReadAPI_fetch_all_rootItem(t){
212
			//	summary:
213
			//		Simple test of fetching all xml items through an XML element called isbn
214
			//	description:
215
			//		Simple test of fetching all xml items through an XML element called isbn
216
			var store = new dojox.data.XmlStore({url: dojo.moduleUrl("dojox.data.tests", "stores/books3.xml").toString(),
217
				rootItem:"book"});
218
 
219
			var d = new doh.Deferred();
220
			function onComplete(items, request) {
221
				t.assertEqual(5, items.length);
222
				d.callback(true);
223
			}
224
			function onError(error, request) {
225
				d.errback(error);
226
			}
227
			store.fetch({query:{isbn:"*"}, onComplete: onComplete, onError: onError});
228
			return d; //Object
229
		},
230
		function testReadAPI_fetch_withAttrMap_all(t){
231
			var store = new dojox.data.XmlStore({url: dojo.moduleUrl("dojox.data.tests", "stores/books_isbnAttr.xml").toString(),
232
				attributeMap: {"book.isbn": "@isbn"}});
233
 
234
			var d = new doh.Deferred();
235
			function onComplete(items, request) {
236
				t.assertEqual(5, items.length);
237
				d.callback(true);
238
			}
239
			function onError(error, request) {
240
				console.debug(error);
241
				d.errback(error);
242
			}
243
			store.fetch({query:{isbn:"*"}, onComplete: onComplete, onError: onError});
244
			return d; //Object
245
		},
246
		function testReadAPI_fetch_withAttrMap_one(t){
247
			var store = new dojox.data.XmlStore({url: dojo.moduleUrl("dojox.data.tests", "stores/books_isbnAttr.xml").toString(),
248
				attributeMap: {"book.isbn": "@isbn"}});
249
 
250
			var d = new doh.Deferred();
251
			function onComplete(items, request) {
252
				t.assertEqual(1, items.length);
253
				d.callback(true);
254
			}
255
			function onError(error, request) {
256
				console.debug(error);
257
				d.errback(error);
258
			}
259
			store.fetch({query:{isbn:"2"}, onComplete: onComplete, onError: onError});
260
			return d; //Object
261
		},
262
		function testReadAPI_fetch_withAttrMap_pattern0(t){
263
			//	summary:
264
			//		Simple test of fetching one xml items through an XML element called isbn with ? pattern match
265
			//	description:
266
			//		Simple test of fetching one xml items through an XML element called isbn with ? pattern match
267
			var store = new dojox.data.XmlStore({url: dojo.moduleUrl("dojox.data.tests", "stores/books_isbnAttr2.xml").toString(),
268
				attributeMap: {"book.isbn": "@isbn"}});
269
			var d = new doh.Deferred();
270
			function onComplete(items, request) {
271
				t.assertEqual(3, items.length);
272
				d.callback(true);
273
			}
274
			function onError(error, request) {
275
				d.errback(error);
276
			}
277
			store.fetch({query:{isbn:"ABC?"}, onComplete: onComplete, onError: onError});
278
			return d; //Object
279
		},
280
		function testReadAPI_fetch_withAttrMap_pattern1(t){
281
			//	summary:
282
			//		Simple test of fetching one xml items through an XML element called isbn with ? pattern match
283
			//	description:
284
			//		Simple test of fetching one xml items through an XML element called isbn with ? pattern match
285
			var store = new dojox.data.XmlStore({url: dojo.moduleUrl("dojox.data.tests", "stores/books_isbnAttr2.xml").toString(),
286
				attributeMap: {"book.isbn": "@isbn"}});
287
			var d = new doh.Deferred();
288
			function onComplete(items, request) {
289
				t.assertEqual(5, items.length);
290
				d.callback(true);
291
			}
292
			function onError(error, request) {
293
				d.errback(error);
294
			}
295
			store.fetch({query:{isbn:"A*"}, onComplete: onComplete, onError: onError});
296
			return d; //Object
297
		},
298
		function testReadAPI_fetch_withAttrMap_pattern2(t){
299
			//	summary:
300
			//		Simple test of fetching one xml items through an XML element called isbn with ? pattern match
301
			//	description:
302
			//		Simple test of fetching one xml items through an XML element called isbn with ? pattern match
303
			var store = new dojox.data.XmlStore({url: dojo.moduleUrl("dojox.data.tests", "stores/books_isbnAttr2.xml").toString(),
304
				attributeMap: {"book.isbn": "@isbn"}});
305
			var d = new doh.Deferred();
306
			function onComplete(items, request) {
307
				t.assertEqual(2, items.length);
308
				d.callback(true);
309
			}
310
			function onError(error, request) {
311
				d.errback(error);
312
			}
313
			store.fetch({query:{isbn:"?C*"}, onComplete: onComplete, onError: onError});
314
			return d; //Object
315
		},
316
 
317
		function testReadAPI_getLabel(t){
318
			//	summary:
319
			//		Simple test of the getLabel function against a store set that has a label defined.
320
			//	description:
321
			//		Simple test of the getLabel function against a store set that has a label defined.
322
 
323
			var store = dojox.data.tests.stores.XmlStore.getBooks2Store();
324
 
325
			var d = new doh.Deferred();
326
			function onComplete(items, request){
327
				t.assertEqual(items.length, 1);
328
				var label = store.getLabel(items[0]);
329
				t.assertTrue(label !== null);
330
				t.assertEqual("Title of 4", label);
331
				d.callback(true);
332
			}
333
			function onError(error, request) {
334
				d.errback(error);
335
			}
336
			store.fetch({query:{isbn:"A9B574"}, onComplete: onComplete, onError: onError});
337
			return d;
338
		},
339
		function testReadAPI_getLabelAttributes(t){
340
			//	summary:
341
			//		Simple test of the getLabelAttributes function against a store set that has a label defined.
342
			//	description:
343
			//		Simple test of the getLabelAttributes function against a store set that has a label defined.
344
 
345
			var store = dojox.data.tests.stores.XmlStore.getBooks2Store();
346
 
347
			var d = new doh.Deferred();
348
			function onComplete(items, request){
349
				t.assertEqual(items.length, 1);
350
				var labelList = store.getLabelAttributes(items[0]);
351
				t.assertTrue(dojo.isArray(labelList));
352
				t.assertEqual("title", labelList[0]);
353
				d.callback(true);
354
			}
355
			function onError(error, request) {
356
				d.errback(error);
357
			}
358
			store.fetch({query:{isbn:"A9B574"}, onComplete: onComplete, onError: onError});
359
			return d;
360
		},
361
 
362
		function testReadAPI_getValue(t){
363
			 //	summary:
364
			 //		Simple test of the getValue API
365
			 //	description:
366
			 //		Simple test of the getValue API
367
			 var store = dojox.data.tests.stores.XmlStore.getBooks2Store();
368
 
369
			 var d = new doh.Deferred();
370
			 function onComplete(items, request) {
371
				 t.assertEqual(1, items.length);
372
				 var item = items[0];
373
				 t.assertTrue(store.hasAttribute(item,"isbn"));
374
				 t.assertEqual(store.getValue(item,"isbn"), "A9B574");
375
				 d.callback(true);
376
			 }
377
			 function onError(error, request) {
378
				 d.errback(error);
379
			 }
380
			 store.fetch({query:{isbn:"A9B574"}, onComplete: onComplete, onError: onError});
381
			 return d; //Object
382
		},
383
		function testReadAPI_getValues(t){
384
			 //	summary:
385
			 //		Simple test of the getValues API
386
			 //	description:
387
			 //		Simple test of the getValues API
388
			 var store = dojox.data.tests.stores.XmlStore.getBooks2Store();
389
 
390
			 var d = new doh.Deferred();
391
			 function onComplete(items, request) {
392
				 t.assertEqual(1, items.length);
393
				 var item = items[0];
394
				 t.assertTrue(store.hasAttribute(item,"isbn"));
395
				 var values = store.getValues(item,"isbn");
396
				 t.assertEqual(1,values.length);
397
				 t.assertEqual("A9B574", values[0]);
398
				 d.callback(true);
399
			 }
400
			 function onError(error, request) {
401
				 d.errback(error);
402
			 }
403
			 store.fetch({query:{isbn:"A9B574"}, onComplete: onComplete, onError: onError});
404
			 return d; //Object
405
		},
406
		function testReadAPI_isItem(t){
407
			 //	summary:
408
			 //		Simple test of the isItem API
409
			 //	description:
410
			 //		Simple test of the isItem API
411
			 var store = dojox.data.tests.stores.XmlStore.getBooks2Store();
412
 
413
			 var d = new doh.Deferred();
414
			 function onComplete(items, request) {
415
				t.assertEqual(1, items.length);
416
				var item = items[0];
417
				t.assertTrue(store.isItem(item));
418
				t.assertTrue(!store.isItem({}));
419
				t.assertTrue(!store.isItem("Foo"));
420
				t.assertTrue(!store.isItem(1));
421
				d.callback(true);
422
			 }
423
			 function onError(error, request) {
424
				 d.errback(error);
425
			 }
426
			 store.fetch({query:{isbn:"A9B574"}, onComplete: onComplete, onError: onError});
427
			 return d; //Object
428
		},
429
		function testReadAPI_isItem_multistore(t){
430
			//	summary:
431
			//		Simple test of the isItem API across multiple store instances.
432
			//	description:
433
			//		Simple test of the isItem API across multiple store instances.
434
			var store1 = dojox.data.tests.stores.XmlStore.getBooks2Store();
435
			var store2 = dojox.data.tests.stores.XmlStore.getBooks2Store();
436
 
437
			var d = new doh.Deferred();
438
			function onComplete1(items, request) {
439
				t.assertEqual(1, items.length);
440
				var item1 = items[0];
441
				t.assertTrue(store1.isItem(item1));
442
 
443
				function onComplete2(items, request) {
444
					t.assertEqual(1, items.length);
445
					var item2 = items[0];
446
					t.assertTrue(store2.isItem(item2));
447
					t.assertTrue(!store1.isItem(item2));
448
					t.assertTrue(!store2.isItem(item1));
449
					d.callback(true);
450
				}
451
				store2.fetch({query:{isbn:"A9B574"}, onComplete: onComplete2, onError: onError});
452
			}
453
			function onError(error, request) {
454
				d.errback(error);
455
			}
456
			store1.fetch({query:{isbn:"A9B574"}, onComplete: onComplete1, onError: onError});
457
			return d; //Object
458
		},
459
		function testReadAPI_hasAttribute(t){
460
			//	summary:
461
			//		Simple test of the hasAttribute API
462
			//	description:
463
			//		Simple test of the hasAttribute API
464
			var store = dojox.data.tests.stores.XmlStore.getBooks2Store();
465
 
466
			var d = new doh.Deferred();
467
			function onComplete(items, request) {
468
				t.assertEqual(1, items.length);
469
				var item = items[0];
470
				t.assertTrue(store.hasAttribute(item,"isbn"));
471
				t.assertTrue(!store.hasAttribute(item,"bob"));
472
				d.callback(true);
473
			}
474
			function onError(error, request) {
475
				d.errback(error);
476
			}
477
			store.fetch({query:{isbn:"A9B574"}, onComplete: onComplete, onError: onError});
478
			return d; //Object
479
		},
480
		function testReadAPI_containsValue(t){
481
			//	summary:
482
			//		Simple test of the containsValue API
483
			//	description:
484
			//		Simple test of the containsValue API
485
			var store = dojox.data.tests.stores.XmlStore.getBooks2Store();
486
 
487
			var d = new doh.Deferred();
488
			function onComplete(items, request) {
489
				t.assertEqual(1, items.length);
490
				var item = items[0];
491
				t.assertTrue(store.containsValue(item,"isbn", "A9B574"));
492
				t.assertTrue(!store.containsValue(item,"isbn", "bob"));
493
				d.callback(true);
494
			}
495
			function onError(error, request) {
496
				d.errback(error);
497
			}
498
			store.fetch({query:{isbn:"A9B574"}, onComplete: onComplete, onError: onError});
499
			return d; //Object
500
		},
501
		function testReadAPI_sortDescending(t){
502
			//	summary:
503
			//		Simple test of the sorting API in descending order.
504
			//	description:
505
			//		Simple test of the sorting API in descending order.
506
			var store = dojox.data.tests.stores.XmlStore.getBooksStore();
507
 
508
			//Comparison is done as a string type (toString comparison), so the order won't be numeric
509
			//So have to compare in 'alphabetic' order.
510
			var order = [9,8,7,6,5,4,3,20,2,19,18,17,16,15,14,13,12,11,10,1];
511
 
512
			var d = new doh.Deferred();
513
			function onComplete(items, request) {
514
				console.log("Number of items: " + items.length);
515
				t.assertEqual(20, items.length);
516
 
517
				for(var i = 0; i < items.length; i++){
518
					t.assertEqual(order[i], store.getValue(items[i],"isbn").toString());
519
				}
520
				d.callback(true);
521
			}
522
			function onError(error, request) {
523
				d.errback(error);
524
			}
525
 
526
			var sortAttributes = [{attribute: "isbn", descending: true}];
527
			store.fetch({query:{isbn:"*"}, sort: sortAttributes, onComplete: onComplete, onError: onError});
528
			return d; //Object
529
		},
530
		function testReadAPI_sortAscending(t){
531
			//	summary:
532
			//		Simple test of the sorting API in ascending order.
533
			//	description:
534
			//		Simple test of the sorting API in ascending order.
535
			var store = dojox.data.tests.stores.XmlStore.getBooksStore();
536
 
537
			//Comparison is done as a string type (toString comparison), so the order won't be numeric
538
			//So have to compare in 'alphabetic' order.
539
			var order = [1,10,11,12,13,14,15,16,17,18,19,2,20,3,4,5,6,7,8,9];
540
 
541
			var d = new doh.Deferred();
542
			function onComplete(items, request) {
543
				t.assertEqual(20, items.length);
544
				var itemId = 1;
545
				for(var i = 0; i < items.length; i++){
546
					t.assertEqual(order[i], store.getValue(items[i],"isbn").toString());
547
				}
548
				d.callback(true);
549
			}
550
			function onError(error, request) {
551
				d.errback(error);
552
			}
553
 
554
			var sortAttributes = [{attribute: "isbn"}];
555
			store.fetch({query:{isbn:"*"}, sort: sortAttributes, onComplete: onComplete, onError: onError});
556
			return d; //Object
557
		},
558
		function testReadAPI_sortDescendingNumeric(t){
559
			//	summary:
560
			//		Simple test of the sorting API in descending order using a numeric comparator.
561
			//	description:
562
			//		Simple test of the sorting API in descending order using a numeric comparator.
563
			var store = dojox.data.tests.stores.XmlStore.getBooksStore();
564
 
565
			//isbn should be treated as a numeric, not as a string comparison
566
			store.comparatorMap = {};
567
			store.comparatorMap["isbn"] = function(a, b){
568
				var ret = 0;
569
				if(parseInt(a.toString()) > parseInt(b.toString())){
570
					ret = 1;
571
				}else if(parseInt(a.toString()) < parseInt(b.toString())){
572
					ret = -1;
573
				}
574
				return ret; //int, {-1,0,1}
575
			};
576
 
577
			var d = new doh.Deferred();
578
			function onComplete(items, request) {
579
                		t.assertEqual(20, items.length);
580
                		var itemId = 20;
581
				for(var i = 0; i < items.length; i++){
582
					t.assertEqual(itemId, store.getValue(items[i],"isbn").toString());
583
					itemId--;
584
				}
585
				d.callback(true);
586
			}
587
			function onError(error, request) {
588
				d.errback(error);
589
			}
590
 
591
			var sortAttributes = [{attribute: "isbn", descending: true}];
592
			store.fetch({query:{isbn:"*"}, sort: sortAttributes, onComplete: onComplete, onError: onError});
593
			return d; //Object
594
		},
595
		function testReadAPI_sortAscendingNumeric(t){
596
			//	summary:
597
			//		Simple test of the sorting API in ascending order using a numeric comparator.
598
			//	description:
599
			//		Simple test of the sorting API in ascending order using a numeric comparator.
600
			var store = dojox.data.tests.stores.XmlStore.getBooksStore();
601
 
602
			//isbn should be treated as a numeric, not as a string comparison
603
			store.comparatorMap = {};
604
			store.comparatorMap["isbn"] = function(a, b){
605
				var ret = 0;
606
				if(parseInt(a.toString()) > parseInt(b.toString())){
607
					ret = 1;
608
				}else if(parseInt(a.toString()) < parseInt(b.toString())){
609
					ret = -1;
610
				}
611
				return ret; //int, {-1,0,1}
612
			};
613
 
614
			var d = new doh.Deferred();
615
			function onComplete(items, request) {
616
				t.assertEqual(20, items.length);
617
				var itemId = 1;
618
				for(var i = 0; i < items.length; i++){
619
					t.assertEqual(itemId, store.getValue(items[i],"isbn").toString());
620
					itemId++;
621
				}
622
				d.callback(true);
623
			}
624
			function onError(error, request) {
625
				d.errback(error);
626
			}
627
 
628
			var sortAttributes = [{attribute: "isbn"}];
629
			store.fetch({query:{isbn:"*"}, sort: sortAttributes, onComplete: onComplete, onError: onError});
630
			return d; //Object
631
		},
632
		function testReadAPI_isItemLoaded(t){
633
			//	summary:
634
			//		Simple test of the isItemLoaded API
635
			//	description:
636
			//		Simple test of the isItemLoaded API
637
			var store = dojox.data.tests.stores.XmlStore.getBooks2Store();
638
 
639
			var d = new doh.Deferred();
640
			function onComplete(items, request) {
641
				t.assertEqual(1, items.length);
642
				var item = items[0];
643
				t.assertTrue(store.isItemLoaded(item));
644
				d.callback(true);
645
			}
646
			function onError(error, request) {
647
				d.errback(error);
648
			}
649
			store.fetch({query:{isbn:"A9B574"}, onComplete: onComplete, onError: onError});
650
			return d; //Object
651
		},
652
		function testReadAPI_getFeatures(t){
653
			//	summary:
654
			//		Simple test of the getFeatures function of the store
655
			//	description:
656
			//		Simple test of the getFeatures function of the store
657
 
658
			var store = dojox.data.tests.stores.XmlStore.getBooks2Store();
659
			var features = store.getFeatures();
660
			var count = 0;
661
			for(i in features){
662
				t.assertTrue((i === "dojo.data.api.Read" || i === "dojo.data.api.Write"));
663
				count++;
664
			}
665
			t.assertEqual(2, count);
666
		},
667
		function testReadAPI_getAttributes(t){
668
			//	summary:
669
			//		Simple test of the getAttributes API
670
			//	description:
671
			//		Simple test of the getAttributes API
672
			var store = dojox.data.tests.stores.XmlStore.getBooks2Store();
673
 
674
			var d = new doh.Deferred();
675
			function onComplete(items, request) {
676
				t.assertEqual(1, items.length);
677
				var item = items[0];
678
				var attributes = store.getAttributes(item);
679
 
680
				//Should be six, as all items should have tagName, childNodes, and text() special attributes
681
				//in addition to any doc defined ones, which in this case are author, title, and isbn
682
				//FIXME:  Figure out why IE returns 5!  Need to get firebug lite working in IE for that.
683
				//Suspect it's childNodes, may not be defined if there are no child nodes.
684
				for(var i = 0; i < attributes.length; i++){
685
					console.log("attribute found: " + attributes[i]);
686
				}
687
				if(dojo.isIE){
688
					t.assertEqual(5,attributes.length);
689
				}else{
690
					t.assertEqual(6,attributes.length);
691
				}
692
				d.callback(true);
693
			}
694
			function onError(error, request) {
695
				d.errback(error);
696
			}
697
			store.fetch({query:{isbn:"A9B574"}, onComplete: onComplete, onError: onError});
698
			return d; //Object
699
		},
700
		function testWriteAPI_setValue(t){
701
			//	summary:
702
			//		Simple test of the setValue API
703
			//	description:
704
			//		Simple test of the setValue API
705
			var store = dojox.data.tests.stores.XmlStore.getBooks2Store();
706
 
707
			var d = new doh.Deferred();
708
			function onComplete(items, request) {
709
				t.assertEqual(1, items.length);
710
				var item = items[0];
711
				t.assertTrue(store.containsValue(item,"isbn", "A9B574"));
712
				store.setValue(item, "isbn", "A9B574-new");
713
				t.assertEqual(store.getValue(item,"isbn").toString(), "A9B574-new");
714
				d.callback(true);
715
			}
716
			function onError(error, request) {
717
				d.errback(error);
718
			}
719
			store.fetch({query:{isbn:"A9B574"}, onComplete: onComplete, onError: onError});
720
			return d; //Object
721
		},
722
		function testWriteAPI_setValues(t){
723
			//	summary:
724
			//		Simple test of the setValues API
725
			//	description:
726
			//		Simple test of the setValues API
727
			var store = dojox.data.tests.stores.XmlStore.getBooks2Store();
728
 
729
			var d = new doh.Deferred();
730
			function onComplete(items, request) {
731
				t.assertEqual(1, items.length);
732
				var item = items[0];
733
				t.assertTrue(store.containsValue(item,"isbn", "A9B574"));
734
				store.setValues(item, "isbn", ["A9B574-new1", "A9B574-new2"]);
735
				var values = store.getValues(item,"isbn");
736
				t.assertEqual(values[0].toString(), "A9B574-new1");
737
				t.assertEqual(values[1].toString(), "A9B574-new2");
738
				store.setValues(values[0], "text()", ["A9B574", "-new3"]);
739
				t.assertEqual(store.getValue(values[0],"text()").toString(), "A9B574-new3");
740
				d.callback(true);
741
			}
742
			function onError(error, request) {
743
				d.errback(error);
744
			}
745
			store.fetch({query:{isbn:"A9B574"}, onComplete: onComplete, onError: onError});
746
			return d; //Object
747
		},
748
		function testWriteAPI_unsetAttribute(t){
749
			//	summary:
750
			//		Simple test of the unsetAttribute API
751
			//	description:
752
			//		Simple test of the unsetAttribute API
753
			var store = dojox.data.tests.stores.XmlStore.getBooks2Store();
754
 
755
			var d = new doh.Deferred();
756
			function onComplete(items, request) {
757
				t.assertEqual(1, items.length);
758
				var item = items[0];
759
				t.assertTrue(store.containsValue(item,"isbn", "A9B574"));
760
				store.unsetAttribute(item,"isbn");
761
				t.assertTrue(!store.hasAttribute(item,"isbn"));
762
				t.assertTrue(store.isDirty(item));
763
				d.callback(true);
764
			}
765
			function onError(error, request) {
766
				d.errback(error);
767
			}
768
			store.fetch({query:{isbn:"A9B574"}, onComplete: onComplete, onError: onError});
769
			return d; //Object
770
		},
771
		function testWriteAPI_isDirty(t){
772
			//	summary:
773
			//		Simple test of the isDirty API
774
			//	description:
775
			//		Simple test of the isDirty API
776
			var store = dojox.data.tests.stores.XmlStore.getBooks2Store();
777
 
778
			var d = new doh.Deferred();
779
			function onComplete(items, request) {
780
				t.assertEqual(1, items.length);
781
				var item = items[0];
782
				t.assertTrue(store.containsValue(item,"isbn", "A9B574"));
783
				store.setValue(item, "isbn", "A9B574-new");
784
				t.assertEqual(store.getValue(item,"isbn").toString(), "A9B574-new");
785
				t.assertTrue(store.isDirty(item));
786
				d.callback(true);
787
			}
788
			function onError(error, request) {
789
				d.errback(error);
790
			}
791
			store.fetch({query:{isbn:"A9B574"}, onComplete: onComplete, onError: onError});
792
			return d; //Object
793
		},
794
		function testWriteAPI_revert(t){
795
			//	summary:
796
			//		Simple test of the isDirty API
797
			//	description:
798
			//		Simple test of the isDirty API
799
			var store = dojox.data.tests.stores.XmlStore.getBooks2Store();
800
 
801
			var d = new doh.Deferred();
802
			function onComplete(items, request) {
803
				t.assertEqual(1, items.length);
804
				var item = items[0];
805
				t.assertTrue(store.containsValue(item,"isbn", "A9B574"));
806
				t.assertTrue(!store.isDirty(item));
807
				store.setValue(item, "isbn", "A9B574-new");
808
				t.assertEqual(store.getValue(item,"isbn").toString(), "A9B574-new");
809
				t.assertTrue(store.isDirty(item));
810
				store.revert();
811
 
812
				//Fetch again to see if it reset the state.
813
				function onComplete1(items, request) {
814
					t.assertEqual(1, items.length);
815
					var item = items[0];
816
					t.assertTrue(store.containsValue(item,"isbn", "A9B574"));
817
					d.callback(true);
818
				}
819
				store.fetch({query:{isbn:"A9B574"}, onComplete: onComplete1, onError: onError});
820
			}
821
			function onError(error, request) {
822
				d.errback(error);
823
			}
824
			store.fetch({query:{isbn:"A9B574"}, onComplete: onComplete, onError: onError});
825
			return d; //Object
826
		},
827
		function testReadAPI_functionConformance(t){
828
			//	summary:
829
			//		Simple test read API conformance.  Checks to see all declared functions are actual functions on the instances.
830
			//	description:
831
			//		Simple test read API conformance.  Checks to see all declared functions are actual functions on the instances.
832
 
833
			var testStore = dojox.data.tests.stores.XmlStore.getBooksStore();
834
			var readApi = new dojo.data.api.Read();
835
			var passed = true;
836
 
837
			for(i in readApi){
838
				var member = readApi[i];
839
				//Check that all the 'Read' defined functions exist on the test store.
840
				if(typeof member === "function"){
841
					var testStoreMember = testStore[i];
842
					if(!(typeof testStoreMember === "function")){
843
						console.log("Problem with function: [" + i + "]");
844
						passed = false;
845
						break;
846
					}
847
				}
848
			}
849
			t.assertTrue(passed);
850
		},
851
		function testWriteAPI_functionConformance(t){
852
			//	summary:
853
			//		Simple test write API conformance.  Checks to see all declared functions are actual functions on the instances.
854
			//	description:
855
			//		Simple test write API conformance.  Checks to see all declared functions are actual functions on the instances.
856
 
857
			var testStore = dojox.data.tests.stores.XmlStore.getBooksStore();
858
			var writeApi = new dojo.data.api.Write();
859
			var passed = true;
860
 
861
			for(i in writeApi){
862
				var member = writeApi[i];
863
				//Check that all the 'Write' defined functions exist on the test store.
864
				if(typeof member === "function"){
865
					var testStoreMember = testStore[i];
866
					if(!(typeof testStoreMember === "function")){
867
						passed = false;
868
						break;
869
					}
870
				}
871
			}
872
			t.assertTrue(passed);
873
		}
874
	]
875
);
876
 
877
 
878
 
879
 
880
 
881
}