New file |
0,0 → 1,597 |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" |
"http://www.w3.org/TR/html4/strict.dtd"> |
<html> |
<head> |
<title>Test ContentPane</title> |
<style type="text/css"> |
@import "../../../dojo/resources/dojo.css"; |
@import "../../themes/tundra/tundra.css"; |
@import "../css/dijitTests.css"; |
|
.box { |
border: 1px solid black; |
padding: 8px; |
} |
|
.dijitTestWidget { |
border: 1px dashed red; |
background-color: #C0E209 ; |
} |
</style> |
|
<script type="text/javascript" src="../../../dojo/dojo.js" |
djConfig="isDebug: true"></script> |
<script type="text/javascript"> |
dojo.require("doh.runner"); |
dojo.require("dijit.layout.ContentPane"); |
dojo.require("dijit._Container"); |
dojo.require("dijit._Templated"); |
dojo.require("dijit.layout.StackContainer"); |
|
// create a do nothing, only for test widget |
dojo.declare("dijit.TestWidget", |
[dijit._Widget, dijit._Templated], { |
templateString: "<span class='dijitTestWidget'></span>" |
}); |
|
|
dojo.addOnLoad(function(){ |
doh.register("pane1", |
[ |
{ |
name: "no_autoparse", |
runTest: function(t){ |
if(dijit.byId("pane1")){ |
throw doh._AssertFailure("Page got autoparsed when it shouldn't"); |
} |
} |
} |
] |
); |
|
var pane2; |
|
doh.registerGroup("pane2", |
[ |
{ |
name: "clear_content", |
setUp: function(t){ |
pane2 = new dijit.layout.ContentPane({}, dojo.byId("pane2")); |
pane2.setContent();// pass undefined on purpose |
}, |
runTest: function(t){ |
t.assertEqual(0, dijit._Container.prototype.getChildren.call(pane2).length); |
t.assertEqual("", pane2.domNode.innerHTML) |
} |
}, |
{ |
name: "setContent_String", |
setUp: function(){ |
pane2.setContent(); |
}, |
runTest: function(t){ |
var msg = "<h3>a simple html string</h3>"; |
pane2.setContent(msg); |
t.assertEqual(msg, pane2.domNode.innerHTML.toLowerCase()); |
} |
}, |
{ |
name: "setContent_DOMNode", |
setUp: function(t){ |
var div = dojo.doc.createElement('div'); |
div.innerHTML = "setContent( [DOMNode] )"; |
div.setAttribute('dojoType', 'dijit.TestWidget'); |
pane2.setContent(div); |
}, |
runTest: function(t){ |
t.assertEqual(1, dijit._Container.prototype.getChildren.call(pane2).length); |
}, |
tearDown: function(t){ |
pane2.setContent(); // clear content for next test |
} |
}, |
{ |
name: "setContent_NodeList", |
setUp: function(t){ |
var div = dojo.doc.createElement('div'); |
div.innerHTML = "<div dojotype='dijit.TestWidget'>above</div>" |
+"Testing!<div><p><span><b>Deep nested</b></span></p></div>" |
+"<div dojotype='dijit.TestWidget'>below</div>"; |
|
var list = div.childNodes; |
pane2.setContent(div.childNodes); |
}, |
runTest: function(t){ |
t.assertEqual(2, dijit._Container.prototype.getChildren.call(pane2).length); |
|
//regular DOM check |
var children = pane2.domNode.childNodes; |
t.assertEqual(4, children.length); |
t.assertEqual("Testing!", children[1].nodeValue); |
t.assertEqual("div", children[2].nodeName.toLowerCase()); |
t.assertEqual("<p><span><b>deep nested</b></span></p>", children[2].innerHTML.toLowerCase()); |
} |
}, |
{ |
name: "setContent_dojo_NodeList", |
setUp: function(t){ |
pane2.setContent(); |
}, |
runTest: function(t){ |
var div = dojo.doc.createElement('div'); |
div.innerHTML = "<div dojotype='dijit.TestWidget'>above</div>" |
+"Testing!<div><p><span><b>Deep nested</b></span></p></div>" |
+"<div dojotype='dijit.TestWidget'>below</div>"; |
|
var list = new dojo.NodeList(); |
dojo.forEach(div.childNodes, function(n){ |
list.push(n.cloneNode(true)); |
}); |
|
pane2.setContent(list); |
t.assertEqual(4, pane2.domNode.childNodes.length); |
} |
}, |
{ |
name: "extractContent", |
runTest: function(t){ |
var def = pane2.extractContent; |
t.assertFalse(def); |
|
// test that it's actually working |
pane2.extractContent = true; |
pane2.setContent('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" ' |
+'"http://www.w3.org/TR/html4/strict.dtd">' |
+'<html><head><style>body{font-weight:bold;}</style></head>' |
+'<body>extractContent test</body></html>'); |
|
t.assertEqual("extractContent test", pane2.domNode.innerHTML); |
|
// reset back to default |
pane2.extractContent = def; |
} |
}, |
|
///////////////////////////////////////////////////////////////////////// |
// We assume that our network connection has a maximum of 1.5 sec latency |
///////////////////////////////////////////////////////////////////////// |
{ |
name: "setHref_loading", |
timeout: 1800, |
setUp: function(t){ |
pane2.setHref('getResponse.php?messId=1'); |
}, |
runTest: function(t){ |
var d = new tests.Deferred(); |
setTimeout(d.getTestCallback( |
function(){ |
t.assertEqual(1, dijit._Container.prototype.getChildren.call(pane2).length); |
}) |
, 1500); |
return d; |
} |
}, |
{ |
name: "setHref_then_cancel", |
timeout: 2800, |
setUp: function(t){ |
pane2.setContent();// clear previous |
}, |
runTest: function(t){ |
var msg = "This should NEVER be seen!"; |
pane2.setHref('getResponse.php?delay=1000&message='+encodeURI(msg)); |
var d = new t.Deferred(); |
setTimeout(d.getTestCallback( |
function(){ |
t.assertFalse(pane2.domNode.innerHTML == msg); |
} |
), 2500); |
|
pane2.cancel(); |
|
return d; |
} |
}, |
{ |
// test that setHref cancels a inflight setHref |
name: "setHref_cancels_previous_setHref", |
timeout: 2800, |
setUp: function(t){ |
pane2.setContent(); |
}, |
runTest: function(t){ |
var msgCanceled = "This should be canceled"; |
pane2.setHref("getResponse.php?delay=1000&message="+encodeURI(msgCanceled)); |
|
var msg = "This message should win over the previous"; |
setTimeout(function(){ |
pane2.setHref("getResponse.php?message="+encodeURI(msg)); |
}, 900); |
|
var d = new t.Deferred(); |
setTimeout(d.getTestCallback( |
function(){ |
t.assertEqual(msg, pane2.domNode.innerHTML); |
} |
), 2500); |
return d; |
} |
}, |
{ |
name: "setContent_cancels_setHref", |
timeout: 2800, |
setUp: function(t){ |
pane2.setContent(); |
}, |
runTest: function(t){ |
var msgCanceled = "This message be canceled"; |
pane2.setHref("getResponse.php?delay=1000&message="+encodeURI(msgCanceled)); |
|
var msg = "This message should win over the inflight one"; |
setTimeout(function(){ |
pane2.setContent(msg); |
}, 900); |
|
var d = new t.Deferred(); |
setTimeout(d.getTestCallback( |
function(){ |
t.assertEqual(msg, pane2.domNode.innerHTML); |
} |
), 2500); |
return d; |
} |
}, |
{ |
name: "refresh", |
timeout: 1900, |
setUp: function(t){ |
pane2.setHref("getResponse.php?message="+encodeURI('initial load')); |
}, |
runTest: function(t){ |
var msg = 'refreshed load' |
setTimeout(function(){ |
pane2.href = "getResponse.php?message="+encodeURI(msg); |
pane2.refresh(); |
}, 100); |
|
var d = new t.Deferred(); |
setTimeout(d.getTestCallback( |
function(){ |
t.assertEqual(msg, pane2.domNode.innerHTML); |
} |
), 1600); |
return d; |
|
} |
}, |
{ |
name: "preventCache", |
timeout:1800, |
setUp: function(t){ |
pane2.setContent(); |
}, |
runTest: function(t){ |
var def = pane2.preventCache; |
t.assertFalse(def); |
|
pane2.preventCache = true; |
|
pane2.setHref("getResponse.php?bounceGetStr=1&message="+encodeURI('initial')); |
var d = new t.Deferred(); |
setTimeout(d.getTestCallback( |
function(){ |
var getStr = dojo.byId('bouncedGetStr'); |
t.assertTrue(getStr.innerHTML.indexOf('preventCache=') > -1); |
} |
), 1500); |
|
pane2.preventCache = def; |
return d; |
}, |
tearDown: function(t){ |
pane2.preventCache = false; |
} |
}, |
{ |
name: "isLoaded", |
timeout: 1800, |
setUp: function(t){ |
pane2.setContent(); |
}, |
runTest: function(t){ |
t.assertTrue(pane2.isLoaded); |
|
pane2.setHref("getResponse.php?delay=300&message=test"); |
|
t.assertFalse(pane2.isLoaded); |
|
var ilObj = {}; // a object to get a reference instead of copy |
|
// probe after 200ms |
setTimeout(function(){ |
ilObj.probed = pane2.isLoaded; |
}, 200); |
|
var d = new t.Deferred(); |
setTimeout(d.getTestCallback( |
function(){ |
t.assertTrue(pane2.isLoaded); |
t.assertFalse(ilObj.probed); |
} |
), 1500); |
return d; |
} |
}, |
{ |
// test that we does'nt load a response if we are hidden |
name: "wait_with_load_when_domNode_hidden", |
timeout: 1800, |
setUp: function(t){ |
pane2.domNode.style.display = 'none'; |
pane2.setContent(); |
}, |
runTest: function(t){ |
pane2._msg = "This text should not be loaded until after widget is shown"; |
pane2.setHref("getResponse.php?message="+encodeURI(pane2._msg)); |
var d = new t.Deferred(); |
setTimeout(d.getTestCallback( |
function(){ |
t.assertFalse(pane2.domNode.innerHTML == pane2._msg); |
} |
), 1500); |
return d; |
}, |
tearDown: function(t){ |
pane2.domNode.style.display = ""; |
} |
}, |
{ |
name: "onDownloadError", |
timeout: 1800, |
setUp: function(t){ |
pane2.setContent(); |
}, |
runTest: function(t){ |
var res = {}; |
var msg = "Error downloading modified message"; |
var orig = pane2.onDownloadError; |
|
|
pane2.onDownloadError = function(){ |
return msg; |
} |
|
this.onError = function(e){ |
res.onError = true; |
res.onError_Arg = !!e; |
return "This message should be ignored as it gets invoked by dojo.connect"; |
} |
|
var evtHandle = dojo.connect(pane2, 'onDownloadError', this, 'onError'); |
|
// test onDownloadError |
pane2.setHref('nonexistant'); |
|
// do the test |
var d = new t.Deferred(); |
setTimeout(function(){ |
try{ |
if(!res.onError){ |
d.errback(new doh._AssertFailure("onDownloadError was never invoked")); |
} |
if(!res.onError_Arg){ |
d.errback(new doh._AssertFailure("onDownloadError did'nt get any argument on invokation")); |
} |
if(pane2.domNode.innerHTML != msg){ |
d.errback(new doh._AssertFailure("custom errortext not set")); |
} |
d.callback(true); |
}catch(e){ |
d.errback(e); |
}finally{ |
// reset to default |
dojo.disconnect(evtHandle); |
pane2.onDownloadError = orig; |
} |
}, 1500); |
|
return d; |
} |
}, |
{ |
name: "onLoad|Unload_onDownloadStart|End", |
timeout: 2400, |
setUp:function(t){ |
pane2.setContent(); |
}, |
runTest:function(t){ |
var obj = { |
start:function(){ |
this.start_called = 1; |
// check that custom message gets set |
setTimeout(function(){ |
obj.start_msg = (pane2.domNode.innerHTML == msg); |
}, 20); |
}, |
end: function(){ this.end_called = 1; }, |
load: function(){ this.load_called = 1; }, |
unload: function(){ this.unload_called = 1; } |
}; |
|
//set custom message |
var origStart = pane2.onDownloadStart; |
var msg = "custom downloadstart message"; |
pane2.onDownloadStart = function(){ return msg; }; |
|
var startHandler = dojo.connect(pane2, 'onDownloadStart', obj, 'start'); |
var endHandler = dojo.connect(pane2, 'onDownloadEnd', obj, 'end'); |
var loadHandler = dojo.connect(pane2, 'onLoad', obj, 'load'); |
var unloadHandler = dojo.connect(pane2, 'onUnload', obj, 'unload'); |
|
pane2.setHref('getResponse.php?delay=400'); |
|
var d = new t.Deferred(); |
setTimeout(function(){ |
try{ |
if(!obj.start_called){ |
d.errback(new doh._AssertFailure('onDownloadStart not called')); |
} |
if(!obj.start_msg){ |
d.errback(new doh._AssertFailure('custom download message not set')); |
} |
if(!obj.end_called){ |
d.errback(new doh._AssertFailure('onDownloadEnd not called')); |
} |
if(!obj.unload_called){ |
d.errback(new doh._AssertFailure('onUnload not called')); |
} |
if(!obj.load_called){ |
d.errback(new doh._AssertFailure('onLoad not called')); |
} |
d.callback(true); |
}catch(e){ |
d.errback(e); |
}finally{ |
dojo.disconnect(endHandler); |
dojo.disconnect(startHandler); |
dojo.disconnect(unloadHandler); |
dojo.disconnect(loadHandler); |
|
pane2.onDownloadStart = origStart; |
} |
}, 1900); |
|
return d; |
} |
} |
|
] |
); |
|
var pane3, st, tmp; |
|
doh.registerGroup("child_to_StackContainer", |
[ |
{ |
// TODO: this test should be moved to registerGroup setUp when #3504 is fixed |
// We actually dont need to test anything here, just setUp |
name: "setUp_StackContainer", |
setUp:function(t){ |
st = dojo.byId('stackcontainer'); |
dojo.addClass(st, 'box'); |
st = new dijit.layout.StackContainer({}, st); |
|
st.addChild(new dijit.TestWidget()); |
pane3 = new dijit.layout.ContentPane({href:'getResponse.php?delay=300&message=Loaded!'}, dojo.doc.createElement('div')); |
st.addChild(pane3); |
|
pane3.startup(); // starts the ContentPane |
}, |
runTest:function(t){ |
t.assertTrue(st); |
t.assertEqual(2, st.getChildren().length); |
} |
}, |
{ |
name: "preload_false_by_default", |
runTest: function(t){ |
t.assertFalse(pane3.isLoaded); |
t.assertEqual('', pane3.domNode.innerHTML); |
} |
}, |
{ |
name: "startLoad when selected", |
timeout: 2100, |
runTest: function(t){ |
st.selectChild(pane3); |
|
var d = new t.Deferred(); |
setTimeout(d.getTestCallback( |
function(){ |
t.assertTrue(pane3.isLoaded); |
t.assertEqual('Loaded!', pane3.domNode.innerHTML); |
} |
), 1800); |
|
return d; |
} |
}, |
{ |
name: "refreshOnShow", |
timeout: 2100, |
setUp: function(t){ |
tmp = { |
onUnload: function(){ this._unload_fired = 1; }, |
onLoad: function(){ this._load_fired = 1; } |
}; |
tmp.unload = dojo.connect(pane3, 'onUnload', tmp, 'onUnload'); |
tmp.load = dojo.connect(pane3, 'onLoad', tmp, 'onLoad'); |
|
pane3.refreshOnShow = true; |
}, |
runTest: function(t){ |
var d = new t.Deferred(); |
st.back(); |
st.forward(); |
|
setTimeout(d.getTestCallback(function(){ |
t.assertTrue(tmp._unload_fired); |
t.assertTrue(tmp._load_fired); |
t.assertEqual('Loaded!', pane3.domNode.innerHTML); |
}), 1800); |
|
return d; |
}, |
tearDown: function(){ |
dojo.disconnect(tmp.unload); |
dojo.disconnect(tmp.load); |
pane3.refreshOnShow = pane3.constructor.prototype.refreshOnShow; |
} |
}, |
{ |
name: "downloadTriggeredOnStartup", |
timeout: 1800, |
runTest: function(t){ |
var href = 'getResponse.php?message=Loaded!' |
var pane4 = new dijit.layout.ContentPane({href:href}, dojo.doc.createElement('div')); |
|
dojo.place(pane4.domNode, pane3.domNode, 'after'); |
|
pane4.startup(); // parser should call startup when djConfig.parseOnLoad=true |
|
var d = new t.Deferred(); |
setTimeout(d.getTestCallback(function(){ |
t.assertEqual('Loaded!', pane4.domNode.innerHTML); |
pane4.destroy(); |
}), 1500); |
return d; |
} |
} |
] |
); |
|
doh.run(); |
}); |
</script> |
</head> |
<body class="tundra"> |
<h2>dijit.layout.ContentPane test</h2> |
<h3>Test designed to run on localhost (minimize impact from network latency)</h3> |
|
<h4>This should NOT be parsed automatically</h4> |
<div dojoType="dijit.layout.ContentPane" class="box" hasShadow="true" id="pane1"> |
<div dojoType='dijit.TestWidget'>If this has a different background and a red border, the page parsed when it shouldn't</div> |
</div> |
<br/><h3>Testing ContentPane</h3> |
<div id='pane2' class='box'> |
Even tough the entire page isn't scanned for widgets, |
any sub widgets of a ContentPane will be created when a ContentPane is created<br/> |
<span id="zero" dojoType='dijit.TestWidget'>This should have a backgroundcolor and a border</span> |
<div id="one" dojoType="dijit._Widget"></div> |
<div id="two" dojoType="dijit._Widget"></div> |
<div id="three" dojoType="dijit._Widget"></div> |
</div> |
<br/><br/> |
<div id='stackcontainer'></div> |
</body> |
</html> |