Subversion Repositories Applications.papyrus

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2150 mathias 1
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
2
		"http://www.w3.org/TR/html4/strict.dtd">
3
<html>
4
<head>
5
	<title>Test ContentPane</title>
6
	<style type="text/css">
7
		@import "../../../dojo/resources/dojo.css";
8
		@import "../../themes/tundra/tundra.css";
9
		@import "../css/dijitTests.css";
10
 
11
		.box {
12
			border: 1px solid black;
13
			padding: 8px;
14
		}
15
 
16
		.dijitTestWidget {
17
			border: 1px dashed red;
18
			background-color: #C0E209 ;
19
		}
20
	</style>
21
 
22
	<script type="text/javascript" src="../../../dojo/dojo.js"
23
		djConfig="isDebug: true"></script>
24
	<script type="text/javascript">
25
		dojo.require("doh.runner");
26
		dojo.require("dijit.layout.ContentPane");
27
		dojo.require("dijit._Container");
28
		dojo.require("dijit._Templated");
29
		dojo.require("dijit.layout.StackContainer");
30
 
31
		// create a do nothing, only for test widget
32
		dojo.declare("dijit.TestWidget",
33
			[dijit._Widget, dijit._Templated], {
34
			templateString: "<span class='dijitTestWidget'></span>"
35
		});
36
 
37
 
