web/test/jstests/test_utils.js
author Aurelien Campeas <aurelien.campeas@logilab.fr>
Mon, 24 Jun 2013 19:00:40 +0200
changeset 9147 01124cfd4b1f
parent 8879 982a49239420
child 9259 68cde7431c2c
permissions -rw-r--r--
[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']
      ]);
  });
});