[ Index ] |
|
Code source de Kupu-1.3.5 |
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 }
titre
Description
Corps
titre
Description
Corps
titre
Description
Corps
titre
Corps
Généré le : Sun Feb 25 15:30:41 2007 | par Balluche grâce à PHPXref 0.7 |