38
		dojo.addOnLoad(function(){
39
			doh.register("pane1",
40
				[
41
					{
42
						name: "no_autoparse",
43
						runTest: function(t){
44
							if(dijit.byId("pane1")){
45
								throw doh._AssertFailure("Page got autoparsed when it shouldn't");
46
							}
47
						}
48
					}
49
				]
50
			);
51
 
52
			var pane2;
53
 
54
			doh.registerGroup("pane2",
55
				[
56
					{
57
						name: "clear_content",
58
						setUp: function(t){
59
							pane2 = new dijit.layout.ContentPane({}, dojo.byId("pane2"));
60
							pane2.setContent();// pass undefined on purpose
61
						},
62
						runTest: function(t){
63
							t.assertEqual(0, dijit._Container.prototype.getChildren.call(pane2).length);
64
							t.assertEqual("", pane2.domNode.innerHTML)
65
						}
66
					},
67
					{
68
						name: "setContent_String",
69
						setUp: function(){
70
							pane2.setContent();
71
						},
72
						runTest: function(t){
73
							var msg = "<h3>a simple html string</h3>";
74
							pane2.setContent(msg);
75
							t.assertEqual(msg, pane2.domNode.innerHTML.toLowerCase());
76
						}
77
					},
78
					{
79
						name: "setContent_DOMNode",
80
						setUp: function(t){
81
							var div = dojo.doc.createElement('div');
82
							div.innerHTML = "setContent( [DOMNode] )";
83
							div.setAttribute('dojoType', 'dijit.TestWidget');
84
							pane2.setContent(div);
85
						},
86
						runTest: function(t){
87
							t.assertEqual(1, dijit._Container.prototype.getChildren.call(pane2).length);
88
						},
89
						tearDown: function(t){
90
							pane2.setContent(); // clear content for next test
91
						}
92
					},
93
					{
94
						name: "setContent_NodeList",
95
						setUp: function(t){
96
							var div = dojo.doc.createElement('div');
97
							div.innerHTML = "<div dojotype='dijit.TestWidget'>above</div>"
98
											+"Testing!<div><p><span><b>Deep nested</b></span></p></div>"
99
											+"<div dojotype='dijit.TestWidget'>below</div>";
100
 
101
							var list = div.childNodes;
102
							pane2.setContent(div.childNodes);
103
						},
104
						runTest: function(t){
105
							t.assertEqual(2, dijit._Container.prototype.getChildren.call(pane2).length);
106
 
107
							//regular DOM check
108
							var children = pane2.domNode.childNodes;
109
							t.assertEqual(4, children.length);
110
							t.assertEqual("Testing!", children[1].nodeValue);
111
							t.assertEqual("div", children[2].nodeName.toLowerCase());
112
							t.assertEqual("<p><span><b>deep nested</b></span></p>", children[2].innerHTML.toLowerCase());
113
						}
114
					},
115
					{
116
						name: "setContent_dojo_NodeList",
117
						setUp: function(t){
118
							pane2.setContent();
119
						},
120
						runTest: function(t){
121
							var div = dojo.doc.createElement('div');
122
							div.innerHTML = "<div dojotype='dijit.TestWidget'>above</div>"
123
										+"Testing!<div><p><span><b>Deep nested</b></span></p></div>"
124
										+"<div dojotype='dijit.TestWidget'>below</div>";
125
 
126
							var list = new dojo.NodeList();
127
							dojo.forEach(div.childNodes, function(n){
128
								list.push(n.cloneNode(true));
129
							});
130
 
131
							pane2.setContent(list);
132
							t.assertEqual(4, pane2.domNode.childNodes.length);
133
						}
134
					},
135
					{
136
						name: "extractContent",
137
						runTest: function(t){
138
							var def = pane2.extractContent;
139
							t.assertFalse(def);
140
 
141
							// test that it's actually working
142
							pane2.extractContent = true;
143
							pane2.setContent('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" '
144
								+'"http://www.w3.org/TR/html4/strict.dtd">'
145
								+'<html><head><style>body{font-weight:bold;}</style></head>'
146
								+'<body>extractContent test</body></html>');
147
 
148
							t.assertEqual("extractContent test", pane2.domNode.innerHTML);
149
 
150
							// reset back to default
151
							pane2.extractContent = def;
152
						}
153
					},
154
 
155
					/////////////////////////////////////////////////////////////////////////
156
					// We assume that our network connection has a maximum of 1.5 sec latency
157
					/////////////////////////////////////////////////////////////////////////
158
					{
159
						name: "setHref_loading",
160
						timeout: 1800,
161
						setUp: function(t){
162
							pane2.setHref('getResponse.php?messId=1');
163
						},
164
						runTest: function(t){
165
							var d = new tests.Deferred();
166
							setTimeout(d.getTestCallback(
167
								function(){
168
									t.assertEqual(1, dijit._Container.prototype.getChildren.call(pane2).length);
169
								})
170
							, 1500);
171
							return d;
172
						}
173
					},
174
					{
175
						name: "setHref_then_cancel",
176
						timeout: 2800,
177
						setUp: function(t){
178
							pane2.setContent();// clear previous
179
						},
180
						runTest: function(t){
181
							var msg = "This should NEVER be seen!";
182
							pane2.setHref('getResponse.php?delay=1000&message='+encodeURI(msg));
183
							var d = new t.Deferred();
184
							setTimeout(d.getTestCallback(
185
								function(){
186
									t.assertFalse(pane2.domNode.innerHTML == msg);
187
								}
188
							), 2500);
189
 
190
							pane2.cancel();
191
 
192
							return d;
193
						}
194
					},
195
					{
196
						// test that setHref cancels a inflight setHref
197
						name: "setHref_cancels_previous_setHref",
198
						timeout: 2800,
199
						setUp: function(t){
200
							pane2.setContent();
201
						},
202
						runTest: function(t){
203
							var msgCanceled = "This should be canceled";
204
							pane2.setHref("getResponse.php?delay=1000&message="+encodeURI(msgCanceled));
205
 
206
							var msg = "This message should win over the previous";
207
							setTimeout(function(){
208
								pane2.setHref("getResponse.php?message="+encodeURI(msg));
209
							}, 900);
210
 
211
							var d = new t.Deferred();
212
							setTimeout(d.getTestCallback(
213
								function(){
214
									t.assertEqual(msg, pane2.domNode.innerHTML);
215
								}
216
							), 2500);
217
							return d;
218
						}
219
					},
220
					{
221
						name: "setContent_cancels_setHref",
222
						timeout: 2800,
223
						setUp: function(t){
224
							pane2.setContent();
225
						},
226
						runTest: function(t){
227
							var msgCanceled = "This message be canceled";
228
							pane2.setHref("getResponse.php?delay=1000&message="+encodeURI(msgCanceled));
229
 
230
							var msg = "This message should win over the inflight one";
231
							setTimeout(function(){
232
								pane2.setContent(msg);
233
							}, 900);
234
 
235
							var d = new t.Deferred();
236
							setTimeout(d.getTestCallback(
237
								function(){
238
									t.assertEqual(msg, pane2.domNode.innerHTML);
239
								}
240
							), 2500);
241
							return d;
242
						}
243
					},
244
					{
245
						name: "refresh",
246
						timeout: 1900,
247
						setUp: function(t){
248
							pane2.setHref("getResponse.php?message="+encodeURI('initial load'));
249
						},
250
						runTest: function(t){
251
							var msg = 'refreshed load'
252
							setTimeout(function(){
253
								pane2.href = "getResponse.php?message="+encodeURI(msg);
254
								pane2.refresh();
255
							}, 100);
256
 
257
							var d = new t.Deferred();
258
							setTimeout(d.getTestCallback(
259
								function(){
260
									t.assertEqual(msg, pane2.domNode.innerHTML);
261
								}
262
							), 1600);
263
							return d;
264
 
265
						}
266
					},
267
					{
268
						name: "preventCache",
269
						timeout:1800,
270
						setUp: function(t){
271
							pane2.setContent();
272
						},
273
						runTest: function(t){
274
							var def = pane2.preventCache;
275
							t.assertFalse(def);
276
 
277
							pane2.preventCache = true;
278
 
279
							pane2.setHref("getResponse.php?bounceGetStr=1&message="+encodeURI('initial'));
280
							var d = new t.Deferred();
281
							setTimeout(d.getTestCallback(
282
								function(){
283
									var getStr = dojo.byId('bouncedGetStr');
284
									t.assertTrue(getStr.innerHTML.indexOf('preventCache=') > -1);
285
								}
286
							), 1500);
287
 
288
							pane2.preventCache = def;
289
							return d;
290
						},
291
						tearDown: function(t){
292
							pane2.preventCache = false;
293
						}
294
					},
295
					{
296
						name: "isLoaded",
297
						timeout: 1800,
298
						setUp: function(t){
299
							pane2.setContent();
300
						},
301
						runTest: function(t){
302
							t.assertTrue(pane2.isLoaded);
303
 
304
							pane2.setHref("getResponse.php?delay=300&message=test");
305
 
306
							t.assertFalse(pane2.isLoaded);
307
 
308
							var ilObj = {}; // a object to get a reference instead of copy
309
 
310
							// probe after 200ms
311
							setTimeout(function(){
312
								ilObj.probed = pane2.isLoaded;
313
							}, 200);
314
 
315
							var d = new t.Deferred();
316
							setTimeout(d.getTestCallback(
317
								function(){
318
									t.assertTrue(pane2.isLoaded);
319
									t.assertFalse(ilObj.probed);
320
								}
321
							), 1500);
322
							return d;
323
						}
324
					},
325
					{
326
						// test that we does'nt load a response if we are hidden
327
						name: "wait_with_load_when_domNode_hidden",
328
						timeout: 1800,
329
						setUp: function(t){
330
							pane2.domNode.style.display = 'none';
331
							pane2.setContent();
332
						},
333
						runTest: function(t){
334
							pane2._msg = "This text should not be loaded until after widget is shown";
335
							pane2.setHref("getResponse.php?message="+encodeURI(pane2._msg));
336
							var d = new t.Deferred();
337
							setTimeout(d.getTestCallback(
338
								function(){
339
									t.assertFalse(pane2.domNode.innerHTML == pane2._msg);
340
								}
341
							), 1500);
342
							return d;
343
						},
344
						tearDown: function(t){
345
							pane2.domNode.style.display = "";
346
						}
347
					},
348
					{
349
						name: "onDownloadError",
350
						timeout: 1800,
351
						setUp: function(t){
352
							pane2.setContent();
353
						},
354
						runTest: function(t){
355
							var res = {};
356
							var msg = "Error downloading modified message";
357
							var orig = pane2.onDownloadError;
358
 
359
 
360
							pane2.onDownloadError = function(){
361
								return msg;
362
							}
363
 
364
							this.onError = function(e){
365
								res.onError = true;
366
								res.onError_Arg = !!e;
367
								return "This message should be ignored as it gets invoked by dojo.connect";
368
							}
369
 
370
							var evtHandle = dojo.connect(pane2, 'onDownloadError', this, 'onError');
371
 
372
							// test onDownloadError
373
							pane2.setHref('nonexistant');
374
 
375
							// do the test
376
							var d = new t.Deferred();
377
							setTimeout(function(){
378
								try{
379
									if(!res.onError){
380
										d.errback(new doh._AssertFailure("onDownloadError was never invoked"));
381
									}
382
									if(!res.onError_Arg){
383
										d.errback(new doh._AssertFailure("onDownloadError did'nt get any argument on invokation"));
384
									}
385
									if(pane2.domNode.innerHTML != msg){
386
										d.errback(new doh._AssertFailure("custom errortext not set"));
387
									}
388
									d.callback(true);
389
								}catch(e){
390
									d.errback(e);
391
								}finally{
392
									// reset to default
393
									dojo.disconnect(evtHandle);
394
									pane2.onDownloadError = orig;
395
								}
396
							}, 1500);
397
 
398
							return d;
399
						}
400
					},
401
					{
402
						name: "onLoad|Unload_onDownloadStart|End",
403
						timeout: 2400,
404
						setUp:function(t){
405
							pane2.setContent();
406
						},
407
						runTest:function(t){
408
							var obj = {
409
								start:function(){
410
									this.start_called = 1;
411
									// check that custom message gets set
412
									setTimeout(function(){
413
										obj.start_msg = (pane2.domNode.innerHTML == msg);
414
									}, 20);
415
								},
416
								end: function(){ this.end_called = 1; },
417
								load: function(){ this.load_called = 1; },
418
								unload: function(){ this.unload_called = 1; }
419
							};
420
 
421
							//set custom message
422
							var origStart = pane2.onDownloadStart;
423
							var msg = "custom downloadstart message";
424
							pane2.onDownloadStart = function(){ return msg; };
425
 
426
							var startHandler = dojo.connect(pane2, 'onDownloadStart', obj, 'start');
427
							var endHandler = dojo.connect(pane2, 'onDownloadEnd', obj, 'end');
428
							var loadHandler = dojo.connect(pane2, 'onLoad', obj, 'load');
429
							var unloadHandler = dojo.connect(pane2, 'onUnload', obj, 'unload');
430
 
431
							pane2.setHref('getResponse.php?delay=400');
432
 
433
							var d = new t.Deferred();
434
							setTimeout(function(){
435
								try{
436
									if(!obj.start_called){
437
										d.errback(new doh._AssertFailure('onDownloadStart not called'));
438
									}
439
									if(!obj.start_msg){
440
										d.errback(new doh._AssertFailure('custom download message not set'));
441
									}
442
									if(!obj.end_called){
443
										d.errback(new doh._AssertFailure('onDownloadEnd not called'));
444
									}
445
									if(!obj.unload_called){
446
										d.errback(new doh._AssertFailure('onUnload not called'));
447
									}
448
									if(!obj.load_called){
449
										d.errback(new doh._AssertFailure('onLoad not called'));
450
									}
451
									d.callback(true);
452
								}catch(e){
453
									d.errback(e);
454
								}finally{
455
									dojo.disconnect(endHandler);
456
									dojo.disconnect(startHandler);
457
									dojo.disconnect(unloadHandler);
458
									dojo.disconnect(loadHandler);
459
 
460
									pane2.onDownloadStart = origStart;
461
								}
462
							}, 1900);
463
 
464
							return d;
465
						}
466
					}
467
 
468
				]
469
			);
470
 
471
			var pane3, st, tmp;
472
 
473
			doh.registerGroup("child_to_StackContainer",
474
				[
475
					{
476
						// TODO: this test should be moved to registerGroup setUp when #3504 is fixed
477
						//		We actually dont need to test anything here, just setUp
478
						name: "setUp_StackContainer",
479
						setUp:function(t){
480
							st = dojo.byId('stackcontainer');
481
							dojo.addClass(st, 'box');
482
							st = new dijit.layout.StackContainer({}, st);
483
 
484
							st.addChild(new dijit.TestWidget());
485
							pane3 = new dijit.layout.ContentPane({href:'getResponse.php?delay=300&message=Loaded!'}, dojo.doc.createElement('div'));
486
							st.addChild(pane3);
487
 
488
							pane3.startup(); // starts the ContentPane
489
						},
490
						runTest:function(t){
491
							t.assertTrue(st);
492
							t.assertEqual(2, st.getChildren().length);
493
						}
494
					},
495
					{
496
						name: "preload_false_by_default",
497
						runTest: function(t){
498
							t.assertFalse(pane3.isLoaded);
499
							t.assertEqual('', pane3.domNode.innerHTML);
500
						}
501
					},
502
					{
503
						name: "startLoad when selected",
504
						timeout: 2100,
505
						runTest: function(t){
506
							st.selectChild(pane3);
507
 
508
							var d = new t.Deferred();
509
							setTimeout(d.getTestCallback(
510
								function(){
511
									t.assertTrue(pane3.isLoaded);
512
									t.assertEqual('Loaded!', pane3.domNode.innerHTML);
513
								}
514
							), 1800);
515
 
516
							return d;
517
						}
518
					},
519
					{
520
						name: "refreshOnShow",
521
						timeout: 2100,
522
						setUp: function(t){
523
							tmp = {
524
								onUnload: function(){ this._unload_fired = 1; },
525
								onLoad: function(){ this._load_fired = 1; }
526
							};
527
							tmp.unload = dojo.connect(pane3, 'onUnload', tmp, 'onUnload');
528
							tmp.load = dojo.connect(pane3, 'onLoad', tmp, 'onLoad');
529
 
530
							pane3.refreshOnShow = true;
531
						},
532
						runTest: function(t){
533
							var d = new t.Deferred();
534
							st.back();
535
							st.forward();
536
 
537
							setTimeout(d.getTestCallback(function(){
538
								t.assertTrue(tmp._unload_fired);
539
								t.assertTrue(tmp._load_fired);
540
								t.assertEqual('Loaded!', pane3.domNode.innerHTML);
541
							}), 1800);
542
 
543
							return d;
544
						},
545
						tearDown: function(){
546
							dojo.disconnect(tmp.unload);
547
							dojo.disconnect(tmp.load);
548
							pane3.refreshOnShow = pane3.constructor.prototype.refreshOnShow;
549
						}
550
					},
551
					{
552
						name: "downloadTriggeredOnStartup",
553
						timeout: 1800,
554
						runTest: function(t){
555
							var href = 'getResponse.php?message=Loaded!'
556
							var pane4 = new dijit.layout.ContentPane({href:href}, dojo.doc.createElement('div'));
557
 
558
							dojo.place(pane4.domNode, pane3.domNode, 'after');
559
 
560
							pane4.startup(); // parser should call startup when djConfig.parseOnLoad=true
561
 
562
							var d = new t.Deferred();
563
							setTimeout(d.getTestCallback(function(){
564
								t.assertEqual('Loaded!', pane4.domNode.innerHTML);
565
								pane4.destroy();
566
							}), 1500);
567
							return d;
568
						}
569
					}
570
				]
571
			);
572
 
573
			doh.run();
574
		});
575
	</script>
576
</head>
577
<body class="tundra">
578
	<h2>dijit.layout.ContentPane test</h2>
579
	<h3>Test designed to run on localhost (minimize impact from network latency)</h3>
580
 
581
	<h4>This should NOT be parsed automatically</h4>
582
	<div dojoType="dijit.layout.ContentPane" class="box" hasShadow="true" id="pane1">
583
		<div dojoType='dijit.TestWidget'>If this has a different background and a red border, the page parsed when it shouldn't</div>
584
	</div>
585
	<br/><h3>Testing ContentPane</h3>
586
	<div id='pane2' class='box'>
587
		Even tough the entire page isn't scanned for widgets,
588
		any sub widgets of a ContentPane will be created when a ContentPane is created<br/>
589
		<span id="zero" dojoType='dijit.TestWidget'>This should have a backgroundcolor and a border</span>
590
		<div id="one" dojoType="dijit._Widget"></div>
591
		<div id="two" dojoType="dijit._Widget"></div>
592
		<div id="three" dojoType="dijit._Widget"></div>
593
	</div>
594
	<br/><br/>
595
	<div id='stackcontainer'></div>
596
</body>
597
</html>