[ Index ]
 

Code source de Kupu-1.3.5

Accédez au Source d'autres logiciels libresSoutenez Angelica Josefina !

title

Body

[fermer]

/tests/ -> test_beforeunload.js (source)

   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  }


Généré le : Sun Feb 25 15:30:41 2007 par Balluche grâce à PHPXref 0.7