123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896 |
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
- <head>
- <title>script.aculo.us Unit test file</title>
- <meta http-equiv="content-type" content="text/html; charset=utf-8" />
- <script src="../../lib/prototype.js" type="text/javascript"></script>
- <script src="../../src/scriptaculous.js" type="text/javascript"></script>
- <script src="../../src/unittest.js" type="text/javascript"></script>
- <link rel="stylesheet" href="../test.css" type="text/css" />
- </head>
- <body>
- <h1>script.aculo.us Unit test file</h1>
- <p>
- Tests for <code>Ajax.InPlaceEditor</code> and <code>Ajax.InPlaceCollectionEditor</code> in controls.js
- </p>
- <!-- Log output -->
- <div id="testlog"> </div>
- <h1 id="tobeedited">To be edited</h1>
- <a id="tobeeditedEditControl" href="#">edit</a>
- <p id="newtbe">New to be edited</p>
- <p id="newtbe_external">External control for it</p>
- <p id="contains_ampersand">Me & Myself</p>
- <div id="tobeeditedMultiLine">First line<br/>
- Second line<br/>
- Third line</div>
- <!-- Tests follow -->
- <script type="text/javascript" language="javascript" charset="utf-8">
- // <![CDATA[
- var IPCE_COLLECTION = [
- ['tbe', 'To be edited'],
- ['ntbe', 'New to be edited'],
- ['ntbe2', 'New to be edited 2'],
- ['ntbe3', 'New to be edited 3']
- ];
- new Test.Unit.Runner({
- setup: function() { with(this) {
- inPlaceEditor = new Ajax.InPlaceEditor($('tobeedited'), '_ajax_inplaceeditor_result.html', {
- externalControl: $('tobeeditedEditControl'),
- ajaxOptions: {method: 'get'} //override so we can use a static for the result
- });
- inPlaceEditorMultiLine = new Ajax.InPlaceEditor($('tobeeditedMultiLine'), '_ajax_inplaceeditor_result.html', {
- ajaxOptions: {method: 'get'} //override so we can use a static for the result
- });
- }},
- teardown: function() { with(this) {
- inPlaceEditor.dispose();
- inPlaceEditorMultiLine.dispose();
- }},
- // Original-version tests, still pass thx to backward compatibility
- // Integration test, tests the entire cycle
- testInPlaceEditor: function() { with(this) {
- Event.simulateMouse('tobeedited','click');
- assertHidden($('tobeedited'));
- assertNotNull(document.forms[0]);
- assertEqual("cancel", document.forms[0].lastChild.innerHTML);
- assertVisible(document.forms[0]);
- Event.simulateMouse(document.forms[0].lastChild,'click');
- assertNull(document.forms[0]);
- assertVisible($('tobeedited'));
- assertEqual("transparent", Element.getStyle('tobeedited','background-color'));
- Event.simulateMouse('tobeedited','mouseover');
- Event.simulateMouse('tobeedited','click');
- assertEqual("INPUT", document.forms[0].firstChild.tagName);
- assertEqual("To be edited", document.forms[0].firstChild.value);
- assertEqual("INPUT", document.forms[0].childNodes[1].tagName);
- assertEqual("submit", document.forms[0].childNodes[1].type);
- assertEqual("To be edited", document.forms[0].firstChild.value);
- assert(Element.hasClassName(document.forms[0], 'inplaceeditor-form'),
- "form doesn't have proper class: " + document.forms[0].className);
- Event.simulateMouse(document.forms[0].childNodes[1],'click');
- assertVisible($('tobeedited'));
- assertEqual("Saving...", $('tobeedited').innerHTML);
- assertEqual("transparent", Element.getStyle('tobeedited','background-color'));
- assert(Element.hasClassName($('tobeedited'), 'inplaceeditor-saving'),
- "doesn't have saving class");
- wait(1000, function() {
- assertEqual("Server received: To be edited", $('tobeedited').innerHTML);
- assertNull(document.forms[0]);
- assertVisible($('tobeedited'));
- assert(!Element.hasClassName($('tobeedited'), 'inplaceeditor-saving'));
- });
- }},
- testHovering: function() { with(this) {
- Event.simulateMouse('tobeedited','mouseover');
- assertEqual("rgb(255, 255, 153)", Element.getStyle('tobeedited','background-color'));
- Event.simulateMouse('tobeedited','mouseout');
- wait(1100, function() {
- assertEqual("transparent", Element.getStyle('tobeedited','background-color'),
- "should be transparent after mouse leaves element");
- Event.simulateMouse('tobeedited','click');
- })
- }},
- testLoadsTextFromServer: function() { with(this) {
- inPlaceEditor.options.loadTextURL = '_ajax_inplaceeditor_text.html';
- inPlaceEditor.enterEditMode();
- assertEqual('Loading...', inPlaceEditor._form.value.value);
- assert(inPlaceEditor._form.value.disabled);
- assert(Element.hasClassName(inPlaceEditor._form, 'inplaceeditor-loading'));
- wait(1000, function() {
- assertEqual('Text from server', inPlaceEditor._form.value.value);
- assert(!inPlaceEditor._form.value.disabled);
- });
- }},
- testDisposesProperly: function() { with(this) {
- assertEqual("transparent", Element.getStyle('tobeedited','background-color'));
- inPlaceEditor.dispose();
- assertEqual("transparent", Element.getStyle('tobeedited','background-color'));
- assertVisible($('tobeedited'));
- Event.simulateMouse('tobeedited','click');
- assertVisible($('tobeedited'));
- }},
- testUsesTextAreaWhenMoreThanOneRows: function() { with(this) {
- inPlaceEditor.options.rows = 5;
- inPlaceEditor.enterEditMode();
- assertEqual("TEXTAREA", document.forms[0].firstChild.tagName);
- assertEqual("BR", document.forms[0].childNodes[1].tagName);
- }},
- testCanSpecifyAllTextsThroughOptions: function() { with(this) {
- // swedish translation ;-)
- inPlaceEditor.options.okText = "spara";
- inPlaceEditor.options.cancelText = "avbryt";
- inPlaceEditor.options.savingText = "Sparar...";
- inPlaceEditor.enterEditMode();
- assertEqual("spara", document.forms[0].lastChild.previousSibling.value);
- assertEqual("avbryt", document.forms[0].lastChild.innerHTML);
- inPlaceEditor.showSaving();
- assertEqual("Sparar...", $('tobeedited').innerHTML);
- }},
- testCanSpecifyFormIdThroughOptions: function() { with(this) {
- inPlaceEditor.enterEditMode();
- // default form id
- assertEqual("tobeedited-inplaceeditor", document.forms[0].id);
- inPlaceEditor.leaveEditMode();
- inPlaceEditor.options.formId = "myFormId";
- inPlaceEditor.enterEditMode();
- assertEqual("myFormId", document.forms[0].id);
- }},
- testCantEditWhileSaving: function() { with(this) {
- inPlaceEditor.prepareSubmission();
- Event.simulateMouse('tobeedited','mouseover');
- assertEqual("transparent", Element.getStyle('tobeedited','background-color'));
- Event.simulateMouse('tobeedited','click');
- assertVisible($('tobeedited'));
- }},
- testCallbackFunctionGetsCalled: function() { with(this) {
- var called = false;
- inPlaceEditor.options.callback = function(form) {
- called = true;
- }
- Event.simulateMouse('tobeedited','click');
- Event.simulateMouse(document.forms[0].childNodes[1],'click');
- assert(called, "callback was not called");
- }},
- testCanUseExternalElementToGoIntoEditMode: function() { with(this) {
- Event.simulateMouse('tobeeditedEditControl','click');
- assertNotNull(document.forms[0], "external control didn't work");
- // doesn't work if you click it again while in edit mode
- Event.simulateMouse('tobeeditedEditControl','click');
- assertNull(document.forms[1], "external control created two forms");
- assertNotVisible($('tobeeditedEditControl'));
- Event.simulateMouse(document.forms[0].childNodes[2],'click');
- assertVisible($('tobeeditedEditControl'));
- }},
- // Rewritten-version tests
- testControlOptions: function() {with(this) {
- // Default, then explicit default-equivalent, settings
- [{}, { okControl: 'button', cancelControl: 'link' }].each(function(opts) {
- var ipe = new Ajax.InPlaceEditor('newtbe', '', opts);
- Event.simulateMouse('newtbe', 'click');
- var submits = $('newtbe-inplaceeditor').getInputs('submit');
- assertEqual(1, submits.length, 'Not just one submit');
- assertEqual(Ajax.InPlaceEditor.DefaultOptions.okText, submits[0].value, 'Incorrect button label');
- assert(submits[0].hasClassName('editor_ok_button'), 'Missing class name on ok button');
- var links = $$('#newtbe-inplaceeditor a');
- assertEqual(1, links.length, 'Not just one link');
- assertEqual(Ajax.InPlaceEditor.DefaultOptions.cancelText, links[0].firstChild.nodeValue, 'Incorrect cancel link text');
- assert(links[0].href.endsWith('#'), 'Incorrect cancel link href');
- assert(links[0].hasClassName('editor_cancel_link'), 'Missing class name on cancel link');
- ipe.dispose();
- });
- // Reverse: ok link, cancel button
- var ipe = new Ajax.InPlaceEditor('newtbe', '', { okControl: 'link', cancelControl: 'button' });
- Event.simulateMouse('newtbe', 'click');
- var links = $$('#newtbe-inplaceeditor a');
- assertEqual(1, links.length, 'Not just one link');
- assertEqual(Ajax.InPlaceEditor.DefaultOptions.okText, links[0].firstChild.nodeValue, 'Incorrect ok link text');
- assert(links[0].href.endsWith('#'), 'Incorrect ok link href');
- assert(links[0].hasClassName('editor_ok_link'), 'Missing class name on ok link');
- var submits = $('newtbe-inplaceeditor').getInputs('submit');
- assertEqual(1, submits.length, 'Not just one submit');
- assertEqual(Ajax.InPlaceEditor.DefaultOptions.cancelText, submits[0].value, 'Incorrect button label');
- assert(submits[0].hasClassName('editor_cancel_button'), 'Missing class name on cancel button');
- ipe.dispose();
- // Full links
- ipe = new Ajax.InPlaceEditor('newtbe', '', { okControl: 'link' });
- Event.simulateMouse('newtbe', 'click');
- var links = $$('#newtbe-inplaceeditor a');
- assertEqual(2, links.length, 'There should be two links');
- assertEqual(Ajax.InPlaceEditor.DefaultOptions.okText, links[0].firstChild.nodeValue, 'Incorrect ok link text');
- assertEqual(Ajax.InPlaceEditor.DefaultOptions.cancelText, links[1].firstChild.nodeValue, 'Incorrect cancel link text');
- assert(links[0].href.endsWith('#'), 'Incorrect ok link href');
- assert(links[1].href.endsWith('#'), 'Incorrect cancel link href');
- assert(links[0].hasClassName('editor_ok_link'), 'Missing class name on ok link');
- assert(links[1].hasClassName('editor_cancel_link'), 'Missing class name on cancel link');
- var submits = $('newtbe-inplaceeditor').getInputs('submit');
- assertEqual(0, submits.length, 'There should be no submit');
- ipe.dispose();
- // Full buttons
- ipe = new Ajax.InPlaceEditor('newtbe', '', { cancelControl: 'button' });
- Event.simulateMouse('newtbe', 'click');
- var submits = $('newtbe-inplaceeditor').getInputs('submit');
- assertEqual(2, submits.length, 'There should be two submits');
- assertEqual(Ajax.InPlaceEditor.DefaultOptions.okText, submits[0].value, 'Incorrect ok button text');
- assertEqual(Ajax.InPlaceEditor.DefaultOptions.cancelText, submits[1].value, 'Incorrect cancel button text');
- assert(submits[0].hasClassName('editor_ok_button'), 'Missing class name on ok button');
- assert(submits[1].hasClassName('editor_cancel_button'), 'Missing class name on cancel button');
- var links = $$('#newtbe-inplaceeditor a');
- assertEqual(0, links.length, 'There should be no link');
- ipe.dispose();
- // No cancel
- ipe = new Ajax.InPlaceEditor('newtbe', '', { cancelControl: false });
- Event.simulateMouse('newtbe', 'click');
- var submits = $('newtbe-inplaceeditor').getInputs('submit');
- assertEqual(1, submits.length, 'Not just one submit');
- var links = $$('#newtbe-inplaceeditor a');
- assertEqual(0, links.length, 'There should be no link');
- ipe.dispose();
- // No OK
- ipe = new Ajax.InPlaceEditor('newtbe', '', { okControl: false });
- Event.simulateMouse('newtbe', 'click');
- var submits = $('newtbe-inplaceeditor').getInputs('submit');
- assertEqual(0, submits.length, 'There should be no submit');
- var links = $$('#newtbe-inplaceeditor a');
- assertEqual(1, links.length, 'Not just one link');
- ipe.dispose();
- // Nothing
- ipe = new Ajax.InPlaceEditor('newtbe', '', { okControl: false, cancelControl: false });
- Event.simulateMouse('newtbe', 'click');
- var submits = $('newtbe-inplaceeditor').getInputs('submit');
- assertEqual(0, submits.length, 'There should be no submit');
- var links = $$('#newtbe-inplaceeditor a');
- assertEqual(0, links.length, 'There should be no link');
- ipe.dispose();
- // Texts: default mode
- ipe = new Ajax.InPlaceEditor('newtbe', '', { okControl: false, cancelControl: false });
- Event.simulateMouse('newtbe', 'click');
- var submits = $('newtbe-inplaceeditor').getInputs('submit');
- assertEqual(0, submits.length, 'There should be no submit');
- var links = $$('#newtbe-inplaceeditor a');
- assertEqual(0, links.length, 'There should be no link');
- ipe.dispose();
- // Texts: before w/ controls
- ipe = new Ajax.InPlaceEditor('newtbe', '', { textBeforeControls: '[' });
- Event.simulateMouse('newtbe', 'click');
- var text = $('newtbe-inplaceeditor').childNodes[1];
- assertEqual(3, text.nodeType, 'Missing/misplaced initial text');
- assertEqual('[', text.nodeValue, 'Incorrect text');
- ipe.dispose();
- // Texts: after w/ controls
- ipe = new Ajax.InPlaceEditor('newtbe', '', { textAfterControls: ']' });
- Event.simulateMouse('newtbe', 'click');
- var text = $('newtbe-inplaceeditor').childNodes[3];
- assertEqual(3, text.nodeType, 'Missing/misplaced final text');
- assertEqual(']', text.nodeValue, 'Incorrect text');
- ipe.dispose();
- // Texts: between w/ controls
- ipe = new Ajax.InPlaceEditor('newtbe', '', { textBetweenControls: ' ' });
- Event.simulateMouse('newtbe', 'click');
- var text = $('newtbe-inplaceeditor').childNodes[2];
- assertEqual(3, text.nodeType, 'Missing/misplaced middle text');
- assertEqual(' ', text.nodeValue, 'Incorrect text');
- ipe.dispose();
- // Texts: before w/ no control
- ipe = new Ajax.InPlaceEditor('newtbe', '', { textBeforeControls: '[', okControl: false, cancelControl: false });
- Event.simulateMouse('newtbe', 'click');
- var nodes = $('newtbe-inplaceeditor').childNodes;
- assertEqual(1, nodes.length, 'Too many nodes in the form.');
- ipe.dispose();
- // Texts: after w/ no control
- ipe = new Ajax.InPlaceEditor('newtbe', '', { textAfterControls: ']', okControl: false, cancelControl: false });
- Event.simulateMouse('newtbe', 'click');
- var nodes = $('newtbe-inplaceeditor').childNodes;
- assertEqual(1, nodes.length, 'Too many nodes in the form.');
- ipe.dispose();
- // Texts: between w/ less than two controls
- ipe = new Ajax.InPlaceEditor('newtbe', '', { textBetweenControls: ' ', okControl: false });
- Event.simulateMouse('newtbe', 'click');
- var nodes = $('newtbe-inplaceeditor').childNodes;
- assertEqual(2, nodes.length, 'The form should have only two nodes (edit+cancel)');
- assertEnumEqual(['input', 'a'], $A(nodes).pluck('tagName').invoke('toLowerCase'), 'Incorrect nodes');
- ipe.dispose();
- }},
- testExternalControlOnly: function() {with(this) {
- var ipe = new Ajax.InPlaceEditor('newtbe', '_ajax_inplaceeditor_result2.html', {
- externalControl: 'newtbe_external'
- });
- Event.simulateMouse('newtbe', 'click');
- assert(ipe._editing, 'Clicking on the element should turn editable.');
- ipe.leaveEditMode();
- Event.simulateMouse('newtbe_external', 'click');
- assert(ipe._editing, 'Clicking on the external control should turn editable.');
- ipe.dispose();
- ipe = new Ajax.InPlaceEditor('newtbe', '_ajax_inplaceeditor_result2.html', {
- externalControl: 'newtbe_external', externalControlOnly: true
- });
- Event.simulateMouse('newtbe', 'click');
- assert(!ipe._editing, 'Clicking on the element should not turn editable.');
- Event.simulateMouse('newtbe_external', 'click');
- assert(ipe._editing, 'Clicking on the external control should turn editable.');
- ipe.dispose();
- }},
- testNewCallbacks: function() {with(this) {
- var called = [];
- var opts = {
- onEnterHover: function() { called.push('onEnterHover') },
- onEnterEditMode: function() { called.push('onEnterEditMode') },
- onLeaveEditMode: function() { called.push('onLeaveEditMode') },
- callback: function(form) {
- called.push('callback');
- return form.serialize();
- },
- onFailure: function() { called.push('onFailure') },
- onComplete: function() { called.push('onComplete') },
- onLeaveEditMode: function() { called.push('onLeaveEditMode') }
- }
- // Proper success
- $('newtbe').update('New to be edited');
- var ipe = new Ajax.InPlaceEditor('newtbe', '_ajax_inplaceeditor_result2.html', opts);
- Event.simulateMouse('newtbe', 'mouseover');
- Event.simulateMouse('newtbe', 'click');
- Event.simulateKey('newtbe', 'keydown', { keyCode: Event.KEY_RETURN });
- var postUpdateHTML;
- wait(1000, function() {
- assertEnumEqual(['onEnterHover', 'onEnterEditMode', 'callback', 'onLeaveEditMode', 'onComplete'],
- called.uniq(), 'Incorrect callback sequence');
- postUpdateHTML = $('newtbe').innerHTML.strip();
- assertEqual('New to be edited - edited', postUpdateHTML, 'Update trouble');
- ipe.dispose();
- // Failure
- called.clear();
- // Any ideas? Requesting file:// URLs on non-existent stuff doesn't trigger A.U's onFailure...
- });
- }},
- testCallbackFunctionReturnTypes: function() { with(this) {
- var params = [];
- var responder = {
- onCreate: function(req) {
- params.push(req.options.parameters);
- }
- };
- Ajax.Responders.register(responder);
- var ipe = new Ajax.InPlaceEditor('newtbe', '_ajax_inplaceeditor_result2.html', {
- callback: function(form) {
- return 'foo=bar';
- }
- });
- Event.simulateMouse('newtbe', 'click');
- Event.simulateKey('newtbe', 'keydown', { keyCode: Event.KEY_RETURN });
- wait(200, function() {
- assert(params[0] && params[0].foo == 'bar');
- ipe.dispose();
- ipe = new Ajax.InPlaceEditor('newtbe', '_ajax_inplaceeditor_result2.html', {
- callback: function(form) {
- return { bar: '?', 'r&d': 42 };
- }
- });
- Event.simulateMouse('newtbe', 'click');
- Event.simulateKey('newtbe', 'keydown', { keyCode: Event.KEY_RETURN });
- wait(200, function() {
- assert(params[1] && params[1].bar == '?' && params[1]['r&d'] == 42);
- ipe.dispose();
- Ajax.Responders.unregister(responder);
- })
- });
- }},
- testHtmlResponse: function() {with(this) {
- // Default (true) -> A.U w/ evalScripts: true
- $('newtbe').update('New to be edited');
- var ipe = new Ajax.InPlaceEditor('newtbe', '_ajax_inplaceeditor_result2.html');
- Event.simulateMouse('newtbe', 'mouseover');
- Event.simulateMouse('newtbe', 'click');
- Event.simulateKey('newtbe', 'keydown', { keyCode: Event.KEY_RETURN });
- var postUpdateHTML;
- wait(1000, function() {
- postUpdateHTML = $('newtbe').innerHTML.strip();
- assertEqual('New to be edited - edited', postUpdateHTML, 'Should have updated contents');
- ipe.dispose();
- // Explicit htmlResponse: true -> A.U w/ evalScripts: true
- $('newtbe').update('New to be edited');
- ipe = new Ajax.InPlaceEditor('newtbe', '_ajax_inplaceeditor_result2.html', { htmlResponse: true });
- Event.simulateMouse('newtbe', 'mouseover');
- Event.simulateMouse('newtbe', 'click');
- Event.simulateKey('newtbe', 'keydown', { keyCode: Event.KEY_RETURN });
- wait(1000, function() {
- postUpdateHTML = $('newtbe').innerHTML.strip();
- assertEqual('New to be edited - edited', postUpdateHTML, 'Should have updated contents');
- ipe.dispose();
- // Explicit htmlResponse: false -> A.R
- $('newtbe').update('New to be edited');
- ipe = new Ajax.InPlaceEditor('newtbe', '_ajax_inplaceeditor_result2.html', { htmlResponse: false });
- Event.simulateMouse('newtbe', 'mouseover');
- Event.simulateMouse('newtbe', 'click');
- Event.simulateKey('newtbe', 'keydown', { keyCode: Event.KEY_RETURN });
- wait(1000, function() {
- postUpdateHTML = $('newtbe').innerHTML.strip();
- assertEqual(ipe.options.savingText, postUpdateHTML, 'Should not have updated contents');
- ipe.dispose();
- });
- });
- });
- }},
- testSingleOrMultipleRows: function() {with(this) {
- // Single-line value, rows <= 1 -> 1
- $('newtbe').update('New to be edited');
- var ipe = new Ajax.InPlaceEditor('newtbe',
- '_ajax_inplaceeditor_result2.html');
- Event.simulateMouse('newtbe', 'mouseover');
- Event.simulateMouse('newtbe', 'click');
- assertEqual('input', ipe._controls.editor.tagName.toLowerCase());
- ipe.dispose();
- // Single-line value, rows > 1 (2) -> 2
- var ipe = new Ajax.InPlaceEditor('newtbe',
- '_ajax_inplaceeditor_result2.html', { rows: 2 });
- Event.simulateMouse('newtbe', 'mouseover');
- Event.simulateMouse('newtbe', 'click');
- assertEqual('textarea', ipe._controls.editor.tagName.toLowerCase());
- assertEqual(2, ipe._controls.editor.rows);
- ipe.dispose();
- // Multiple-line value, rows <= 1, autoRows default (3) -> 3
- $('newtbe').update('Line 1\nLine 2\nLine 3');
- var ipe = new Ajax.InPlaceEditor('newtbe',
- '_ajax_inplaceeditor_result2.html');
- Event.simulateMouse('newtbe', 'mouseover');
- Event.simulateMouse('newtbe', 'click');
- assertEqual('textarea', ipe._controls.editor.tagName.toLowerCase());
- assertEqual(Ajax.InPlaceEditor.DefaultOptions.autoRows, ipe._controls.editor.rows);
- ipe.dispose();
- // Multiple-line value, rows <= 1, autoRows custom (5) -> 5
- var ipe = new Ajax.InPlaceEditor('newtbe',
- '_ajax_inplaceeditor_result2.html', { autoRows: 5 });
- Event.simulateMouse('newtbe', 'mouseover');
- Event.simulateMouse('newtbe', 'click');
- assertEqual('textarea', ipe._controls.editor.tagName.toLowerCase());
- assertEqual(5, ipe._controls.editor.rows);
- ipe.dispose();
- // Multiple-line value, rows > 1 (2), autoRows default (3) -> 2
- var ipe = new Ajax.InPlaceEditor('newtbe',
- '_ajax_inplaceeditor_result2.html', { rows: 2 });
- Event.simulateMouse('newtbe', 'mouseover');
- Event.simulateMouse('newtbe', 'click');
- assertEqual('textarea', ipe._controls.editor.tagName.toLowerCase());
- assertEqual(2, ipe._controls.editor.rows);
- ipe.dispose();
- // Multiple-line value, rows > 1 (2), autoRows custom (5) -> 2
- var ipe = new Ajax.InPlaceEditor('newtbe',
- '_ajax_inplaceeditor_result2.html', { rows: 2, autoRows: 5 });
- Event.simulateMouse('newtbe', 'mouseover');
- Event.simulateMouse('newtbe', 'click');
- assertEqual('textarea', ipe._controls.editor.tagName.toLowerCase());
- assertEqual(2, ipe._controls.editor.rows);
- ipe.dispose();
- }},
- testFormCustomizationCallback: function() {with(this) {
- var ipe = new Ajax.InPlaceEditor('newtbe', '_ajax_inplaceeditor_result2.html', {
- onFormCustomization: function(ipe, form) {
- form.appendChild(new Element('input', { type: 'text', name: 'test', value: 'foobar' }));
- }
- });
- Event.simulateMouse('newtbe', 'mouseover');
- Event.simulateMouse('newtbe', 'click');
- assertEqual('foobar', Form.serialize(ipe._form, true).test, 'Custom field not present');
- ipe.dispose();
- }},
- testPostCreationBehavior: function() {with(this) {
- var focused = false, activated = false;
- function override(name, fx) {
- arguments.callee.backups[name] = Field.Methods[name];
- Field.Methods[name] = fx;
- };
- override.backups = {};
- function restore() {
- $A(arguments).each(function(n) {
- Field.Methods[name] = override.backups[name];
- });
- Element.addMethods();
- };
- override('activate', function(elt) {
- override.backups['activate'](elt);
- activated = true;
- });
- override('focus', function(elt) { focused = true; });
- Element.addMethods();
- // fieldPostCreation default (activate)
- var ipe = new Ajax.InPlaceEditor('newtbe',
- '_ajax_inplaceeditor_result2.html');
- Event.simulateMouse('newtbe', 'mouseover');
- Event.simulateMouse('newtbe', 'click');
- assert(focused && activated, "Should be focused and activated (resp. " + focused + " and " + activated + ')');
- ipe.dispose();
- // fieldPostCreation == 'focus'
- focused = activated = false;
- ipe = new Ajax.InPlaceEditor('newtbe',
- '_ajax_inplaceeditor_result2.html', { fieldPostCreation: 'focus' });
- Event.simulateMouse('newtbe', 'mouseover');
- Event.simulateMouse('newtbe', 'click');
- assert(focused && !activated, "Should be focused, not activated (resp. " + focused + " and " + activated + ')');
- ipe.dispose();
- // fieldPostCreation == false
- focused = activated = false;
- ipe = new Ajax.InPlaceEditor('newtbe',
- '_ajax_inplaceeditor_result2.html', { fieldPostCreation: false });
- Event.simulateMouse('newtbe', 'mouseover');
- Event.simulateMouse('newtbe', 'click');
- assert(!focused && !activated, "Should be neither focused nor activated (resp. " + focused + " and " + activated + ')');
- ipe.dispose();
- // fieldPostCreation == non-false yet neither activate nor focus -> default
- focused = activated = false;
- ipe = new Ajax.InPlaceEditor('newtbe',
- '_ajax_inplaceeditor_result2.html', { fieldPostCreation: 'foobar' });
- Event.simulateMouse('newtbe', 'mouseover');
- Event.simulateMouse('newtbe', 'click');
- assert(focused && activated, "Should be focused and activated (resp. " + focused + " and " + activated + ')');
- ipe.dispose();
- restore('activate', 'focus');
- }},
- testResponseTagStripping: function() {with(this) {
- // stripLoadedTextTags default (false)
- var ipe = new Ajax.InPlaceEditor('newtbe',
- '_ajax_inplaceeditor_result2.html',
- { loadTextURL: '_ajax_inplaceeditor_tagged.html' });
- Event.simulateMouse('newtbe', 'mouseover');
- Event.simulateMouse('newtbe', 'click');
- wait(1000, function() {
- assertEqual('<span>New to be edited - edited</span>', ipe._controls.editor.value.strip());
- ipe.dispose();
- // stripLoadedTextTags == true
- ipe = new Ajax.InPlaceEditor('newtbe',
- '_ajax_inplaceeditor_result2.html',
- { loadTextURL: '_ajax_inplaceeditor_tagged.html',
- stripLoadedTextTags: true });
- Event.simulateMouse('newtbe', 'mouseover');
- Event.simulateMouse('newtbe', 'click');
- wait(1000, function() {
- assertEqual('New to be edited - edited', ipe._controls.editor.value.strip());
- ipe.dispose();
- });
- });
- }},
- testSubmitOnBlur: function() {with(this) {
- // submitOnBlur default (false)
- $('newtbe').update('To be edited');
- var ipe = new Ajax.InPlaceEditor('newtbe',
- '_ajax_inplaceeditor_result2.html');
- Event.simulateMouse('newtbe', 'mouseover');
- Event.simulateMouse('newtbe', 'click');
- ipe._controls.editor.blur();
- wait(1000, function() {
- assertEqual('To be edited', ipe._controls.editor ? ipe._controls.editor.value : '');
- ipe.dispose();
- // submitOnBlur == true
- ipe = new Ajax.InPlaceEditor('newtbe',
- '_ajax_inplaceeditor_result2.html', { submitOnBlur: true });
- Event.simulateMouse('newtbe', 'mouseover');
- Event.simulateMouse('newtbe', 'click');
- ipe._controls.editor.blur();
- wait(1200, function() {
- assertEqual('New to be edited - edited', $('newtbe').innerHTML.strip());
- ipe.dispose();
- });
- });
- }},
- testEscReturnKeys: function() {with(this) {
- // No controls, Esc
- var ipe = new Ajax.InPlaceEditor('newtbe',
- '_ajax_inplaceeditor_result2.html', { okControl: false, cancelControl: false});
- Event.simulateMouse('newtbe', 'mouseover');
- Event.simulateMouse('newtbe', 'click');
- Event.simulateKey('newtbe', 'keydown', { keyCode: Event.KEY_ESC });
- assert(!ipe._editing, 'Esc should have disabled IPE');
- ipe.dispose();
- // Cancel control, Esc
- var ipe = new Ajax.InPlaceEditor('newtbe',
- '_ajax_inplaceeditor_result2.html', { okControl: false });
- Event.simulateMouse('newtbe', 'mouseover');
- Event.simulateMouse('newtbe', 'click');
- Event.simulateKey('newtbe', 'keydown', { keyCode: Event.KEY_ESC });
- assert(!ipe._editing, 'Esc should have disabled IPE');
- ipe.dispose();
- // OK control, Esc
- var ipe = new Ajax.InPlaceEditor('newtbe',
- '_ajax_inplaceeditor_result2.html', { cancelControl: false });
- Event.simulateMouse('newtbe', 'mouseover');
- Event.simulateMouse('newtbe', 'click');
- Event.simulateKey('newtbe', 'keydown', { keyCode: Event.KEY_ESC });
- assert(!ipe._editing, 'Esc should have disabled IPE');
- ipe.dispose();
- // Both controls, Esc
- ipe = new Ajax.InPlaceEditor('newtbe',
- '_ajax_inplaceeditor_result2.html');
- Event.simulateMouse('newtbe', 'mouseover');
- Event.simulateMouse('newtbe', 'click');
- Event.simulateKey('newtbe', 'keydown', { keyCode: Event.KEY_ESC });
- assert(!ipe._editing, 'Esc should have disabled IPE');
- ipe.dispose();
- // No controls, Return
- $('newtbe').update('New to be edited');
- ipe = new Ajax.InPlaceEditor('newtbe',
- '_ajax_inplaceeditor_result2.html', { okControl: false, cancelControl: false });
- Event.simulateMouse('newtbe', 'mouseover');
- Event.simulateMouse('newtbe', 'click');
- Event.simulateKey('newtbe', 'keydown', { keyCode: Event.KEY_RETURN });
- wait(1000, function() {
- assertEqual('New to be edited - edited', $('newtbe').innerHTML.strip());
- ipe.dispose();
- // Cancel control, Return
- $('newtbe').update('New to be edited');
- ipe = new Ajax.InPlaceEditor('newtbe',
- '_ajax_inplaceeditor_result2.html', { okControl: false });
- Event.simulateMouse('newtbe', 'mouseover');
- Event.simulateMouse('newtbe', 'click');
- Event.simulateKey('newtbe', 'keydown', { keyCode: Event.KEY_RETURN });
- wait(1000, function() {
- assertEqual('New to be edited - edited', $('newtbe').innerHTML.strip());
- ipe.dispose();
- // OK control, Return
- $('newtbe').update('New to be edited');
- ipe = new Ajax.InPlaceEditor('newtbe',
- '_ajax_inplaceeditor_result2.html', { cancelControl: false });
- Event.simulateMouse('newtbe', 'mouseover');
- Event.simulateMouse('newtbe', 'click');
- Event.simulateKey('newtbe', 'keydown', { keyCode: Event.KEY_RETURN });
- wait(1000, function() {
- assertEqual('New to be edited - edited', $('newtbe').innerHTML.strip());
- ipe.dispose();
- // Both controls, Return
- $('newtbe').update('New to be edited');
- ipe = new Ajax.InPlaceEditor('newtbe',
- '_ajax_inplaceeditor_result2.html');
- Event.simulateMouse('newtbe', 'mouseover');
- Event.simulateMouse('newtbe', 'click');
- Event.simulateKey('newtbe', 'keydown', { keyCode: Event.KEY_RETURN });
- wait(1000, function() {
- assertEqual('New to be edited - edited', $('newtbe').innerHTML.strip());
- ipe.dispose();
- });
- });
- });
- });
- }},
- testIPCEBasic: function() {with(this) {
- // Basic creation, population and choice.
- $('newtbe').update('ntbe');
- var fieldValue = '';
- var ipe = new Ajax.InPlaceCollectionEditor('newtbe',
- '_ajax_inplaceeditor_result2.html', { paramName: 'test',
- collection: IPCE_COLLECTION, callback: function(f, value) {
- fieldValue = value;
- }, onComplete: Prototype.emptyFunction
- });
- Event.simulateMouse('newtbe', 'mouseover');
- Event.simulateMouse('newtbe', 'click');
- var editor = ipe._controls.editor;
- assertEqual('test', editor.name);
- assertEqual('select', editor.tagName.toLowerCase());
- assertEqual(IPCE_COLLECTION.length, editor.options.length, 'Incorrect amount of options');
- for (var index = 0; index < IPCE_COLLECTION.length; ++index) {
- var ref = IPCE_COLLECTION[index];
- var item = editor.options[index];
- assertEqual(ref[0], item.value, 'Incorrect OPTION value');
- assertEqual(ref[1], item.text.strip(), 'Incorrect OPTION text');
- };
- assertEqual(1, editor.selectedIndex, 'Did not properly select item');
- editor.selectedIndex = 2;
- Event.simulateMouse(ipe._controls.ok, 'click');
- assertEqual('ntbe2', fieldValue);
- ipe.dispose();
- // Test the value option
- $('newtbe').update('ntbe');
- ipe = new Ajax.InPlaceCollectionEditor('newtbe',
- '_ajax_inplaceeditor_result2.html', { paramName: 'test',
- collection: IPCE_COLLECTION, onComplete: Prototype.emptyFunction,
- value: 'ntbe2'
- });
- Event.simulateMouse('newtbe', 'mouseover');
- Event.simulateMouse('newtbe', 'click');
- editor = ipe._controls.editor;
- assertEqual(2, editor.selectedIndex, 'Did not properly select item');
- ipe.dispose();
- }},
- testIPCECollectionSyntaxes: function() {with(this) {
- // Array of two-item arrays (0 = value, 1 = text)
- $('newtbe').update('ntbe');
- var ipe = new Ajax.InPlaceCollectionEditor('newtbe',
- '_ajax_inplaceeditor_result2.html', { paramName: 'test',
- collection: IPCE_COLLECTION, onComplete: Prototype.emptyFunction
- });
- Event.simulateMouse('newtbe', 'mouseover');
- Event.simulateMouse('newtbe', 'click');
- var editor = ipe._controls.editor;
- assertEqual(1, editor.selectedIndex, 'Did not properly select item');
- // (further contents testing already done in Basic)
- ipe.dispose();
- // Array of one-item arrays
- ipe = new Ajax.InPlaceCollectionEditor('newtbe',
- '_ajax_inplaceeditor_result2.html', { paramName: 'test',
- collection: [['tbe'], ['ntbe'], ['ntbe2'], ['ntbe3']],
- onComplete: Prototype.emptyFunction
- });
- Event.simulateMouse('newtbe', 'mouseover');
- Event.simulateMouse('newtbe', 'click');
- var editor = ipe._controls.editor;
- assertEqual(1, editor.selectedIndex, 'Did not properly select item');
- assertEqual('ntbe', $F(editor).strip(), 'Did not properly define text');
- ipe.dispose();
- // Array of items
- ipe = new Ajax.InPlaceCollectionEditor('newtbe',
- '_ajax_inplaceeditor_result2.html', { paramName: 'test',
- collection: ['tbe', 'ntbe', 'ntbe2', 'ntbe3'],
- onComplete: Prototype.emptyFunction
- });
- Event.simulateMouse('newtbe', 'mouseover');
- Event.simulateMouse('newtbe', 'click');
- var editor = ipe._controls.editor;
- assertEqual(1, editor.selectedIndex, 'Did not properly select item');
- assertEqual('ntbe', $F(editor).strip(), 'Did not properly define text');
- ipe.dispose();
- }},
- testIPCEAlternateTextOptions: function() {with(this) {
- // loadTextURL (check loading text, verify alternate text eventually)
- $('newtbe').update('New to be edited');
- var ipe = new Ajax.InPlaceCollectionEditor('newtbe',
- '_ajax_inplaceeditor_result2.html', { paramName: 'test',
- collection: IPCE_COLLECTION, loadTextURL: '_ajax_inplaceeditor_ipce_alt_text.html',
- onComplete: Prototype.emptyFunction
- });
- Event.simulateMouse('newtbe', 'mouseover');
- Event.simulateMouse('newtbe', 'click');
- var editor = ipe._controls.editor;
- var text = editor.options[editor.selectedIndex].text.strip();
- assertEqual(Ajax.InPlaceEditor.DefaultOptions.loadingText, text);
- wait(1200, function() {
- assertEqual(1, editor.selectedIndex, 'Did not properly select item based on alternate text.');
- ipe.dispose();
- });
- }},
- testIPCEDynamicCollectionOptions: function() {with(this) {
- // loadCollectionURL, default loadingCollectionText
- $('newtbe').update('ntbe');
- var ipe = new Ajax.InPlaceCollectionEditor('newtbe',
- '_ajax_inplaceeditor_result2.html', { paramName: 'test',
- loadCollectionURL: '_ajax_inplaceeditor_ipce_collection.js',
- onComplete: Prototype.emptyFunction
- });
- Event.simulateMouse('newtbe', 'mouseover');
- Event.simulateMouse('newtbe', 'click');
- var editor = ipe._controls.editor;
- var text = editor.options[editor.selectedIndex].text.strip();
- assertEqual(Ajax.InPlaceCollectionEditor.DefaultOptions.loadingCollectionText, text);
- wait(1000, function() {
- assertEqual(5, ipe._collection.length);
- assertEqual(2, editor.selectedIndex, 'Did not properly select item');
- ipe.dispose();
- // loadCollectionURL, custom loadingCollectionText
- $('newtbe').update('bar');
- ipe = new Ajax.InPlaceCollectionEditor('newtbe',
- '_ajax_inplaceeditor_result2.html', { paramName: 'test',
- loadCollectionURL: '_ajax_inplaceeditor_ipce_collection.js',
- loadingCollectionText: 'There we go...',
- onComplete: Prototype.emptyFunction
- });
- Event.simulateMouse('newtbe', 'mouseover');
- Event.simulateMouse('newtbe', 'click');
- editor = ipe._controls.editor;
- text = editor.options[editor.selectedIndex].text.strip();
- assertEqual('There we go...', text);
- wait(1000, function() {
- assertEqual(1, editor.selectedIndex, 'Did not properly select item');
- ipe.dispose();
- });
- });
- }},
- testIPCEATPlusDC: function() {with(this) {
- // loadCollectionURL, loadTextURL
- $('newtbe').update('Like I care');
- var ipe = new Ajax.InPlaceCollectionEditor('newtbe',
- '_ajax_inplaceeditor_result2.html', { paramName: 'test',
- loadCollectionURL: '_ajax_inplaceeditor_ipce_collection.js',
- loadingCollectionText: 'There we go...',
- loadTextURL: '_ajax_inplaceeditor_ipce_alt_text.html',
- loadingText: 'OK, so, the text...',
- onComplete: Prototype.emptyFunction
- });
- ipe._regularCFET = ipe.checkForExternalText;
- ipe.checkForExternalText = function() {
- assert(5, ipe._collection.length);
- ipe._regularCFET();
- var editor = ipe._controls.editor;
- var text = editor.options[editor.selectedIndex].text.strip();
- assertEqual('OK, so, the text...', text);
- };
- Event.simulateMouse('newtbe', 'mouseover');
- Event.simulateMouse('newtbe', 'click');
- var editor = ipe._controls.editor;
- var text = editor.options[editor.selectedIndex].text.strip();
- assertEqual('There we go...', text);
- wait(2000, function() {
- assertEqual(2, editor.selectedIndex, 'Did not properly select item');
- ipe.dispose();
- });
- }},
- testDeprecationLayer: function() {with(this) {
- // FIXME: needs to be coded yet, doesn't it?
- var ipe = new Ajax.InPlaceCollectionEditor('newtbe',
- '_ajax_inplaceeditor_result2.html', { paramName: 'test',
- okButton: false, cancelLink: false
- });
- assertIdentical(false, ipe.options.okControl, 'OK control should be disabled');
- assertIdentical(false, ipe.options.cancelControl, 'Cancel control should be disabled');
- ipe.dispose();
- ipe = new Ajax.InPlaceCollectionEditor('newtbe',
- '_ajax_inplaceeditor_result2.html', { paramName: 'test',
- okLink: true, cancelButton: true
- });
- assertEqual('link', ipe.options.okControl, 'OK control should be a link');
- assertEqual('button', ipe.options.cancelControl, 'Cancel control should be a button');
- ipe.dispose();
- ipe = new Ajax.InPlaceCollectionEditor('newtbe',
- '_ajax_inplaceeditor_result2.html', { paramName: 'test',
- highlightcolor: '#ff0000', highlightendcolor: '#00ff00'
- });
- assertEqual('#ff0000', ipe.options.highlightColor, 'Highlight color was not migrated');
- assertEqual('#00ff00', ipe.options.highlightEndColor, 'Highlight end color was not migrated');
- ipe.dispose();
- }},
- testShouldShowAmpersandsProperly: function() {with(this) {
- var ipe = new Ajax.InPlaceEditor('contains_ampersand', '', {});
- Event.simulateMouse('contains_ampersand', 'click');
- assertEqual("Me & Myself", $$('form#contains_ampersand-inplaceeditor input.editor_field')[0].value);
- ipe.dispose();
- }}
- // FIXME: add AC w/o key conflicts?
- // FIXME: doc w/ full details on what's new, what's changed, etc. + deprecation layer info.
- });
- // ]]>
- </script>
- </body>
- </html>
|