Annotation of kupuMPIWG/tests/test_xhtml.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_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', '&nbsp;');
                     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&nbsp;<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>