Files
openlayers/master/examples/_autoComplete_mouse.html
Éric Lemoine 5d14b9e2d4 Updated
2013-02-20 10:38:25 +01:00

542 lines
17 KiB
HTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>doh.robot ComboBox/FilteringSelect Mouse Tests</title>
<style>
@import "../../../../util/doh/robot/robot.css";
</style>
<!-- required: dojo.js -->
<script type="text/javascript" src="../../../../dojo/dojo.js"></script>
<script type="text/javascript" src="../../helpers.js"></script>
<script type="text/javascript">
dojo.require("dijit.robotx");
dojo.require("dojo.window");
// TODO: provide URL toggle for FilteringSelect
var testWidget = "dijit.form.ComboBox";
var qstr = window.location.search.substr(1);
if(qstr.length){
var qparts = qstr.split("&");
for(var x=0; x<qparts.length; x++){
var tp = qparts[x].split("=");
if(tp[0] == "testWidget"){
testWidget = tp[1];
}
}
}
isComboBox = testWidget=="dijit.form.ComboBox";
dojo.ready(function(){
var pageSize, combo;
var findMenuItem = function(combo, text){
var node = combo.dropDown.domNode.firstChild;
while(((node.innerText || node.textContent).indexOf(text) < 0) && node.nextSibling){
node = node.nextSibling;
}
return node;
};
doh.robot.initRobot('../_autoComplete.html?testWidget='+testWidget);
// Wait for data stores to finish loading before starting tests
doh.register("wait for data store load",
dojo.map(["store", "store2", "stateStore", "dijitStore"], function(name){
return {
name: "wait for " + name,
timeout: 5000,
runTest: function(){
var d = new doh.Deferred();
dojo.global[name].fetch({
onComplete: function(){
d.callback(true);
},
onError: function(e){
d.errback(e);
}
});
return d;
}
};
})
);
doh.register("drop down navigation / mouse", [
{
timeout:6000,
name:"open drop down",
runTest:function(){
var d = new doh.Deferred();
combo = dijit.byId("setvaluetest");
// Open drop down
doh.robot.mouseMoveAt(combo._buttonNode, 0, 0);
doh.robot.mouseClick({left:true}, 500);
doh.robot.sequence(d.getTestCallback(function(){
var list = combo.dropDown.domNode,
entries = dojo.query(".dijitMenuItem", list).filter(isVisible);
doh.t(isVisible(list), "list is visible");
doh.is(31, entries.length, "30 elements plus next button");
doh.is("California", combo.focusNode.value, "displayed value hasn't changed");
}), 1500, 100);
return d;
}
},
{
timeout:9000,
name:"next page",
runTest:function(){
var d = new doh.Deferred();
combo = dijit.byId("setvaluetest");
var list = combo.dropDown.domNode;
doh.t(isVisible(list), "list is still visible");
dojo.window.scrollIntoView(combo.dropDown.nextButton);
doh.robot.mouseMoveAt(combo.dropDown.nextButton, 1, 0);
doh.robot.mouseClick({left:true}, 1000);
doh.robot.sequence(d.getTestCallback(function(){
var entries = dojo.query(".dijitMenuItem", list).filter(isVisible);
doh.is("Minnesota (MN)", innerText(entries[1]), "first entry on second page of drop down");
doh.is("California", combo.focusNode.value, "displayed value hasn't changed");
}), 1500, 1000);
return d;
}
},
{
timeout:9000,
name:"last page",
runTest:function(){
var d = new doh.Deferred();
combo = dijit.byId("setvaluetest");
dojo.window.scrollIntoView(combo.dropDown.nextButton);
doh.robot.mouseMoveAt(combo.dropDown.nextButton, 1, 0);
doh.robot.mouseClick({left:true}, 1000);
doh.robot.sequence(d.getTestCallback(function(){
var list = combo.dropDown.domNode,
entries = dojo.query(".dijitMenuItem", list).filter(isVisible);
doh.is(2, entries.length, "previous choices + wyoming");
doh.is("Wyoming (WY)", innerText(entries[1]));
}), 1500, 1000);
return d;
}
},
{
timeout:9000,
name:"previous page",
runTest:function(){
var d = new doh.Deferred();
combo = dijit.byId("setvaluetest");
dojo.window.scrollIntoView(combo.dropDown.previousButton);
doh.robot.mouseMoveAt(combo.dropDown.previousButton, 0, 0);
doh.robot.mouseClick({left:true}, 1000);
doh.robot.sequence(d.getTestCallback(function(){
var list = combo.dropDown.domNode,
entries = dojo.query(".dijitMenuItem", list);
doh.is(32, entries.length, "30 states, plus next and previous button");
doh.is("Minnesota (MN)", innerText(entries[1]));
doh.is("Wisconsin (WI)", innerText(entries[30]));
doh.is("California", combo.focusNode.value, "displayed value hasn't changed");
}), 1500, 1000);
return d;
}
},
{
timeout:6000,
name:"select value",
runTest:function(){
var d = new doh.Deferred();
combo = dijit.byId("setvaluetest");
var nj = findMenuItem(combo, "New Jersey (NJ)");
dojo.window.scrollIntoView(nj);
doh.robot.mouseMoveAt(function(){ return nj }, 500, 0);
doh.robot.mouseClick({left:true}, 500);
doh.robot.sequence(d.getTestCallback(function(){
doh.is(isComboBox ? "New Jersey" : "NJ", dijit.byId("setvaluetest").get("value"),
"selected New Jersey from drop down");
var count = dijit.byId("setvaluetest").labelFuncCounts['NJ'];
doh.is(2, count, "# custom labelFunc calls");
}), 1000, 500);
return d;
}
},
{
timeout:6000,
name:"blur value",
runTest:function(){
var d = new doh.Deferred();
combo = dijit.byId("setvaluetest");
// focus combo
doh.robot.mouseMoveAt(combo.focusNode, 500, 0);
doh.robot.mouseClick({left:true}, 500);
// blur
doh.robot.mouseMoveAt('sv1_4', 500, 0);
doh.robot.mouseClick({left:true}, 500);
doh.robot.sequence(d.getTestCallback(function(){
doh.is(isComboBox ? "New Jersey" : "NJ", dijit.byId("setvaluetest").get("value"),
"New Jersey still set after blur");
var count = dijit.byId("setvaluetest").labelFuncCounts['NJ'];
doh.is(2, count, "# custom labelFunc calls unchanged after blur");
}), 1000, 500);
return d;
}
}
]);
// For back-compat with 1.0 need to report click events, even clicks on the button
// (which by default is stopped in _HasDropDown)
// Remove for 2.0.
doh.register("onClick", [
{
timeout: 5000,
name: "click on button",
runTest: function(){
var d = new doh.Deferred();
combo = dijit.byId("setvaluetest");
handle = dojo.global.dojo.connect(combo, "onClick", d.getTestCallback(function(){
// If we hit here it's OK, if no click event then fail with timeout
console.log("hit onClick callback");
}));
dojo.window.scrollIntoView(combo.domNode);
doh.robot.mouseMoveAt(combo._buttonNode, 1000, 0);
doh.robot.mouseClick({left:true}, 500);
return d;
},
tearDown: function(){
dojo.disconnect(handle);
combo.closeDropDown();
}
},
{
timeout: 5000,
name: "click on input",
runTest: function(){
var d = new doh.Deferred();
combo = dijit.byId("setvaluetest");
handle = dojo.global.dojo.connect(combo, "onClick", d.getTestCallback(function(){
// If we hit here it's OK, if no click event then fail with timeout
console.log("hit onClick callback");
}));
dojo.window.scrollIntoView(combo.domNode);
doh.robot.mouseMoveAt(combo.focusNode, 1000, 0);
doh.robot.mouseClick({left:true}, 500);
return d;
},
tearDown: function(){
dojo.disconnect(handle);
combo.closeDropDown();
}
}
]);
// Test clicking more choices / previous choices buttons doesn't affect value in <input> area
doh.register("auto-complete", [
{
timeout:10000,
name:"open drop down",
setUp: function(){
combo = dijit.byId("datatest");
pageSize = combo.get('pageSize');
combo.set('pageSize', 1);
combo.set('displayedValue', null, false);
},
runTest: function(){
var d = new doh.Deferred();
handle = dojo.connect(combo, "openDropDown", function(){
setTimeout(d.getTestCallback(function(){
var list = combo.dropDown.domNode;
doh.t(list && isVisible(list), "drop down is visible");
// Clicking "more choices" shouldn't change value in ComboBox
doh.is('Alabama', combo.focusNode.value, "focus value");
if(!isComboBox){
doh.t(combo.isValid(true), "FilteringSelect should be valid");
}
}), 0);
});
doh.robot.mouseMoveAt(combo.focusNode, 500, 0);
doh.robot.mouseClick({left:true}, 500);
doh.robot.typeKeys("a", 1500); // will open dropdown
return d;
},
tearDown: function(){
dojo.disconnect(handle);
}
},
{
timeout:10000,
name:"click more choices",
runTest: function(){
var d = new doh.Deferred();
handle = dojo.connect(combo, "openDropDown", function(){
setTimeout(d.getTestCallback(function(){
var list = combo.dropDown.domNode;
doh.t(list && isVisible(list), "drop down is visible");
doh.is(findMenuItem(combo, "Alaska"), combo.dropDown.getHighlightedOption(), "Alaska is highlighted");
doh.t(combo.focused, "widget is focused");
}), 0);
});
doh.robot.mouseMoveAt(combo.dropDown.nextButton, 1000, 0); // move to More choices
doh.robot.mouseClick({left:true}, 1000); // will display new drop down
return d;
},
tearDown: function(){
dojo.disconnect(handle);
combo.set('pageSize', pageSize);
combo.closeDropDown();
}
}
]);
// disabled tests+standard tests
doh.register("disabled", [
{
timeout:6000,
name: "focus by mouse",
runTest:function(){
var d = new doh.Deferred();
combo = dijit.byId("combo3");
doh.robot.mouseMoveAt(combo.focusNode, 500, 0);
doh.robot.mouseClick({left:true}, 500);
doh.robot.sequence(d.getTestCallback(function(){
if(!dojo.isWebKit){ // webkit bug, see #11064 - TODO: verify this is fixed now
doh.isNot(combo, dijit.getEnclosingWidget(dojo.global.dijit.focus.curNode), "click doesn't focus disabled combo");
}
}), 1000, 500);
return d;
}
},
{
timeout:6000,
name:"dropdown button",
runTest:function(){
var d = new doh.Deferred();
combo = dijit.byId("combo3");
// Press Arrow Button
doh.robot.mouseMoveAt(combo._buttonNode, 500, 0);
doh.robot.mouseClick({left:true}, 500);
// Assert that nothing happened
doh.robot.sequence(d.getTestCallback(function(){
doh.f(combo.dropDown, "User was able to open the menu on a disabled ComboBox!");
// Testcase for #8923, uncomment when that bug is fixed
//doh.isNot(combo, dijit.getEnclosingWidget(dojo.global.dijit.focus.curNode), "button-click doesn't focus disabled combo");
}), 1000, 500);
return d;
}
}
]);
doh.register("#9898", [
{
timeout: 9000,
name: "firefox mouse problem",
combo: "labelFunc",
handle: null,
setUp: function(){
combo = dijit.byId(this.combo);
},
runTest: function(){ // very hard to hit due to timing
var d = new doh.Deferred();
dojo.byId("native").scrollIntoView(false); // force to bottom of screen
// jump through hoops to increase the odds of hitting the problem
handle = combo.connect(combo, 'loadDropDown', // when drop down is about to be displayed, set up 1 time event handlers
function(){
var popup = dijit.byId("labelFunc_popup"); // combobox results
var old = dojo.global.dojo._setMarginBox; // menu is about to be shrunk to fit the viewport, so stop this
dojo.global.dojo._setMarginBox = dojo.hitch(dojo.global,
function(){
dojo.global.dojo._setMarginBox = old; // restore original _setMarginBox
});
var old2 = popup._focusOptionNode;
popup._focusOptionNode = // LI option is about to be highlighted, so stop that as well
function(node){
popup._focusOptionNode = old2; // restore original _focusOptionNode
};
doh.robot.mouseRelease({left:true}, 0); // invoke popup._onMouseUp
doh.robot.sequence(d.getTestCallback(function(){
doh.t(isVisible(popup.domNode), "list is visible");
}), 1000, 500);
}
);
doh.robot.mouseMoveAt(combo._buttonNode, 1000, 0);
doh.robot.mousePress({left:true}, 500); // mousedown on the arrow image
return d;
},
tearDown: function(){
combo.disconnect(handle);
combo.closeDropDown();
}
}
]);
doh.register("#10431", [
{
timeout: 9000,
name: "untouched blank value and required",
combo: "japanese",
setUp: function(){
combo = dijit.byId(this.combo);
},
runTest: function(){
doh.is("", combo.get("value"), "value");
doh.is("", combo.get('displayedValue'), "displayedValue");
doh.f(combo.isValid(), "isValid");
doh.is("Incomplete", combo.state, "state");
},
tearDown: function(){
combo.closeDropDown();
}
},
{
timeout: 9000,
name: "blurred blank value and required",
combo: "japanese",
setUp: function(){
combo = dijit.byId(this.combo);
},
runTest: function(){
var d = new doh.Deferred();
doh.robot.mouseMoveAt(combo.focusNode, 500, 0);
doh.robot.mouseClick({left:true}, 500);
doh.robot.keyPress(dojo.keys.TAB, 1000);
doh.robot.sequence(d.getTestCallback(dojo.hitch(this, function(){
doh.is("", combo.get("value"), "value");
doh.is("", combo.get('displayedValue'), "displayedValue");
doh.f(combo.isValid(), "isValid");
doh.is("Error", combo.state, "state");
})), 1000, 500);
return d;
},
tearDown: function(){
combo.closeDropDown();
}
}
]);
doh.register("placeHolder", [
{
timeout: 6000,
name: "focus/blur",
combo: "placeholdertest",
setUp: function(){
combo = dijit.byId(this.combo);
},
runTest: function(){
var d = new doh.Deferred();
doh.is("", combo.get("value"), "value");
doh.is("", combo.get('displayedValue'), "displayedValue");
doh.is("Select a New England State", combo._phspan.innerHTML, "_phspan.innerHTML");
doh.isNot("none", combo._phspan.style.display, "_phspan.style.display 1");
doh.robot.mouseMoveAt(combo.focusNode, 0, 0);
doh.robot.mouseClick({left:true}, 500);
doh.robot.sequence(d.getTestErrback(function(){
doh.is("none", combo._phspan.style.display, "_phspan.style.display 2");
doh.robot.keyPress(dojo.keys.TAB, 500, {});
doh.robot.sequence(d.getTestCallback(function(){
doh.is("", combo.get("value"), "value");
doh.is("", combo.get('displayedValue'), "displayedValue");
doh.isNot("none", combo._phspan.style.display, "_phspan.style.display 3");
}), 1000, 500);
}), 1500, 500);
return d;
},
tearDown: function(){
combo.closeDropDown();
}
},
{
timeout: 6000,
name: "select a value",
combo: "placeholdertest",
setUp: function(){
combo = dijit.byId(this.combo);
},
runTest: function(){
var d = new doh.Deferred(), value = isComboBox?'Connecticut':'ct';
combo.set("value", value);
doh.is(value, combo.get("value"), "selected Connecticut from drop down");
doh.robot.mouseMoveAt(combo.focusNode, 500, 0);
doh.robot.mouseClick({left:true}, 500);
doh.robot.sequence(d.getTestErrback(function(){
doh.is("none", combo._phspan.style.display, "_phspan.style.display 1");
doh.robot.keyPress(dojo.keys.TAB, 500, {});
doh.robot.sequence(d.getTestCallback(function(){
doh.is(value, combo.get("value"), "value");
doh.is("none", combo._phspan.style.display, "_phspan.style.display 2");
doh.is('Connecticut', combo.textbox.value, "textbox.value 2");
}), 1000, 500);
}), 1000, 500);
return d;
},
tearDown: function(){
combo.closeDropDown();
}
}
]);
doh.run();
});
</script>
</head>
</html>