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>