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
512 lines (433 loc) • 16.8 kB
HTML
<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>