0
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
0
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
0
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
0
- <title>Prototype Unit test file</title>
0
- <meta http-equiv="content-type" content="text/html; charset=utf-8" />
0
- <script src="../../dist/prototype.js" type="text/javascript"></script>
0
- <script src="../lib/unittest.js" type="text/javascript"></script>
0
- <link rel="stylesheet" href="../test.css" type="text/css" />
0
- <style type="text/css" media="screen">
0
- #testcss1 { font-size:11px; color: #f00; }
0
- #testcss2 { font-size:12px; color: #0f0; display: none; }
0
-<h1>Prototype Unit test file</h1>
0
- Test of utility functions in form.js
0
-<div id="testlog"> </div>
0
-<form id="form" method="get" action="fixtures/empty.js">
0
- <input type="text" name="val1" id="input_enabled" value="4" />
0
- <div>This is not a form element</div>
0
- <input type="text" name="val2" id="input_disabled" disabled="disabled" value="5" />
0
- <input type="submit" />
0
- <input type="text" name="action" value="blah" />
0
-<div id="form_wrapper">
0
- <form id="form_selects" action="fixtures/empty.js">
0
- <option value="1" selected="selected">One</option>
0
- <option value="2">Two</option>
0
- <option value="3">Three</option>
0
- <select id="multiSel1" name="vm[]" multiple="multiple">
0
- <option id="multiSel1_opt1" value="1" selected="selected">One</option>
0
- <option id="multiSel1_opt2" value="2">Two</option>
0
- <option id="multiSel1_opt3" value="3" selected="selected">Three</option>
0
- <option selected="selected">One</option>
0
- <option value="2">Two</option>
0
- <option value="3">Three</option>
0
- <fieldset id="form_fieldset">
0
- <select name="nvm[]" multiple="multiple">
0
- <option selected="selected">One</option>
0
- <option selected="selected">Three</option>
0
- <option value="" selected="selected">One</option>
0
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
0
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
0
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
0
+ <title>Prototype Unit test file</title>
0
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
0
+ <script src="../../dist/prototype.js" type="text/javascript"></script>
0
+ <script src="../lib/unittest.js" type="text/javascript"></script>
0
+ <link rel="stylesheet" href="../test.css" type="text/css" />
0
+ <style type="text/css" media="screen">
0
+ #testlog { margin-bottom:2em }
0
+ <h1>Prototype Unit test file</h1>
0
+ Test of utility functions in form.js
0
+ <div id="testlog"> </div>
0
+ <form id="form" method="get" action="fixtures/empty.js">
0
+ <input type="text" name="val1" id="input_enabled" value="4" />
0
+ <div>This is not a form element</div>
0
+ <input type="text" name="val2" id="input_disabled" disabled="disabled" value="5" />
0
+ <input type="submit" name="first_submit" value="Commit it!" />
0
+ <input type="submit" name="second_submit" value="Delete it!" />
0
+ <input type="text" name="action" value="blah" />
0
+ <form id="bigform" method="get" action="fixtures/empty.js">
0
+ <input type="text" name="dummy" id="dummy_disabled" disabled="disabled"/>
0
+ <input type="submit" name="commit" id="submit" />
0
+ <input type="button" name="clicky" value="click me" />
0
+ <input type="reset" name="revert" />
0
+ <input type="text" name="greeting" id="focus_text" value="Hello" />
0
+ <!-- some edge cases in serialization -->
0
+ <div id="value_checks">
0
+ <input name="twin" type="text" value="" />
0
+ <input name="twin" type="text" value="siamese" />
0
+ <!-- Rails checkbox hack with hidden input: -->
0
+ <input name="checky" type="checkbox" id="checkbox_hack" value="1" />
0
+ <input name="checky" type="hidden" value="0" />
0
+ <!-- all variations of SELECT controls -->
0
+ <div id="selects_wrapper">
0
+ <option value="1" selected="selected">One</option>
0
<option value="2">Two</option>
0
<option value="3">Three</option>
0
- <select name="evm[]" multiple="multiple">
0
- <option value="" selected="selected">One</option>
0
- <option selected="selected">Three</option>
0
+ <select id="multiSel1" name="vm[]" multiple="multiple">
0
+ <option id="multiSel1_opt1" value="1" selected="selected">One</option>
0
+ <option id="multiSel1_opt2" value="2">Two</option>
0
+ <option id="multiSel1_opt3" value="3" selected="selected">Three</option>
0
+ <option selected="selected">One</option>
0
+ <option value="2">Two</option>
0
+ <option value="3">Three</option>
0
+ <fieldset id="selects_fieldset">
0
+ <select name="nvm[]" multiple="multiple">
0
+ <option selected="selected">One</option>
0
+ <option selected="selected">Three</option>
0
+ <option value="" selected="selected">One</option>
0
+ <option value="2">Two</option>
0
+ <option value="3">Three</option>
0
+ <select name="evm[]" multiple="multiple">
0
+ <option value="" selected="selected">One</option>
0
+ <option selected="selected">Three</option>
0
+ <select name="tf_selectOne"><option selected="selected"></option><option>1</option></select>
0
+ <textarea name="tf_textarea"></textarea>
0
+ <input type="checkbox" name="tf_checkbox" value="on" />
0
+ <select name="tf_selectMany" multiple="multiple"></select>
0
+ <input type="text" name="tf_text" />
0
+ <div>This is not a form element</div>
0
+ <input type="radio" name="tf_radio" value="on" />
0
+ <input type="hidden" name="tf_hidden" />
0
+ <input type="password" name="tf_password" />
0
+ <form id="form_focus_hidden" style="display: none">
0
- <input type="text" name="twin" value="" />
0
- <input type="text" name="twin" value="siamese" />
0
- <!-- Rails checkbox hack with hidden input: -->
0
- <input type="checkbox" id="checkbox_hack" name="checky" value="1" />
0
- <input name="checky" type="hidden" value="0" />
0
-<form id="form_getelements">
0
- <select id="tf_selectOne" name="tf_selectOne"><option></option><option>1</option></select>
0
- <textarea id="tf_textarea" name="tf_textarea"></textarea>
0
- <input type="checkbox" id="tf_checkbox" name="tf_checkbox" value="on" />
0
- <select id="tf_selectMany" name="tf_selectMany" multiple="multiple"></select>
0
- <input type="text" id="tf_text" name="tf_text" />
0
- <div>This is not a form element</div>
0
- <input type="radio" id="tf_radio" name="tf_radio" value="on" />
0
- <input type="hidden" id="tf_hidden" name="tf_hidden" />
0
- <input type="password" id="tf_password" name="tf_password" />
0
- <input type="text" name="focus_disabled" id="focus_disabled" disabled="disabled"/>
0
- <input type="submit" name="focus_submit" id="focus_submit" />
0
- <input type="button" name="focus_button" id="focus_button" value="button" />
0
- <input type="reset" name="focus_reset" id="focus_reset" />
0
- <input type="text" name="focus_text" id="focus_text" value="Hello" />
0
-<form id="form_focus_hidden" style="display: none">
0
-<script type="text/javascript" language="javascript" charset="utf-8">
0
- var callbackCounter = 0;
0
+ <!-- tabindexed forms -->
0
+ <p><input type="text" disabled="disabled" id="ffe_disabled" /></p>
0
+ <input type="hidden" id="ffe_hidden" />
0
+ <input type="checkbox" id="ffe_checkbox" />
0
+ <p><input type="text" disabled="disabled" id="ffe_ti_disabled" /></p>
0
+ <input type="hidden" id="ffe_ti_hidden" />
0
+ <input type="checkbox" id="ffe_ti_checkbox" />
0
+ <input type="submit" id="ffe_ti_submit" tabindex="1" />
0
+ <p><input type="text" disabled="disabled" id="ffe_ti2_disabled" /></p>
0
+ <input type="hidden" id="ffe_ti2_hidden" />
0
+ <input type="checkbox" id="ffe_ti2_checkbox" tabindex="0" />
0
+ <input type="submit" id="ffe_ti2_submit" tabindex="1" />
0
+ <script type="text/javascript" charset="utf-8">
0
+ var callbackCounter = 0;
0
+ // sweet sweet additional assertions
0
+ Object.extend(Test.Unit.Testcase.prototype, {
0
+ assertEnabled: function() {
0
+ for (var i = 0, element; element = arguments[i]; i++) {
0
+ this.assert(!$(element).disabled, Test.Unit.inspect(element) + ' was disabled');
0
+ assertDisabled: function() {
0
+ for (var i = 0, element; element = arguments[i]; i++) {
0
+ this.assert($(element).disabled, Test.Unit.inspect(element) + ' was enabled');
0
// Make sure to set defaults in the test forms, as some browsers override this
0
// with previously entered values on page reload
0
setup: function(){ with(this) {
0
- $('input_enabled').value = '4';
0
- $('input_disabled').value = '5';
0
- $('tf_selectOne').selectedIndex = 0;
0
- $('tf_textarea').value = '';
0
- $('tf_text').value = '';
0
- $('tf_hidden').value = '';
0
- $('tf_password').value = '';
0
- $('tf_checkbox').checked = false;
0
- $('tf_radio').checked = false;
0
+ $$('form').each(function(f){ f.reset() });
0
+ // hidden value does not reset (for some reason)
0
+ $('bigform')['tf_hidden'].value = '';
0
testDollarF: function(){ with(this) {
0
testFormEnabling: function(){ with(this) {
0
- var form = $('form_focus')
0
- var input1 = form.focus_disabled
0
- var input2 = form.focus_text
0
- assert(input1.disabled)
0
- assert(!input2.disabled)
0
+ var form = $('bigform')
0
+ var input1 = $('dummy_disabled');
0
+ var input2 = $('focus_text');
0
- assert(input1.disabled)
0
- assert(input2.disabled)
0
+ assertDisabled(input1);
0
+ assertEnabled(input2);
0
- assert(!input1.disabled)
0
- assert(!input2.disabled)
0
- assert(input1.disabled)
0
+ assertDisabled(input1, input2);
0
+ assertEnabled(input1, input2);
0
+ assertDisabled(input1);
0
- var fieldset = $('form_fieldset')
0
- var fields = fieldset.immediateDescendants()
0
- assert(fields.all(function(select){ return !select.disabled }))
0
+ var fieldset = $('selects_fieldset');
0
+ var fields = fieldset.immediateDescendants();
0
+ fields.each(function(select) { assertEnabled(select) });
0
-
assert(fields.all(function(select){ return select.disabled }))0
+
fields.each(function(select) { assertDisabled(select) });0
-
assert(fields.all(function(select){ return !select.disabled }))0
+
fields.each(function(select) { assertEnabled(select) });0
testFormElementEnabling: function(){ with(this) {
0
- assert($('input_disabled').disabled);
0
- $('input_disabled').enable();
0
- assert(!$('input_disabled').disabled);
0
- $('input_disabled').disable();
0
- assert($('input_disabled').disabled);
0
+ var field = $('input_disabled');
0
+ assertDisabled(field);
0
- assert(!$('input_enabled').disabled);
0
- $('input_enabled').disable();
0
- assert($('input_enabled').disabled);
0
- $('input_enabled').enable();
0
- assert(!$('input_enabled').disabled);
0
+ var field = $('input_enabled');
0
+ assertDisabled(field);
0
// due to the lack of a DOM hasFocus() API method,
0
// we're simulating things here a little bit
0
testFormActivating: function(){ with(this) {
0
// Form.focusFirstElement shouldn't focus disabled elements
0
- var element = Form.findFirstElement('form_focus');
0
- assertEqual('focus_submit',element.id);
0
+ var element = Form.findFirstElement('bigform');
0
+ assertEqual('submit', element.id);
0
// Test IE doesn't select text on buttons
0
- Form.focusFirstElement('
form_focus');
0
+ Form.focusFirstElement('
bigform');
0
if(document.selection) assertEqual('', getSelection(element));
0
// Form.Element.activate shouldn't select text on buttons
0
testFormGetElements: function() {with(this) {
0
- var formElements = $('form_getelements').getElements();
0
- assertEqual(8, formElements.length);
0
- assertEqual('tf_selectOne', formElements[0].id);
0
- assertEqual('tf_textarea', formElements[1].id);
0
- assertEqual('tf_checkbox', formElements[2].id);
0
- assertEqual('tf_selectMany', formElements[3].id);
0
- assertEqual('tf_text', formElements[4].id);
0
- assertEqual('tf_radio', formElements[5].id);
0
- assertEqual('tf_hidden', formElements[6].id);
0
- assertEqual('tf_password', formElements[7].id);
0
+ var elements = Form.getElements('various'),
0
+ names = $w('tf_selectOne tf_textarea tf_checkbox tf_selectMany tf_text tf_radio tf_hidden tf_password');
0
+ assertEnumEqual(names, elements.pluck('name'))
0
testFormGetInputs: function() {with(this){
0
- var form = $('form_getelements'), formInputs = Form.getInputs(form);
0
- assertEqual(formInputs.length, 5);
0
- assert(formInputs instanceof Array);
0
- assert(formInputs.all(function(input) { return (input.tagName == "INPUT"); }));
0
- var formInputs2 = form.getInputs();
0
- assertEqual(formInputs2.length, 5);
0
- assert(formInputs2 instanceof Array);
0
- assert(formInputs2.all(function(input) { return (input.tagName == "INPUT"); }));
0
+ [form.getInputs(), Form.getInputs(form)].each(function(inputs){
0
+ assertEqual(inputs.length, 5);
0
+ assert(inputs instanceof Array);
0
+ assert(inputs.all(function(input) { return (input.tagName == "INPUT"); }));
0
+ testFormFindFirstElement: function() {with(this) {
0
+ assertEqual($('ffe_checkbox'), $('ffe').findFirstElement());
0
+ assertEqual($('ffe_ti_submit'), $('ffe_ti').findFirstElement());
0
+ assertEqual($('ffe_ti2_checkbox'), $('ffe_ti2').findFirstElement());
0
testFormSerialize: function() {with(this){
0
- assertEqual('tf_selectOne=&tf_textarea=&tf_text=&tf_hidden=&tf_password=',
0
- Form.serialize('form_getelements'));
0
+ // form is initially empty
0
+ var form = $('bigform');
0
+ var expected = { tf_selectOne:'', tf_textarea:'', tf_text:'', tf_hidden:'', tf_password:'' };
0
+ assertHashEqual(expected, Form.serialize('various', true));
0
- $('tf_selectOne').selectedIndex = 1;
0
- $('tf_textarea').value = "boo hoo!";
0
- $('tf_text').value = "123öäü";
0
- $('tf_hidden').value = "moo%hoo&test";
0
- $('tf_password').value = 'sekrit code';
0
- $('tf_checkbox').checked = true;
0
- $('tf_radio').checked = true;
0
- 'tf_selectOne=1&tf_textarea=boo%20hoo!&tf_checkbox=on&tf_text=123%C3%B6%C3%A4%C3%BC&'+
0
- 'tf_radio=on&tf_hidden=moo%25hoo%26test&tf_password=sekrit%20code',
0
- Form.serialize('form_getelements'));
0
+ form['tf_selectOne'].selectedIndex = 1;
0
+ form['tf_textarea'].value = "boo hoo!";
0
+ form['tf_text'].value = "123öäü";
0
+ form['tf_hidden'].value = "moo%hoo&test";
0
+ form['tf_password'].value = 'sekrit code';
0
+ form['tf_checkbox'].checked = true;
0
+ form['tf_radio'].checked = true;
0
+ var expected = { tf_selectOne:1, tf_textarea:"boo hoo!", tf_text:"123öäü",
0
+ tf_hidden:"moo%hoo&test", tf_password:'sekrit code', tf_checkbox:'on', tf_radio:'on' }
0
+ assertHashEqual(expected, Form.serialize('various', true));
0
+ assertEnumEqual(Hash.toQueryString(expected).split('&').sort(),
0
+ Form.serialize('various').split('&').sort());
0
+ assertEqual('string', typeof $('form').serialize({ hash:false }));
0
// Checks that disabled element is not included in serialized form.
0
$('input_enabled').enable();
0
- assertEqual('val1=4&action=blah', Form.serialize('form'));
0
+ assertHashEqual({ val1:4, action:'blah', first_submit:'Commit it!' },
0
+ $('form').serialize(true));
0
- // Checks that select-related serializations work just fine
0
- assertEqual('vu=1&vm%5B%5D=1&vm%5B%5D=3&nvu=One&nvm%5B%5D=One'+
0
- '&nvm%5B%5D=Three&evu=&evm%5B%5D=&evm%5B%5D=Three',
0
- Form.serialize('form_selects'));
0
// should not eat empty values for duplicate names
0
$('checkbox_hack').checked = false;
0
- var data = Form.serialize('
form_array', true);
0
+ var data = Form.serialize('
value_checks', true);
0
assertEnumEqual(['', 'siamese'], data['twin']);
0
assertEqual('0', data['checky']);
0
$('checkbox_hack').checked = true;
0
- assertEnumEqual($w('1 0'), Form.serialize('form_array', true)['checky']);
0
- testFormSerializeWorksWithNonFormElements: function() {with(this) {
0
- assertEqual('nvm%5B%5D=One&nvm%5B%5D=Three&evu=&evm%5B%5D=&evm%5B%5D=Three', Form.serialize('form_fieldset'));
0
- assertEqual('vu=1&vm%5B%5D=1&vm%5B%5D=3&nvu=One&nvm%5B%5D=One&nvm%5B%5D=Three&evu=&evm%5B%5D=&evm%5B%5D=Three', Form.serialize('form_wrapper'));
0
+ assertEnumEqual($w('1 0'), Form.serialize('value_checks', true)['checky']);
0
+ // all kinds of SELECT controls
0
+ var params = Form.serialize('selects_fieldset', true);
0
+ var expected = { 'nvm[]':['One', 'Three'], evu:'', 'evm[]':['', 'Three'] };
0
+ assertHashEqual(expected, params);
0
+ params = Form.serialize('selects_wrapper', true);
0
+ assertHashEqual(Object.extend(expected, { vu:1, 'vm[]':[1, 3], nvu:'One' }), params);
0
+ // explicit submit button
0
+ assertHashEqual({ val1:4, action:'blah', second_submit:'Delete it!' },
0
+ $('form').serialize({ submit: 'second_submit' }));
0
+ assertHashEqual({ val1:4, action:'blah' },
0
+ $('form').serialize({ submit: false }));
0
+ assertHashEqual({ val1:4, action:'blah' },
0
+ $('form').serialize({ submit: 'inexistent' }));
0
testFormMethodsOnExtendedElements: function() {with(this) {
0
- assertEqual(Form.serialize('form'), $('form').serialize());
0
+ assertEqual(Form.serialize('form'), form.serialize());
0
assertEqual(Form.Element.serialize('input_enabled'), $('input_enabled').serialize());
0
- assertNotEqual(
$('form').serialize, $('input_enabled').serialize);
0
+ assertNotEqual(
form.serialize, $('input_enabled').serialize);
0
Element.addMethods('INPUT', { anInputMethod: function(input) { return 'input' } });
0
Element.addMethods('SELECT', { aSelectMethod: function(select) { return 'select' } });
0
- document.getElementById('tf_text')._extendedByPrototype = false;
0
- document.getElementById('tf_selectOne')._extendedByPrototype = false;
0
+ var input = form['tf_text'], select = form['tf_selectOne'];
0
+ input._extendedByPrototype = select._extendedByPrototype = false;
0
- assert($('tf_text').anInputMethod);
0
- assert(!$('tf_text').aSelectMethod);
0
- assertEqual('input', $('tf_text').anInputMethod());
0
+ assert($(input).anInputMethod);
0
+ assert(!input.aSelectMethod);
0
+ assertEqual('input', input.anInputMethod());
0
- assert($('tf_selectOne').aSelectMethod);
0
- assert(!$('tf_selectOne').anInputMethod);
0
- assertEqual('select', $('tf_selectOne').aSelectMethod());
0
+ assert($(select).aSelectMethod);
0
+ assert(!select.anInputMethod);
0
+ assertEqual('select', select.aSelectMethod());
0
testFormRequest: function() {with(this) {
0
- var request = $("form_selects").request();
0
- assert(!$("form_selects").hasAttribute("method"));
0
- assert(request.url.endsWith("fixtures/empty.js"));
0
- assertEqual("post", request.method);
0
- assertEqual("vu=1&vm%5B%5D=1&vm%5B%5D=3&nvu=One&nvm%5B%5D=One&nvm%5B%5D=Three&evu=&evm%5B%5D=&evm%5B%5D=Three", Hash.toQueryString(request.options.parameters));
0
- request = $("form_selects").request({method: "put", parameters: {val2: "hello", val3: "world"}});
0
- assertEqual("post", request.method);
0
- assertEqual("put", request.parameters['_method']);
0
- assertEqual("vu=1&vm%5B%5D=1&vm%5B%5D=3&nvu=One&nvm%5B%5D=One&nvm%5B%5D=Three&evu=&evm%5B%5D=&evm%5B%5D=Three&val2=hello&val3=world", Hash.toQueryString(request.options.parameters));
0
request = $("form").request();
0
assert($("form").hasAttribute("method"));
0
- assert(request.url.
endsWith("fixtures/empty.js?val1=4&action=blah"));
0
+ assert(request.url.
include("fixtures/empty.js?val1=4"));
0
assertEqual("get", request.method);
0
- request = $("form").request({
method: "post"});
0
+ request = $("form").request({
method: "put", parameters: {val2: "hello"} });
0
assert(request.url.endsWith("fixtures/empty.js"));
0
- assertEqual("val1=4&action=blah", Hash.toQueryString(request.options.parameters));
0
+ assertEqual(4, request.options.parameters['val1']);
0
+ assertEqual('hello', request.options.parameters['val2']);
0
assertEqual("post", request.method);
0
+ assertEqual("put", request.parameters['_method']);
0
+ // with empty action attribute
0
+ request = $("ffe").request({ method: 'post' });
0
+ assert(request.url.include("unit/form.html"),
0
+ 'wrong default action for form element with empty action attribute');
0
testFormElementMethodsChaining: function(){ with(this) {
0
var methods = $w('clear activate disable enable'),
0
- formElements = $('form
_getelements').getElements();
0
+ formElements = $('form
').getElements();
0
methods.each(function(method){
0
formElements.each(function(element){
0
var returned = element[method]();
0
assertIdentical(element, returned);
0
+ testSetValue: function(){ with(this) {
0
+ var input = $('input_enabled'), oldValue = input.getValue();
0
+ assertEqual(input, input.setValue('foo'), 'setValue chaining is broken');
0
+ assertEqual('foo', input.getValue(), 'value improperly set');
0
+ input.setValue(oldValue);
0
+ assertEqual(oldValue, input.getValue(), 'value improperly restored to original');
0
+ input = $('checkbox_hack');
0
+ input.setValue(false);
0
+ assertEqual(null, input.getValue(), 'checkbox should be unchecked');
0
+ assertEqual("1", input.getValue(), 'checkbox should be checked');
0
+ input = $('bigform')['vu'];
0
+ assertEqual('3', input.getValue(), 'single select option improperly set');
0
+ assertEqual('1', input.getValue());
0
+ input = $('bigform')['vm[]'];
0
+ input.setValue(['2', '3']);
0
+ assertEnumEqual(['2', '3'], input.getValue(),
0
+ 'multiple select options improperly set');
0
+ input.setValue(['1', '3']);
0
+ assertEnumEqual(['1', '3'], input.getValue());