sample skeleton application with dojo toolkit & arcgis js api v 4.30
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

511 lines
16 KiB

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>doh.robot TimeTextBox Test</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">
dojo.require("dijit.robotx");
dojo.require("dojo.date.stamp");
dojo.require("dijit.tests.helpers"); // functions to help test
dojo.ready(function(){
doh.robot.initRobot('../test_TimeTextBox.html');
var w;
doh.register("keyboard", [
{
name: "select",
timeout: 10000,
runTest: function(){
var d = new doh.Deferred();
w = dijit.byId('q1');
dojo.global.formValue = null;
// focus field... drop down shouldn't open yet
w.focus();
doh.robot.sequence(d.getTestErrback(function(){
var popup = dijit.byId('q1_popup');
doh.t(!popup || isHidden(popup), "popup hidden");
}), 500);
// open drop down
doh.robot.keyPress(dojo.keys.DOWN_ARROW, 1000, {});
doh.robot.sequence(d.getTestErrback(function(){
var popup = dijit.byId('q1_popup');
doh.t(popup && isVisible(popup), "popup visible");
}), 500);
// advance from 5:45PM to 6PM
doh.robot.keyPress(dojo.keys.DOWN_ARROW, 1000, {});
doh.robot.sequence(d.getTestErrback(function(){
var popup = dijit.byId('q1_popup');
doh.t(popup && isVisible(popup), "popup still visible");
// for screenreader (and to be like ComboBox), navigated value should be in <input>
var val = dojo.date.stamp.toISOString(w.get('value'), {selector: "time"});
doh.is("T18:00:00", val, "6PM was selected");
doh.is(null, dojo.global.formValue, "no form submit");
}), 500);
doh.robot.keyPress(dojo.keys.ENTER, 500, {});
doh.robot.sequence(d.getTestErrback(function(){
var popup = dijit.byId('q1_popup');
doh.t(!popup || isHidden(popup), "popup hidden again");
var val = dojo.date.stamp.toISOString(w.get('value'), {selector: "time"});
doh.is("T18:00:00", val, "6PM was selected");
doh.is(null, dojo.global.formValue, "no form submit");
}), 500);
// ENTER key while drop down is closed should submit the form
doh.robot.keyPress(dojo.keys.ENTER, 500, {});
doh.robot.sequence(d.getTestCallback(function(){
doh.isNot(null, dojo.global.formValue, "form was submitted");
}), 500);
return d;
},
tearDown: function(){
// Even if test failed, make sure drop down is closed so it doesn't interfere w/next test
w.closeDropDown();
}
},
{
name: "select original value",
timeout: 6000,
runTest: function(){
var d = new doh.Deferred();
w = dijit.byId('q1');
dojo.global.formValue = null;
// focus field... drop down shouldn't open yet
w.focus();
doh.robot.sequence(d.getTestErrback(function(){
var popup = dijit.byId('q1_popup');
doh.t(!popup || isHidden(popup), "popup hidden");
}), 500);
// open drop down
doh.robot.keyPress(dojo.keys.DOWN_ARROW, 1000, {});
doh.robot.sequence(d.getTestErrback(function(){
var popup = dijit.byId('q1_popup');
doh.t(popup && isVisible(popup), "popup visible");
}), 500);
// select the initial value
doh.robot.keyPress(dojo.keys.ENTER, 500, {});
doh.robot.sequence(d.getTestErrback(function(){
var popup = dijit.byId('q1_popup');
doh.t(!popup || isHidden(popup), "popup hidden again");
var val = dojo.date.stamp.toISOString(w.get('value'), {selector: "time"});
doh.is("T18:00:00", val, "6PM was selected (again)");
doh.is(null, dojo.global.formValue, "no form submit");
}), 500);
// ENTER key while drop down is closed should submit the form
doh.robot.keyPress(dojo.keys.ENTER, 500, {});
doh.robot.sequence(d.getTestCallback(function(){
doh.isNot(null, dojo.global.formValue, "form was submitted");
}), 500);
return d;
},
tearDown: function(){
// Even if test failed, make sure drop down is closed so it doesn't interfere w/next test
w.closeDropDown();
}
},
{
name: "cancel",
timeout: 6000,
runTest: function(){
var d = new doh.Deferred();
w = dijit.byId('q1');
dojo.global.formValue = null;
// focus field... drop down shouldn't open yet
w.focus();
doh.robot.sequence(d.getTestErrback(function(){
var popup = dijit.byId('q1_popup');
doh.t(!popup || isHidden(popup), "popup hidden");
}), 500);
// open drop down
doh.robot.keyPress(dojo.keys.DOWN_ARROW, 1000, {});
doh.robot.keyPress(dojo.keys.RIGHT_ARROW, 100, {}); // needed to prevent FF8 bug: reset on ESC
doh.robot.sequence(d.getTestErrback(function(){
var popup = dijit.byId('q1_popup');
doh.t(popup && isVisible(popup), "popup visible");
}), 500);
// close drop down
doh.robot.keyPress(dojo.keys.ESCAPE, 500, {});
doh.robot.sequence(d.getTestCallback(function(){
var popup = dijit.byId('q1_popup');
doh.t(!popup || isHidden(popup), "popup hidden again");
var val = dojo.date.stamp.toISOString(w.get('value'), {selector: "time"});
doh.is("T18:00:00", val, "same value as before");
}), 500);
return d;
},
tearDown: function(){
// Even if test failed, make sure drop down is closed so it doesn't interfere w/next test
w.closeDropDown();
}
},
{
name: "partial input",
timeout: 10000,
setUp: function(){
// clear the field
w = dijit.byId('q2');
w.set('value', null, false);
},
runTest: function(){
var d = new doh.Deferred();
// focus field... drop down shouldn't open yet
w.focus();
doh.robot.sequence(d.getTestErrback(function(){
var popup = dijit.byId('q2_popup');
doh.t(!popup || isHidden(popup), "popup hidden");
}), 1000);
// do partial input
doh.robot.typeKeys('12', 500, 400);
doh.robot.sequence(d.getTestErrback(function(){
// partial input shouldn't be flagged as an error, because probably
// the user just hasn't finished typing yet
doh.f(w.isValid(), 'fully invalid');
doh.t(w._isValidSubset(), 'partially valid');
doh.isNot("Error", w.state, 'no error shown');
// typing caused drop down to open
var popup = dijit.byId('q2_popup');
doh.t(popup && isVisible(popup), "popup visible");
// drop down list should be filtered to times starting with 12:,
// and they should appear in chronological order
var children = dojo.query(".dijitTimePickerItem", popup.domNode);
doh.is(8, children.length, "# of items in drop down");
doh.is("12:00 AM", innerText(children[0]));
doh.is("12:15 AM", innerText(children[1]));
doh.is("12:30 AM", innerText(children[2]));
doh.is("12:45 AM", innerText(children[3]));
doh.is("12:00 PM", innerText(children[4]));
doh.is("12:15 PM", innerText(children[5]));
doh.is("12:30 PM", innerText(children[6]));
doh.is("12:45 PM", innerText(children[7]));
}), 1000);
doh.robot.keyPress(dojo.keys.DOWN_ARROW, 500, {});
doh.robot.keyPress(dojo.keys.DOWN_ARROW, 500, {});
doh.robot.sequence(d.getTestErrback(function(){
// dropdown list should still be filtered
var popup = dijit.byId('q2_popup');
var children = dojo.query(".dijitTimePickerItem", popup.domNode);
doh.is(8, children.length, "# of items in drop down after down arrow keys");
// for screenreader (and to be like ComboBox), navigated value should be in <input>
var val = dojo.date.stamp.toISOString(w.get('value'), {selector: "time"});
doh.is("T00:15:00", val, "12:15 was selected");
// Setup handler to fire when TAB keypress below fires
onFocus(d.getTestCallback(function(){
var popup = dijit.byId('q2_popup');
doh.t(!popup || isHidden(popup), "popup hidden again");
doh.is("q3", dojo.global.dijit.focus.curNode.id, "tab moved to next input widget");
}));
}), 1000);
// tab away to close drop down
doh.robot.keyPress(dojo.keys.TAB, 500, {});
return d;
},
tearDown: function(){
// Even if test failed, make sure drop down is closed so it doesn't interfere w/next test
w.closeDropDown();
}
},
{
name: "invalid input",
timeout: 10000,
setUp: function(){
// clear the field
w = dijit.byId('q2');
w.set('value', null, false);
},
runTest: function(){
var d = new doh.Deferred();
// focus field... drop down shouldn't open yet
w.focus();
// do partial input
doh.robot.typeKeys('12a', 500, 600);
doh.robot.sequence(d.getTestErrback(function(){
// partial input shouldn't be flagged as an error, because probably
// the user just hasn't finished typing yet
doh.f(w.isValid(), 'fully invalid');
doh.f(w._isValidSubset(), 'subset invalid');
doh.is("Error", w.state, 'error shown');
// typing caused drop down to open
var popup = dijit.byId('q2_popup');
doh.t(popup && isVisible(popup), "popup visible");
// illegal pattern, so all entries are in the drop down
var children = dojo.query(".dijitTimePickerItem", popup.domNode);
doh.is(96, children.length, "# of items in drop down");
}), 1000);
// tab away to close drop down
doh.robot.keyPress(dojo.keys.TAB, 500, {});
doh.robot.sequence(d.getTestCallback(function(){
doh.f(w._opened, "drop down closed");
}), 500);
return d;
},
tearDown: function(){
// Even if test failed, make sure drop down is closed so it doesn't interfere w/next test
w.closeDropDown();
}
},
{
name: "corrected invalid input",
timeout: 10000,
setUp: function(){
// clear the field
w = dijit.byId('q2');
w.set('value', null, false);
},
runTest: function(){
var d = new doh.Deferred();
// focus field... drop down shouldn't open yet
w.focus();
// do partial input
doh.robot.typeKeys('12a', 500, 600);
doh.robot.keyPress(dojo.keys.BACKSPACE, 500, {});
doh.robot.sequence(d.getTestErrback(function(){
// partial input shouldn't be flagged as an error, because probably
// the user just hasn't finished typing yet
doh.f(w.isValid(), 'fully invalid');
doh.t(w._isValidSubset(), 'subset valid');
doh.is("Error", w.state, 'error shown');
// typing caused drop down to open
var popup = dijit.byId('q2_popup');
doh.t(popup && isVisible(popup), "popup visible");
// drop down list should be filtered to times starting with 12:,
// and they should appear in chronological order
var children = dojo.query(".dijitTimePickerItem", popup.domNode);
doh.is(8, children.length, "# of items in drop down");
}), 1000);
// tab away to close drop down
doh.robot.keyPress(dojo.keys.TAB, 500, {});
doh.robot.sequence(d.getTestCallback(function(){
doh.f(w._opened, "drop down closed");
}), 500);
return d;
},
tearDown: function(){
// Even if test failed, make sure drop down is closed so it doesn't interfere w/next test
w.closeDropDown();
console.log("closed drop down for " + w.id)
}
}
]);
var handler, q5;
doh.register("mouse", [
{
name: "select",
timeout: 6000,
runTest: function(){
var d = new doh.Deferred(),
popup,
toClick;
w = dijit.byId('q1');
handler = w.connect(w, 'openDropDown', d.getTestErrback(function(){
console.log("drop down opened");
w.disconnect(handler);
popup = dijit.byId('q1_popup');
var wasVisible = popup && isVisible(popup);
toClick = dojo.query(".dijitTimePickerItemInner:contains(6:45)", popup.domNode);
handler = w.connect(w, 'closeDropDown', d.getTestCallback(function(){
console.log("drop down closed");
doh.t(wasVisible, "popup visible");
doh.is(2, toClick.length, "found 6:45am and 6:45pm in drop down");
popup = dijit.byId('q1_popup');
doh.t(!popup || isHidden(popup), "popup hidden");
var val = dojo.date.stamp.toISOString(w.get('value'), {selector: "time"});
doh.is("T18:45:00", val, "should be 6:45PM");
}));
// click 6:45pm, thus selecting it and closing drop down
doh.robot.mouseMoveAt(function(){return toClick[1]; }, 500, 1);
doh.robot.mouseClick({left:true}, 500);
}));
// click down arrow, opening drop down
doh.robot.mouseMoveAt(w._buttonNode, 500, 1);
doh.robot.mouseClick({left:true}, 500);
return d;
},
tearDown: function(){
w.disconnect(handler);
w.closeDropDown();
}
}
]);
var q20;
doh.register("disabled", [
{
name: "disable",
timeout: 6000,
runTest: function(){
var d = new doh.Deferred();
q20 = dijit.byId('q20');
q20.set('disabled',true);
// click down arrow, but disabled so won't open drop down
doh.robot.mouseMoveAt(q20._buttonNode, 500, 1);
doh.robot.mouseClick({left:true}, 500);
doh.robot.typeKeys('1', 500, 200);
doh.robot.sequence(d.getTestCallback(function(){
var popup = dijit.byId('q20_popup');
doh.t(!popup || isHidden(popup), "popup hidden");
var val = dojo.date.stamp.toISOString(q20.get('value'), {selector: "time"});
doh.is("T17:45:00", val, "should be 5:45PM");
}), 1000);
return d;
},
tearDown: function(){
q20.set('disabled',false);
q20.closeDropDown();
}
},
{
name: "readOnly",
timeout: 6000,
runTest: function(){
var d = new doh.Deferred();
q20 = dijit.byId('q20');
q20.set('readOnly',true);
// click down arrow, but readonly so won't open drop down
doh.robot.mouseMoveAt(q20._buttonNode, 500, 1);
doh.robot.mouseClick({left:true}, 500);
doh.robot.typeKeys('1', 500, 200);
doh.robot.sequence(d.getTestCallback(function(){
var popup = dijit.byId('q20_popup');
doh.t(!popup || isHidden(popup), "popup hidden");
var val = dojo.date.stamp.toISOString(q20.get('value'), {selector: "time"});
doh.is("T17:45:00", val, "should be 5:45PM");
}), 1000);
return d;
},
tearDown: function(){
q20.set('readOnly',false);
q20.closeDropDown();
}
}
]);
var q21;
doh.register("Regression tests for 18201", [
{
name: "set Date value",
timeout: 1000,
runTest: function(){
var q21 = dijit.byId("q21"),
testDate = new Date();
q21.set('value', testDate);
var value = q21.get('value');
doh.assertTrue(value != null, "Unable to set Date value");
}
},
{
name: "compare Date value",
timeout: 1000,
runTest: function(){
var q21 = dijit.byId("q21"),
testDate = new Date();
q21.set('value', testDate);
var widgetDate = q21.get('value');
doh.assertEqual(0, q21.compare(testDate, widgetDate), "Invalid date comparison")
}
}
]);
doh.register("limited drop down range", {
name: "9 to 5",
timeout: 10000,
runTest: function(){
var d = new doh.Deferred();
w = dijit.byId('q22');
// open drop down
w.focus();
doh.robot.keyPress(dojo.keys.DOWN_ARROW, 1000, {});
doh.robot.sequence(d.getTestCallback(function(){
var popup = dijit.byId('q22_popup');
doh.t(isVisible(popup), "popup visible");
doh.is(9, popup.containerNode.children.length, "# of entries in drop down")
}), 500);
return d;
},
tearDown: function(){
// Even if test failed, make sure drop down is closed so it doesn't interfere w/next test
w.closeDropDown();
}
});
doh.run();
});
</script>
</head>
</html>