Annotation of kupu/tests/test_beforeunload.js, revision 1.1.1.1

1.1       dwinter     1: /*****************************************************************************
                      2:  *
                      3:  * Copyright (c) 2003-2005 Kupu Contributors. All rights reserved.
                      4:  *
                      5:  * This software is distributed under the terms of the Kupu
                      6:  * License. See LICENSE.txt for license text. For a list of Kupu
                      7:  * Contributors see CREDITS.txt.
                      8:  *
                      9:  *****************************************************************************/
                     10: 
                     11: // $Id: test_beforeunload.js 9982 2005-03-21 09:53:57Z yuppie $
                     12: 
                     13: // Test form beforeUnload processing
                     14: 
                     15: // The handler is careful not to use any global variables, so we have
                     16: // to work a bit to find out its class.
                     17: var BeforeUnloadHandler = window.onbeforeunload.tool.constructor;
                     18: 
                     19: function KupuBeforeUnloadTestCase() {
                     20:     this.name = 'KupuBeforeUnloadTestCase';
                     21: 
                     22:     function Submit(index) { return '<input type="submit" id="SUBMIT'+index+'" value="submit" />'; }
                     23:     // Field types to test
                     24:     this.INPUTTEXT = '<input type="text" value="42" id="INPUTTEXT" name="i1" />';
                     25:     this.INPUTCLIENT = '<input type="text" value="42" id="INPUTTEXT2" />';
                     26:     this.TEXTAREA = '<textarea id="TEXTAREA" name="i2">42</textarea>';
                     27:     this.RADIO = '<INPUT type="radio" id="radio1" name="radio" CHECKED>1-10 years old \
                     28:         <INPUT type="radio" id="radio2" name="radio">11 years old\
                     29:         <INPUT type="radio" id="radio3" name="radio">12-120 years old';
                     30:     this.BUTTON = '<input type="button" value="click me" id="BUTTON" name="b1" />';
                     31:     this.CHECKBOX = '<input type="checkbox" checked id="chk1" name="c1">Uncheck me<br>\
                     32:         <input type="checkbox" id="chk2" name="c2">check me';
                     33: 
                     34:     this.FILE = '<input type="file" id="FILE" value="hello" name="f1" />';
                     35:     
                     36:     this.HIDDEN = '<input type="hidden" id="HIDDEN" value="42" name="h1" />';
                     37:     this.HIDDEN = '<form id="FORMHIDDEN">'+this.HIDDEN+'</form>';
                     38:     
                     39:     this.IMAGE = '<input type="image" id="IMAGE" name="im1" />';
                     40:     this.PASSWORD = '<input type="password" value="secret" id="PASSWORD" name="pass1" />';
                     41:     this.RESET = '<input type="reset" id="RESET" value="reset" "name="reset1" />';
                     42:     this.SUBMIT = Submit('');
                     43:     this.SELECTONE = '<select id="SELECTONE" id="SELECT" name="select1">\
                     44:         <OPTION VALUE="1">Red\
                     45:         <OPTION VALUE="2">Green\
                     46:         <OPTION VALUE="3">Blue</SELECT>';
                     47:     this.SELECTONEA = '<select id="SELECTONE" id="SELECT" name="select2">\
                     48:         <OPTION VALUE="1">Red\
                     49:         <OPTION VALUE="2" SELECTED>Green\
                     50:         <OPTION VALUE="3">Blue</SELECT>';
                     51:     this.SELECTMULTIPLE = '<select id="SELECTMULTIPLE" id="SELECT" MULTIPLE name="select3">\
                     52:         <OPTION VALUE="1">Red\
                     53:         <OPTION VALUE="2" SELECTED>Green\
                     54:         <OPTION VALUE="3">Blue</SELECT>';
                     55:     this.FORM1 = '<form id="FORM1">'+this.INPUTTEXT+Submit(1)+'</form>';
                     56:     this.FORM2 = '<form id="FORM2">'+this.RADIO+Submit(2)+'</form>';
                     57:     this.FORM3 = '<form id="FORM3">'+this.SELECTMULTIPLE+Submit(3)+'</form>';
                     58:     this.FORMS = '<div id="DIV1">'+this.FORM1+this.FORM2+'</div>'+this.FORM3;
                     59: }
                     60: 
                     61: KupuBeforeUnloadTestCase.prototype = new TestCase;
                     62: Class = KupuBeforeUnloadTestCase.prototype;
                     63: var BeforeUnloadHandler = window.onbeforeunload.tool.constructor;
                     64: 
                     65: Class.setUp = function() {
                     66:     
                     67:     this.bu = new BeforeUnloadHandler();
                     68: };
                     69: 
                     70: Class.tearDown = function() {
                     71:     window.onbeforeunload = null;
                     72: };
                     73: 
                     74: Class.setHtml = function(fragment) {
                     75:     var testdiv = document.getElementById('testdiv');
                     76:     testdiv.innerHTML = fragment;
                     77: };
                     78: 
                     79: Class.assertNotChanged = function(id) {
                     80:     var field = document.getElementById(id);
                     81:     //this.debug("element "+id+" is "+field+" type "+field.type);
                     82:     this.assertFalse(this.bu.isElementChanged(field), "field not changed");
                     83: }
                     84: 
                     85: Class.assertChanged = function(id, newvalue) {
                     86:     var field = document.getElementById(id);
                     87:     //this.debug("element "+id+" is "+field+" type "+field.type);
                     88:     if (newvalue) field.value = newvalue;
                     89:     this.assertTrue(this.bu.isElementChanged(field), "field changed");
                     90: }
                     91: 
                     92: Class.simpleFieldTest = function(fragment, id, value) {
                     93:     this.setHtml(fragment);
                     94:     if (value) {
                     95:         this.assertChanged(id, value);
                     96:     } else {
                     97:         this.assertNotChanged(id);
                     98:     }
                     99: }
                    100: 
                    101: Class.testInputField = function() {
                    102:     this.simpleFieldTest(this.INPUTTEXT, "INPUTTEXT");
                    103:     this.simpleFieldTest(this.INPUTTEXT, "INPUTTEXT", 37);
                    104: }
                    105: 
                    106: Class.testClientIgnored = function() {
                    107:     var id = "INPUTTEXT2";
                    108:     this.setHtml(this.INPUTCLIENT);
                    109:     this.assertNotChanged(id);
                    110:     var field = document.getElementById(id);
                    111:     field.value = 25;
                    112:     this.assertNotChanged(id);
                    113:     // Give the field a name and then we pick up the change
                    114:     field.name = "ANINPUT";
                    115:     this.assertChanged(id);
                    116: }
                    117: 
                    118: Class.testTextArea = function() {
                    119:     this.simpleFieldTest(this.TEXTAREA, "TEXTAREA");
                    120:     this.simpleFieldTest(this.TEXTAREA, "TEXTAREA", 37);
                    121: }
                    122: 
                    123: Class.testRadio = function() {
                    124:     this.setHtml(this.RADIO);
                    125:     this.assertNotChanged("radio1");
                    126:     this.assertNotChanged("radio2");
                    127:     this.assertNotChanged("radio3");
                    128:     document.getElementById("radio3").checked = true;
                    129:     this.assertChanged("radio1");
                    130:     this.assertNotChanged("radio2");
                    131:     this.assertChanged("radio3");
                    132: }
                    133: 
                    134: Class.testButton = function() {
                    135:     this.simpleFieldTest(this.BUTTON, "BUTTON");
                    136: }
                    137: 
                    138: Class.testCheck = function() {
                    139:     this.setHtml(this.CHECKBOX);
                    140:     this.assertNotChanged("chk1");
                    141:     this.assertNotChanged("chk2");
                    142:     document.getElementById("chk1").checked = false;
                    143:     document.getElementById("chk2").checked = true;
                    144:     this.assertChanged("chk1");
                    145:     this.assertChanged("chk2");
                    146:     document.getElementById("chk1").checked = true;
                    147:     document.getElementById("chk2").checked = false;
                    148:     this.assertNotChanged("chk1");
                    149:     this.assertNotChanged("chk2");
                    150: }
                    151: 
                    152: Class.testFile = function() {
                    153:     this.simpleFieldTest(this.FILE, "FILE");
                    154:     // Cannot modify file from javascript, so no way to test changed
                    155:     // field.
                    156: }
                    157: 
                    158: Class.testHidden = function() {
                    159:     this.simpleFieldTest(this.HIDDEN, "HIDDEN");
                    160:     var form = document.getElementById("FORMHIDDEN");
                    161:     this.bu.addForms(form);
                    162:     this.assertChanged("HIDDEN", "37");
                    163: }
                    164: Class.testImage = function() {
                    165:     this.simpleFieldTest(this.IMAGE, "IMAGE");
                    166: }
                    167: Class.testPassword = function() {
                    168:     this.simpleFieldTest(this.PASSWORD, "PASSWORD");
                    169:     this.simpleFieldTest(this.PASSWORD, "PASSWORD", "hidden");
                    170: }
                    171: Class.testReset = function() {
                    172:     this.simpleFieldTest(this.RESET, "RESET");
                    173: }
                    174: Class.testSubmit = function() {
                    175:     this.simpleFieldTest(this.SUBMIT, "SUBMIT");
                    176: }
                    177: Class.testSelectOne = function() {
                    178:     this.setHtml(this.SELECTONE);
                    179:     // select with no default starts with first element selected.
                    180:     this.assertNotChanged("SELECTONE");
                    181:     var field = document.getElementById("SELECTONE");
                    182:     field.options[1].selected = true;
                    183:     this.assertChanged("SELECTONE");
                    184:     field.options[0].selected = true;
                    185:     this.assertNotChanged("SELECTONE");
                    186: }
                    187: 
                    188: Class.testSelectOneA = function() {
                    189:     this.setHtml(this.SELECTONEA);
                    190:     this.assertNotChanged("SELECTONE");
                    191:     var field = document.getElementById("SELECTONE");
                    192:     field.options[2].selected = true;
                    193:     this.assertChanged("SELECTONE");
                    194:     field.options[1].selected = true;
                    195:     this.assertNotChanged("SELECTONE");
                    196: }
                    197: Class.testSelectMultiple = function() {
                    198:     this.setHtml(this.SELECTMULTIPLE);
                    199:     this.assertNotChanged("SELECTMULTIPLE");
                    200:     var field = document.getElementById("SELECTMULTIPLE");
                    201:     field.options[2].selected = true;
                    202:     this.assertChanged("SELECTMULTIPLE");
                    203:     field.options[2].selected = false;
                    204:     this.assertNotChanged("SELECTMULTIPLE");
                    205:     field.options[1].selected = false;
                    206:     this.assertChanged("SELECTMULTIPLE");
                    207: }
                    208: Class.testForm1 = function() {
                    209:     this.setHtml(this.FORM1);
                    210:     this.assertNotChanged("FORM1");
                    211:     document.getElementById("INPUTTEXT").value = "37";
                    212:     this.assertChanged("FORM1");
                    213: }
                    214: Class.testAddForm = function() {
                    215:     this.setHtml(this.FORMS);
                    216:     var form = document.getElementById("FORM1");
                    217:     this.bu.addForms(form);
                    218:     this.assertEquals(1, this.bu.forms.length);
                    219:     this.assertFalse(this.bu.isAnyFormChanged(form), "form not changed");
                    220:     document.getElementById("radio3").checked = true;
                    221:     this.assertFalse(this.bu.isAnyFormChanged(form), "form not changed");
                    222:     document.getElementById("INPUTTEXT").value = "37";
                    223:     this.assertTrue(this.bu.isAnyFormChanged(form), "form changed");
                    224: }
                    225: 
                    226: Class.testAddRemoveForm = function() {
                    227:     this.setHtml(this.FORMS);
                    228:     var div = document.getElementById("DIV1");
                    229:     this.bu.addForms(null);
                    230:     this.assertEquals(0, this.bu.forms.length);
                    231: 
                    232:     this.bu.addForms(div);
                    233:     this.assertEquals(2, this.bu.forms.length);
                    234: 
                    235:     var form = document.getElementById("FORM1");
                    236:     this.bu.addForms(form);
                    237:     this.assertEquals(2, this.bu.forms.length);
                    238:     this.bu.removeForms(form);
                    239:     this.assertEquals(1, this.bu.forms.length);
                    240: 
                    241:     var form3 = document.getElementById("FORM3");
                    242:     this.bu.addForms(form3);
                    243:     this.assertEquals(2, this.bu.forms.length);
                    244:     this.bu.removeForms(div);
                    245:     this.assertEquals(1, this.bu.forms.length);
                    246: 
                    247:     this.bu.removeForms(null);
                    248:     this.assertEquals(1, this.bu.forms.length);
                    249: }
                    250: 
                    251: Class.testSubmit = function() {
                    252:     this.setHtml(this.FORMS);
                    253:     var form1 = document.getElementById("FORM1");
                    254:     var form2 = document.getElementById("FORM3");
                    255:     var form3 = document.getElementById("FORM3");
                    256:     var div = document.getElementById("DIV1");
                    257:     this.bu.addForms(div);
                    258: 
                    259:     this.assertEquals(this.bu.execute(), undefined);
                    260:     document.getElementById("INPUTTEXT").value = "37";
                    261:     this.assertEquals(this.bu.execute(), this.bu.message);
                    262: 
                    263:     window.onbeforeunload = this.bu.execute;
                    264:     this.bu.onsubmit();
                    265: 
                    266:     this.assertEquals(this.bu.execute(), undefined);
                    267: }
                    268: 
                    269: Class.testHandlers = function() {
                    270:     this.setHtml(this.FORMS);
                    271:     var form1 = document.getElementById("FORM1");
                    272:     var form2 = document.getElementById("FORM3");
                    273:     var form3 = document.getElementById("FORM3");
                    274:     var div = document.getElementById("DIV1");
                    275:     this.bu.addForms(div);
                    276: 
                    277:     function Handler() {
                    278:         return "called!";
                    279:     }
                    280:     this.bu.addHandler(Handler);
                    281:     this.assertEquals(this.bu.execute(), Handler());
                    282: }
                    283: 
                    284: Class.testIdOverride = function() {
                    285:     this.setHtml(this.FORMS);
                    286:     var form = document.getElementById("FORM1");
                    287:     this.bu.addForms(form);
                    288:     document.getElementById("INPUTTEXT").value = "37";
                    289:     this.assertTrue(this.bu.execute());
                    290:     this.bu.chkId['INPUTTEXT'] = function() { return false; }
                    291:     this.assertFalse(this.bu.execute());
                    292: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>