Annotation of kupuMPIWG/tests/test_beforeunload.js, revision 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>