dijit
Version:
Dijit provides a complete collection of user interface controls based on Dojo, giving you the power to create web applications that are highly optimized for usability, performance, internationalization, accessibility, but above all deliver an incredible u
231 lines (201 loc) • 6.1 kB
HTML
<html>
<head>
<title>robot Tree Mouse Test</title>
<style>
@import "../../../../util/doh/robot/robot.css";
</style>
<script type="text/javascript" src="../../../../dojo/dojo.js"></script>
<script type="text/javascript">
require([
"doh/runner", "dojo/robotx",
"dojo/aspect", "dojo/query",
"dijit/tests/helpers", "dojo/domReady!"
], function(doh, robot, aspect, query, helpers){
robot.initRobot('../test_Tree.html');
var registry, focus, mytree, africa, asia;
doh.register("_setup", [
{
name: "wait for widgets to load",
timeout: 20000,
runTest: helpers.waitForLoad
},
function setVars(){
registry = robot.window.require("dijit/registry");
focus = robot.window.require("dijit/focus");
mytree = registry.byId("mytree");
// find TreeNodes for Africa, Asia (this assumes that we haven't loaded any of mytree's
// grandchild TreeNodes yet)
var nodes = query(".dijitTreeLabel");
africa = registry.getEnclosingWidget(nodes[1]);
asia = registry.getEnclosingWidget(nodes[2]);
}
]);
function toggle(func, expanded){
return function(){
var d = new doh.Deferred();
doh.is(expanded, africa.isExpanded, "original state");
func(d);
robot.sequence(d.getTestCallback(function(){
doh.is(!expanded, africa.isExpanded, "after state");
}), 500);
return d;
};
}
doh.register("label click", [
{
name: "click to open",
timeout: 8000,
runTest: toggle(function(d){
robot.mouseMoveAt(africa.labelNode);
robot.mouseClick({left:true}, 100);
robot.sequence(d.getTestErrback(function(){
doh.is(1, robot.window.mouseDowns, "mouse down reported");
}), 500);
}, false)
},
{
name: "click to close",
timeout: 8000,
runTest: toggle(function(){
robot.mouseClick({left:true}, 100);
}, true)
},
{
name: "double click to open",
timeout: 8000,
setUp: function(){
mytree.openOnClick = false;
mytree.openOnDblClick = true;
},
runTest: toggle(function(){
robot.mouseClick({left:true}, 100);
robot.mouseClick({left:true}, 100);
}, false)
},
{
name: "double click to close",
timeout: 8000,
runTest: toggle(function(){
robot.mouseClick({left:true}, 100);
robot.mouseClick({left:true}, 100);
}, true)
}
]);
doh.register("not a click", [
{
name: "setup",
timeout: 8000,
runTest: function(){
mytree.set("openOnClick", true);
return mytree.collapseAll().then(function(){
return mytree.set("path", ["continentRoot", "EU", "FR"]);
});
}
},
{
name: "mouse down france, up on italy",
timeout: 8000,
runTest: function(){
var labels = query(".dijitTreeLabel"),
europe = labels.filter(function(node){
return node.innerHTML == "Europe";
})[0],
france = labels.filter(function(node){
return node.innerHTML == "France";
})[0],
italy = labels.filter(function(node){
return node.innerHTML == "Italy";
})[0];
var d = new doh.Deferred();
robot.mouseMoveAt(france, 500, 0);
robot.mousePress({left:true}, 500);
robot.mouseMoveAt(italy, 500, 0);
robot.mouseRelease({left:true}, 500);
robot.sequence(d.getTestCallback(function(){
var europeNode = registry.getEnclosingWidget(europe);
doh.t(europeNode.isExpanded, "europe node still expanded");
doh.isNot("Europe", mytree.focusedChild.label, "focus didn't shift to Europe");
}), 500);
return d;
}
}
]);
doh.register("focus", [
{
name: "setup",
runTest: function(){
// prevent TreeNodes from moving around as we are moving the mouse to find them
mytree.set("openOnClick", false);
}
},
{
name: "focus africa",
timeout: 8000,
runTest: function(){
var d = new doh.Deferred();
robot.mouseMoveAt(africa.labelNode);
robot.mouseClick({left:true}, 100);
robot.sequence(d.getTestCallback(function(){
doh.is("Africa", helpers.innerText(focus.curNode));
}), 500);
return d;
}
},
{
name: "blur tree",
timeout: 8000,
runTest: function(){
var d = new doh.Deferred();
robot.mouseMoveAt("mytree_before");
robot.mouseClick({left:true}, 100);
robot.sequence(d.getTestCallback(function(){
doh.is("mytree_before", focus.curNode.id);
}), 500);
return d;
}
},
{
name: "click on asia's expando",
timeout: 8000,
runTest: function(){
var d = new doh.Deferred(),
africaGotFocus;
aspect.after(africa, "focus", function(){
africaGotFocus = true;
});
robot.mouseMoveAt(asia.expandoNode);
robot.mouseClick({left:true}, 100);
robot.sequence(d.getTestCallback(function(){
// Clicking the expando or anywhere on the row should focus that row.
// In addition, there shouldn't even be a momentary (possibly scroll inducing) focus on
// the previously focused row.
doh.is("Asia", helpers.innerText(focus.curNode));
doh.f(africaGotFocus, "africa didn't get momentary focus");
}), 500);
return d;
}
},
{
name: "focus long label",
timeout: 8000,
runTest: function(){
var d = new doh.Deferred();
var thinTree = registry.byId('thinTree');
var rootNode = thinTree.rootNode;
robot.mouseMoveAt(rootNode.expandoNode);
robot.mouseClick({left: true}, 100);
robot.sequence(d.getTestCallback(function(){
doh.f(rootNode.isExpanded, 'Clicking expando of node with long label should collapse node');
doh.is(0, thinTree.domNode.scrollLeft, 'Focusing node with long label should not scroll container');
}), 500);
return d;
}
}
]);
doh.run();
});
</script>
</head>
</html>