Annotation of kupuMPIWG/tests/test_xhtml.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_xhtml.js 9982 2005-03-21 09:53:57Z yuppie $
! 12:
! 13: // Various tests for html -> xhtml processing.
! 14:
! 15: function KupuXhtmlTestCase() {
! 16: this.name = 'KupuXhtmlTestCase';
! 17:
! 18: this.incontext = function(s) {
! 19: return '<html><head><title>test</title></head><body>'+s+'</body></html>';
! 20: }
! 21: this.verifyResult = function(newdoc, exp) {
! 22: var expected = this.incontext(exp);
! 23: var actual = newdoc.xml;
! 24: actual = actual.replace('\xa0', ' ');
! 25: if (actual == expected)
! 26: return;
! 27:
! 28: var context = /<html><head><title>test<\/title><\/head><body>(.*)<\/body><\/html>/;
! 29: if (context.test(actual) && context.test(expected)) {
! 30: var a = context.exec(actual)[1];
! 31: var e = context.exec(expected)[1];
! 32: throw('Assertion failed: ' + a + ' != ' + e);
! 33: }
! 34: throw('Assertion failed: ' + actual + ' != ' + expected);
! 35: }
! 36:
! 37: this.conversionTest = function(data, expected) {
! 38: var doc = this.doc.documentElement;
! 39: var editor = this.editor;
! 40: this.body.innerHTML = data;
! 41: var xhtmldoc = Sarissa.getDomDocument();
! 42: var newdoc = editor._convertToSarissaNode(xhtmldoc, this.doc.documentElement);
! 43: this.verifyResult(newdoc, expected);
! 44: }
! 45:
! 46: this.setUp = function() {
! 47: var iframe = document.getElementById('iframe');
! 48: this.doc = iframe.contentWindow.document;
! 49: this.body = this.doc.getElementsByTagName('body')[0];
! 50: this.doc.getElementsByTagName('title')[0].text = 'test';
! 51: this.editor = new KupuEditor(null, {}, null);
! 52: };
! 53:
! 54: this.arrayContains = function(ary, test) {
! 55: for (var i = 0; i < ary.length; i++) {
! 56: if (ary[i]==test) {
! 57: return true;
! 58: }
! 59: }
! 60: return false;
! 61: }
! 62: this.testExclude = function() {
! 63: // Check that the exclude functions work as expected.
! 64: var validator = new XhtmlValidation(this.editor);
! 65: var events = ['onclick', 'ondblclick', 'onmousedown',
! 66: 'onmouseup', 'onmouseover', 'onmousemove',
! 67: 'onmouseout', 'onkeypress', 'onkeydown',
! 68: 'onkeyup'];
! 69: var expected = ['onclick', 'ondblclick', 'onmousedown', 'onmouseup', 'onmouseout', 'onkeypress', 'onkeyup'];
! 70:
! 71: var actual = validator._exclude(events, 'onmouseover|onmousemove|onkeydown');
! 72: this.assertEquals(actual.toString(), expected.toString());
! 73:
! 74: // check is also works with arrays.
! 75: actual = validator._exclude(events, ['onmouseover','onmousemove','onkeydown']);
! 76: this.assertEquals(actual.toString(), expected.toString());
! 77:
! 78: // Check we have a bgcolor attribute
! 79: this.assertTrue(this.arrayContains(validator.tagAttributes.thead, 'charoff'));
! 80: this.assertTrue(validator.attrFilters['charoff'] != null);
! 81: validator.excludeAttributes(['charoff']);
! 82: this.assertTrue(validator.attrFilters['charoff']==null);
! 83: this.assertTrue(!this.arrayContains(validator.tagAttributes.thead, 'charoff'));
! 84: this.assertTrue(this.arrayContains(validator.tagAttributes.td, 'height'));
! 85: this.assertTrue(this.arrayContains(validator.tagAttributes.th, 'height'));
! 86: validator.excludeTagAttributes(['table','th'], ['width','height']);
! 87: this.assertTrue(this.arrayContains(validator.tagAttributes.td, 'height'));
! 88: this.assertFalse(this.arrayContains(validator.tagAttributes.th, 'height'));
! 89: }
! 90:
! 91: this.testSet = function() {
! 92: var validator = new XhtmlValidation(this.editor);
! 93:
! 94: var set1 = new validator.Set(['a','b','c']);
! 95: this.assertTrue(set1.a && set1.b && set1.c);
! 96: var set2 = new validator.Set(set1);
! 97: this.assertTrue(set2.a && set2.b && set2.c);
! 98: }
! 99: this.testValidator = function() {
! 100: var validator = new XhtmlValidation(this.editor);
! 101: var table = validator.States['table'];
! 102: var tags = [];
! 103: for (var tag in table) {
! 104: this.assertEquals(table[tag], 1);
! 105: tags.push(tag);
! 106: }
! 107: this.assertEquals(tags.toString(),
! 108: ['caption','col','colgroup',
! 109: 'thead','tfoot','tbody','tr'].toString());
! 110: };
! 111:
! 112: this.testConvertToSarissa = function() {
! 113: var data = '<p class="blue">This is a test</p>';
! 114: this.conversionTest(data, data);
! 115: }
! 116: this.testXmlAttrs = function() {
! 117: var data = '<pre xml:space="preserve" xml:lang="fr">This is a test</pre>';
! 118: var expected1 = '<pre xml:lang="fr" xml:space="preserve">This is a test</pre>';
! 119: this.conversionTest(data, expected1);
! 120: var expected2 = '<pre>This is a test</pre>';
! 121: this.editor.xhtmlvalid.excludeAttributes(['xml:lang','xml:space']);
! 122: this.conversionTest(data, expected2);
! 123: }
! 124: this.testConvertToSarissa2 = function() {
! 125: var data = '<div id="div1">This is a test</div>';
! 126: this.conversionTest(data, data);
! 127: }
! 128: this.testbadTags = function() {
! 129: var data = '<div><center>centered</center><p>Test</p><o:p>zzz</o:p></div>';
! 130: var expected = '<div>centered<p>Test</p>zzz</div>';
! 131: this.conversionTest(data, expected);
! 132: }
! 133: this.testnbsp = function() {
! 134: var data = '<p>Text with <b>non-break</b> space</p>';
! 135: this.conversionTest(data, data);
! 136: };
! 137: this.teststyle = function() {
! 138: var data = '<p style="text-align:right; mso-silly: green">Text aligned right</p>';
! 139: var expected = '<p style="text-align: left;">Text aligned right</p>';
! 140: var doc = this.doc.documentElement;
! 141: var editor = this.editor;
! 142: this.body.innerHTML = data;
! 143: this.body.firstChild.style.textAlign = 'left';
! 144: this.body.firstChild.style.display = 'block';
! 145: //alert(this.body.firstChild.style.cssText);
! 146: var xhtmldoc = Sarissa.getDomDocument();
! 147: var newdoc = editor._convertToSarissaNode(xhtmldoc, this.doc.documentElement);
! 148: this.verifyResult(newdoc, expected);
! 149: };
! 150: this.testclass = function() {
! 151: var data = '<div class="MsoNormal fred">This is a test</div>';
! 152: var expected = '<div class="fred">This is a test</div>';
! 153: this.conversionTest(data, expected);
! 154: }
! 155: this.testclass2 = function() {
! 156: var data = '<div class="MsoNormal">This is a test</div>';
! 157: var expected = '<div>This is a test</div>';
! 158: this.conversionTest(data, expected);
! 159: }
! 160: this.testTable = function() {
! 161: // N.B. This table contains text and a <P> tag where they
! 162: // aren't legal. Mozilla strips out the <P> tag but lets the
! 163: // text through, IE lets both through.
! 164:
! 165: var data = '<TABLE class="listing">BADTEXT!<THEAD><TR><TH>Col 01</TH><TH class=align-center>Col 11</TH>'+
! 166: '<TH class=align-right>Col 21</TH></TR></THEAD>'+
! 167: '<TBODY><TR>'+
! 168: '<TD>text</TD>'+
! 169: '<TD class=align-center>a</TD>'+
! 170: '<TD class=align-right>r</TD></TR>'+
! 171: '<TR>'+
! 172: '<TD>more text</TD>'+
! 173: '<TD class=align-center>aaa</TD>'+
! 174: '<TD class=align-right>rr</TD></TR>'+
! 175: '<TR>'+
! 176: '<TD>yet more text</TD>'+
! 177: '<TD class=align-center>aaaaa</TD>'+
! 178: '<TD class=align-right>rrr</TD></TR></TBODY><P></TABLE>';
! 179: var expected = '<table class="listing"><thead><tr><th>Col 01</th><th class="align-center">Col 11</th>'+
! 180: '<th class="align-right">Col 21</th></tr></thead>'+
! 181: '<tbody><tr>'+
! 182: '<td>text</td>'+
! 183: '<td class="align-center">a</td>'+
! 184: '<td class="align-right">r</td></tr>'+
! 185: '<tr>'+
! 186: '<td>more text</td>'+
! 187: '<td class="align-center">aaa</td>'+
! 188: '<td class="align-right">rr</td></tr>'+
! 189: '<tr>'+
! 190: '<td>yet more text</td>'+
! 191: '<td class="align-center">aaaaa</td>'+
! 192: '<td class="align-right">rrr</td></tr></tbody></table>';
! 193:
! 194: this.editor.xhtmlvalid.filterstructure = true;
! 195: this.conversionTest(data, expected);
! 196: }
! 197: this.testCustomAttribute = function() {
! 198: var validator = this.editor.xhtmlvalid;
! 199: var data = '<div special="magic">This is a test</div>';
! 200: this.assertTrue(validator.tagAttributes.td===validator.tagAttributes.th);
! 201: this.editor.xhtmlvalid.includeTagAttributes(['div','td'],['special']);
! 202: // Check that shared arrays are no longer shared...
! 203: this.assertFalse(validator.tagAttributes.td===validator.tagAttributes.th);
! 204: this.assertTrue(this.arrayContains(validator.tagAttributes.td, 'special'));
! 205: this.assertFalse(this.arrayContains(validator.tagAttributes.th, 'special'));
! 206: this.editor.xhtmlvalid.setAttrFilter(['special']);
! 207: this.conversionTest(data, data);
! 208: }
! 209:
! 210: this.tearDown = function() {
! 211: this.body.innerHTML = '';
! 212: };
! 213: }
! 214:
! 215: KupuXhtmlTestCase.prototype = new TestCase;
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>