dojox
Version:
Dojo eXtensions, a rollup of many useful sub-projects and varying states of maturity – from very stable and robust, to alpha and experimental. See individual projects contain README files for details.
268 lines (254 loc) • 10.7 kB
HTML
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8"/>
<meta name="viewport"
content="width=device-width,initial-scale=1,maximum-scale=1,minimum-scale=1,user-scalable=no"/>
<meta name="apple-mobile-web-app-capable" content="yes"/>
<title>SpinWheelDatePicker</title>
<script type="text/javascript"
src="../../../deviceTheme.js" data-dojo-config="mblThemeFiles: ['base','SpinWheel']"></script>
<script type="text/javascript"
src="../../../../../dojo/dojo.js" data-dojo-config="async: true, parseOnLoad: true"></script>
<script type="text/javascript">
var onYearSet, onMonthSet, onDaySet;
require([
"dojo/ready", "dijit/registry", "doh/runner", "dojo/_base/array",
"dojo/dom-class", "dojox/mobile", "dojox/mobile/compat", "dojox/mobile/parser",
"dojox/mobile/SpinWheelDatePicker"],
function(ready, registry, runner, array, domClass){
var onYearSetCounter = 0, onMonthSetCounter = 0, onDaySetCounter = 0,
yearWatchCounter = 0, monthWatchCounter = 0, dayWatchCounter = 0;
var initCounters, checkCounters;
onYearSet = function(){
onYearSetCounter++;
};
onMonthSet = function(){
onMonthSetCounter++;
};
onDaySet = function(){
onDaySetCounter++;
};
var initCounters = function(){
onYearSetCounter = onMonthSetCounter = onDaySetCounter = 0;
yearWatchCounter = monthWatchCounter = dayWatchCounter = 0;
};
ready(function(){
var picker = registry.byId("picker1"),
yearSlot = picker.slots[0],
monthSlot = picker.slots[1],
daySlot = picker.slots[2];
yearSlot.watch("value", function(name, oldVal, newVal){
yearWatchCounter++;
});
monthSlot.watch("value", function(name, oldVal, newVal){
monthWatchCounter++;
});
daySlot.watch("value", function(name, oldVal, newVal){
dayWatchCounter++;
});
var showCounters = function(txt){
// Just for debugging.
console.log("==============================");
if(txt) console.log(txt + ":");
console.log("yearSetCounter: " + onYearSetCounter);
console.log("monthSetCounter: " + onMonthSetCounter);
console.log("daySetCounter: " + onDaySetCounter);
console.log("yearWatchCounter: " + yearWatchCounter);
console.log("monthWatchCounter: " + monthWatchCounter);
console.log("dayWatchCounter: " + dayWatchCounter);
console.log("==============================");
};
var checkCounters = function(
expectedOnYearSetCounter, expectedOnMonthSetCounter, expectedOnDaySetCounter,
expectedYearWatchCounter, expectedMonthWatchCounter, expectedDayWatchCounter){
// showCounters();
runner.assertEqual(expectedOnYearSetCounter, onYearSetCounter, "Unexpected onYearSetCounter");
runner.assertEqual(expectedOnMonthSetCounter, onMonthSetCounter, "Unexpected onMonthSetCounter");
runner.assertEqual(expectedOnDaySetCounter, onDaySetCounter, "Unexpected onDaySetCounter");
runner.assertEqual(expectedYearWatchCounter, yearWatchCounter, "Unexpected yearWatchCounter");
runner.assertEqual(expectedMonthWatchCounter, monthWatchCounter, "Unexpected monthWatchCounter");
runner.assertEqual(expectedDayWatchCounter, dayWatchCounter, "Unexpected dayWatchCounter");
};
var checkSlotValues = function(expectedYear, expectedMonth, expectedDay){
runner.assertEqual(expectedYear, picker.slots[0].get("value"), "Unexpected value of year slot");
runner.assertEqual(expectedDay, picker.slots[2].get("value"), "Unexpected value of day slot");
// For the month, note that the label (and value) of the month slot is
// localized, and is also browser-dependant (for instance, on IE8 in English
// locale, the value for the fifth month is "may", while on other browsers
// it is "May". Hence, in this test, instead of comparing directly the
// value of the slot with a given string ("May"), we start from the month
// number and we compare the current value of the slot with the label
// at the corresponding index. Thus the test is independent on locale
// and browser localization of month names.
var monthSlot = picker.slots[1];
var expectedMonthLabel = monthSlot.labels[expectedMonth - 1];
runner.assertEqual(expectedMonthLabel, monthSlot.get("value"), "Unexpected value of month slot");
};
var checkGrayedDaySlots = function(minGrayDay, title){
minGrayDay--; // index 0 holds for day 1
var daySlot = picker.slots[2];
var child, i;
array.forEach(daySlot.panelNodes, function(panel){
for(i = 0; i < minGrayDay; i++){
child = panel.childNodes[i];
runner.assertFalse(domClass.contains(child, "mblSpinWheelSlotLabelGray"),
" Day " + (i + 1) + " should NOT be grayed. " +
"Actual child.className: " + child.className + " (" + title + ")");
}
});
array.forEach(daySlot.panelNodes, function(panel){
for(i = minGrayDay; i < panel.childNodes.length; i++){
child = panel.childNodes[i];
runner.assertTrue(domClass.contains(child, "mblSpinWheelSlotLabelGray"),
" Day " + (i + 1) + " should be grayed. " +
"Actual child.className: " + child.className + " (" + title + ")");
}
});
};
// Test case for #16502
runner.register("dojox.mobile.test.doh.SpinWheelTests", [
{
name: "SpinWheelTest1",
timeout: 4000,
runTest: function(){
picker.set('value', '2020-06-06');
// setTimeout used because the handlers onYearSet, onMonthSet
// and onDaySet are called asynchronously
var d = new runner.Deferred();
setTimeout(function(){
initCounters();
// ensure year, month, and day change:
picker.set('value', '2019-05-05');
// setTimeout used because the handlers onYearSet, onMonthSet
// and onDaySet are called asynchronously
setTimeout(d.getTestCallback(function(){
// notifications for year, month and day
checkCounters(1, 1, 1, 1, 1, 1);
checkSlotValues("2019", 5/*"May"*/, "5");
}), 1000);
}, 1000);
return d;
}
},
{
name: "SpinWheelTest2",
timeout: 4000,
runTest: function(){
picker.set('value', '2020-06-06');
// setTimeout used because the handlers onYearSet, onMonthSet
// and onDaySet are called asynchronously
var d = new runner.Deferred();
setTimeout(function(){
initCounters();
// now only the year changes
picker.set('value', '2021-06-06');
// setTimeout used because the handlers onYearSet, onMonthSet
// and onDaySet are called asynchronously
setTimeout(d.getTestCallback(function(){
// notifications for year, not for month and day
checkCounters(1, 0, 0, 1, 0, 0);
checkSlotValues("2021", 6/*"Jun"*/, "6");
}), 1000);
}, 1000);
return d;
}
},
{
name: "SpinWheelTest3",
timeout: 4000,
runTest: function(){
picker.set('value', '2013-01-31');
// setTimeout used because the handlers onYearSet, onMonthSet
// and onDaySet are called asynchronously
var d = new runner.Deferred();
setTimeout(function(){
initCounters();
// now change the month from Jan to Feb
// The labels/values being localized, let's set
var februaryLabel = picker.slots[1].labels[1]; // the second label is for February
picker.slots[1].set("value", februaryLabel);
// setTimeout used because the handlers onYearSet, onMonthSet
// and onDaySet are called asynchronously
setTimeout(d.getTestCallback(function(){
// notifications for month and day, not for year
checkCounters(0, 1, 1, 0, 1, 1);
// Check that changing the month also changes the day value
// to the last day of Feb. 2012 (leap year, hence last day is 29).
checkSlotValues("2013", 2/*"Feb"*/, "28");
checkGrayedDaySlots(29, "SpinWheelTest3"); // grayed out starting with day 29
}), 1000);
}, 1000);
return d;
}
},
{
name: "SpinWheelTest4",
timeout: 4000,
runTest: function(){
picker.set('value', '2012-02-29');
// setTimeout used because the handlers onYearSet, onMonthSet
// and onDaySet are called asynchronously
var d = new runner.Deferred();
setTimeout(function(){
initCounters();
// now change the year to 2013
picker.slots[0].set("value", "2013");
// setTimeout used because the handlers onYearSet, onMonthSet
// and onDaySet are called asynchronously
setTimeout(d.getTestCallback(function(){
// notifications for year and day, not for month
checkCounters(1, 0, 1, 1, 0, 1);
// Check that changing the year also changes the day value
// to the last day of Feb. 2013 (non leap year, hence last day is 28).
checkSlotValues("2013", 2/*"Feb"*/, "28");
checkGrayedDaySlots(29, "SpinWheelTest4"); // grayed out starting with day 29
}), 1000);
}, 1000);
return d;
}
},
{
name: "SpinWheelTest5",
timeout: 4000,
runTest: function(){
picker.set('value', '2012-02-29');
// setTimeout used because the handlers onYearSet, onMonthSet
// and onDaySet are called asynchronously
var d = new runner.Deferred();
setTimeout(function(){
initCounters();
// now try to change the day to Feb. 31 which is an invalid date
picker.slots[2].spin(-2);
// setTimeout used because the handlers onYearSet, onMonthSet
// and onDaySet are called asynchronously
setTimeout(d.getTestCallback(function(){
// no notifications for year, month or day
checkCounters(0, 0, 0, 0, 0, 0);
// Check that the slots kept their initial value after trying
// to set an invalid day
checkSlotValues("2012", 2/*"Feb"*/, "29");
checkGrayedDaySlots(30, "SpinWheelTest5"); // grayed out starting with day 30
}), 1000);
}, 1000);
return d;
}
}
]);
runner.run();
});
});
</script>
</head>
<body style="visibility:hidden;">
<div data-dojo-type="dojox/mobile/View">
<form>
<div data-dojo-type="dojox/mobile/Heading">
SpinWheel
</div>
<div id="picker1" data-dojo-type="dojox/mobile/SpinWheelDatePicker"
data-dojo-props="onYearSet: onYearSet, onMonthSet: onMonthSet, onDaySet: onDaySet"></div>
</form>
</div>
</body>
</html>