[etwist] fix handling of multiple files per field
html5 permits multiple files uploads, which can be expressed as::
<input type='file' multiple='multiple' />
This changeset avoids previous crash. Nothing is changed when a single file is
uploaded (backward compat is thus preserved). When multiple files are uploaded
for a single html input tag, the corresponding web request form key receives a
list of tuples like [('filename-1', IStream1), ('filename-2', IStream2), ...].
closes #2847207.
$(document).ready(function() {
module("datetime");
test("test full datetime", function() {
equals(cw.utils.toISOTimestamp(new Date(1986, 3, 18, 10, 30, 0, 0)),
'1986-04-18 10:30:00');
});
test("test only date", function() {
equals(cw.utils.toISOTimestamp(new Date(1986, 3, 18)), '1986-04-18 00:00:00');
});
test("test null", function() {
equals(cw.utils.toISOTimestamp(null), null);
});
module("parsing");
test("test basic number parsing", function() {
var d = strptime('2008/08/08', '%Y/%m/%d');
same(datetuple(d), [2008, 8, 8, 0, 0]);
d = strptime('2008/8/8', '%Y/%m/%d');
same(datetuple(d), [2008, 8, 8, 0, 0]);
d = strptime('8/8/8', '%Y/%m/%d');
same(datetuple(d), [8, 8, 8, 0, 0]);
d = strptime('0/8/8', '%Y/%m/%d');
same(datetuple(d), [0, 8, 8, 0, 0]);
d = strptime('-10/8/8', '%Y/%m/%d');
same(datetuple(d), [-10, 8, 8, 0, 0]);
d = strptime('-35000', '%Y');
same(datetuple(d), [-35000, 1, 1, 0, 0]);
});
test("test custom format parsing", function() {
var d = strptime('2008-08-08', '%Y-%m-%d');
same(datetuple(d), [2008, 8, 8, 0, 0]);
d = strptime('2008 - ! 08: 08', '%Y - ! %m: %d');
same(datetuple(d), [2008, 8, 8, 0, 0]);
d = strptime('2008-08-08 12:14', '%Y-%m-%d %H:%M');
same(datetuple(d), [2008, 8, 8, 12, 14]);
d = strptime('2008-08-08 1:14', '%Y-%m-%d %H:%M');
same(datetuple(d), [2008, 8, 8, 1, 14]);
d = strptime('2008-08-08 01:14', '%Y-%m-%d %H:%M');
same(datetuple(d), [2008, 8, 8, 1, 14]);
});
module("sliceList");
test("test slicelist", function() {
var list = ['a', 'b', 'c', 'd', 'e', 'f'];
same(sliceList(list, 2), ['c', 'd', 'e', 'f']);
same(sliceList(list, 2, -2), ['c', 'd']);
same(sliceList(list, -3), ['d', 'e', 'f']);
same(sliceList(list, 0, -2), ['a', 'b', 'c', 'd']);
same(sliceList(list), list);
});
module("formContents", {
setup: function() {
$('#main').append('<form id="test-form"></form>');
}
});
// XXX test fckeditor
test("test formContents", function() {
$('#test-form').append('<input name="input-text" ' +
'type="text" value="toto" />');
$('#test-form').append('<textarea rows="10" cols="30" '+
'name="mytextarea">Hello World!</textarea> ');
$('#test-form').append('<input name="choice" type="radio" ' +
'value="yes" />');
$('#test-form').append('<input name="choice" type="radio" ' +
'value="no" checked="checked"/>');
$('#test-form').append('<input name="check" type="checkbox" ' +
'value="yes" />');
$('#test-form').append('<input name="check" type="checkbox" ' +
'value="no" checked="checked"/>');
$('#test-form').append('<select id="theselect" name="theselect" ' +
'multiple="multiple" size="2"></select>');
$('#theselect').append('<option selected="selected" ' +
'value="foo">foo</option>' +
'<option value="bar">bar</option>');
//Append an unchecked radio input : should not be in formContents list
$('#test-form').append('<input name="unchecked-choice" type="radio" ' +
'value="one" />');
$('#test-form').append('<input name="unchecked-choice" type="radio" ' +
'value="two"/>');
same(formContents($('#test-form')[0]), [
['input-text', 'mytextarea', 'choice', 'check', 'theselect'],
['toto', 'Hello World!', 'no', 'no', 'foo']
]);
});
});