Annotation of kupuMPIWG/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>