File:  [Repository] / kupuMPIWG / tests / test_xhtml.js
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Aug 30 17:10:23 2005 UTC (18 years, 8 months ago) by dwinter
Branches: first, MAIN
CVS tags: alpha, HEAD


/*****************************************************************************
 *
 * Copyright (c) 2003-2005 Kupu Contributors. All rights reserved.
 *
 * This software is distributed under the terms of the Kupu
 * License. See LICENSE.txt for license text. For a list of Kupu
 * Contributors see CREDITS.txt.
 *
 *****************************************************************************/

// $Id: test_xhtml.js,v 1.1.1.1 2005/08/30 17:10:23 dwinter Exp $

// Various tests for html -> xhtml processing.

function KupuXhtmlTestCase() {
    this.name = 'KupuXhtmlTestCase';

    this.incontext = function(s) {
        return '<html><head><title>test</title></head><body>'+s+'</body></html>';
    }
    this.verifyResult = function(newdoc, exp) {
        var expected = this.incontext(exp);
        var actual = newdoc.xml;
        actual = actual.replace('\xa0', '&nbsp;');
        if (actual == expected)
            return;

        var context = /test<\/title><\/head><body>(.*)<\/body><\/html>/</span></b>;
        <b><span style="color: #A020F0">if</span></b> (context.test(actual) && context.test(expected)) {
            <b><span style="color: #A020F0">var</span></b> a = context.exec(actual)[1];
            <b><span style="color: #A020F0">var</span></b> e = context.exec(expected)[1];
            <b><span style="color: #A020F0">throw</span></b>(<b><span style="color: #BC8F8F">'Assertion failed: '</span></b> + a + <b><span style="color: #BC8F8F">' != '</span></b> + e);
        }
        <b><span style="color: #A020F0">throw</span></b>(<b><span style="color: #BC8F8F">'Assertion failed: '</span></b> + actual + <b><span style="color: #BC8F8F">' != '</span></b> + expected);
    }

    <b><span style="color: #A020F0">this</span></b>.conversionTest = <b><span style="color: #A020F0">function</span></b>(data, expected) {
        <b><span style="color: #A020F0">var</span></b> doc = <b><span style="color: #A020F0">this</span></b>.doc.documentElement;
        <b><span style="color: #A020F0">var</span></b> editor = <b><span style="color: #A020F0">this</span></b>.editor;
        <b><span style="color: #A020F0">this</span></b>.body.innerHTML = data;
        <b><span style="color: #A020F0">var</span></b> xhtmldoc = Sarissa.getDomDocument();
        <b><span style="color: #A020F0">var</span></b> newdoc = editor._convertToSarissaNode(xhtmldoc, <b><span style="color: #A020F0">this</span></b>.doc.documentElement);
        <b><span style="color: #A020F0">this</span></b>.verifyResult(newdoc, expected);
    }

    <b><span style="color: #A020F0">this</span></b>.setUp = <b><span style="color: #A020F0">function</span></b>() {
        <b><span style="color: #A020F0">var</span></b> iframe = document.getElementById(<b><span style="color: #BC8F8F">'iframe'</span></b>);
        <b><span style="color: #A020F0">this</span></b>.doc = iframe.contentWindow.document;
        <b><span style="color: #A020F0">this</span></b>.body = <b><span style="color: #A020F0">this</span></b>.doc.getElementsByTagName(<b><span style="color: #BC8F8F">'body'</span></b>)[0];
        <b><span style="color: #A020F0">this</span></b>.doc.getElementsByTagName(<b><span style="color: #BC8F8F">'title'</span></b>)[0].text = <b><span style="color: #BC8F8F">'test'</span></b>;
        <b><span style="color: #A020F0">this</span></b>.editor = <b><span style="color: #A020F0">new</span></b> KupuEditor(<b><span style="color: #A020F0">null</span></b>, {}, <b><span style="color: #A020F0">null</span></b>);
    };

    <b><span style="color: #A020F0">this</span></b>.arrayContains = <b><span style="color: #A020F0">function</span></b>(ary, test) {
        <b><span style="color: #A020F0">for</span></b> (<b><span style="color: #A020F0">var</span></b> i = 0; i < ary.length; i++) {
            <b><span style="color: #A020F0">if</span></b> (ary[i]==test) {
                <b><span style="color: #A020F0">return</span></b> <b><span style="color: #A020F0">true</span></b>;
            }
        }
        <b><span style="color: #A020F0">return</span></b> <b><span style="color: #A020F0">false</span></b>;
    }
    <b><span style="color: #A020F0">this</span></b>.testExclude = <b><span style="color: #A020F0">function</span></b>() {
        <i><span style="color: #B22222">// Check that the exclude functions work as expected.
</span></i>        <b><span style="color: #A020F0">var</span></b> validator = <b><span style="color: #A020F0">new</span></b> XhtmlValidation(<b><span style="color: #A020F0">this</span></b>.editor);
        <b><span style="color: #A020F0">var</span></b> events = [<b><span style="color: #BC8F8F">'onclick'</span></b>, <b><span style="color: #BC8F8F">'ondblclick'</span></b>, <b><span style="color: #BC8F8F">'onmousedown'</span></b>,
        <b><span style="color: #BC8F8F">'onmouseup'</span></b>, <b><span style="color: #BC8F8F">'onmouseover'</span></b>, <b><span style="color: #BC8F8F">'onmousemove'</span></b>,
        <b><span style="color: #BC8F8F">'onmouseout'</span></b>, <b><span style="color: #BC8F8F">'onkeypress'</span></b>, <b><span style="color: #BC8F8F">'onkeydown'</span></b>,
        <b><span style="color: #BC8F8F">'onkeyup'</span></b>];
        <b><span style="color: #A020F0">var</span></b> expected = [<b><span style="color: #BC8F8F">'onclick'</span></b>, <b><span style="color: #BC8F8F">'ondblclick'</span></b>, <b><span style="color: #BC8F8F">'onmousedown'</span></b>, <b><span style="color: #BC8F8F">'onmouseup'</span></b>, <b><span style="color: #BC8F8F">'onmouseout'</span></b>, <b><span style="color: #BC8F8F">'onkeypress'</span></b>, <b><span style="color: #BC8F8F">'onkeyup'</span></b>];

        <b><span style="color: #A020F0">var</span></b> actual = validator._exclude(events, <b><span style="color: #BC8F8F">'onmouseover|onmousemove|onkeydown'</span></b>);
        <b><span style="color: #A020F0">this</span></b>.assertEquals(actual.toString(), expected.toString());

        <i><span style="color: #B22222">// check is also works with arrays.
</span></i>        actual = validator._exclude(events, [<b><span style="color: #BC8F8F">'onmouseover'</span></b>,<b><span style="color: #BC8F8F">'onmousemove'</span></b>,<b><span style="color: #BC8F8F">'onkeydown'</span></b>]);
        <b><span style="color: #A020F0">this</span></b>.assertEquals(actual.toString(), expected.toString());

        <i><span style="color: #B22222">// Check we have a bgcolor attribute
</span></i>        <b><span style="color: #A020F0">this</span></b>.assertTrue(<b><span style="color: #A020F0">this</span></b>.arrayContains(validator.tagAttributes.thead, <b><span style="color: #BC8F8F">'charoff'</span></b>));
        <b><span style="color: #A020F0">this</span></b>.assertTrue(validator.attrFilters[<b><span style="color: #BC8F8F">'charoff'</span></b>] != <b><span style="color: #A020F0">null</span></b>);
        validator.excludeAttributes([<b><span style="color: #BC8F8F">'charoff'</span></b>]);
        <b><span style="color: #A020F0">this</span></b>.assertTrue(validator.attrFilters[<b><span style="color: #BC8F8F">'charoff'</span></b>]==<b><span style="color: #A020F0">null</span></b>);
        <b><span style="color: #A020F0">this</span></b>.assertTrue(!<b><span style="color: #A020F0">this</span></b>.arrayContains(validator.tagAttributes.thead, <b><span style="color: #BC8F8F">'charoff'</span></b>));
        <b><span style="color: #A020F0">this</span></b>.assertTrue(<b><span style="color: #A020F0">this</span></b>.arrayContains(validator.tagAttributes.td, <b><span style="color: #BC8F8F">'height'</span></b>));
        <b><span style="color: #A020F0">this</span></b>.assertTrue(<b><span style="color: #A020F0">this</span></b>.arrayContains(validator.tagAttributes.th, <b><span style="color: #BC8F8F">'height'</span></b>));
        validator.excludeTagAttributes([<b><span style="color: #BC8F8F">'table'</span></b>,<b><span style="color: #BC8F8F">'th'</span></b>], [<b><span style="color: #BC8F8F">'width'</span></b>,<b><span style="color: #BC8F8F">'height'</span></b>]);
        <b><span style="color: #A020F0">this</span></b>.assertTrue(<b><span style="color: #A020F0">this</span></b>.arrayContains(validator.tagAttributes.td, <b><span style="color: #BC8F8F">'height'</span></b>));
        <b><span style="color: #A020F0">this</span></b>.assertFalse(<b><span style="color: #A020F0">this</span></b>.arrayContains(validator.tagAttributes.th, <b><span style="color: #BC8F8F">'height'</span></b>));
    }

    <b><span style="color: #A020F0">this</span></b>.testSet = <b><span style="color: #A020F0">function</span></b>() {
        <b><span style="color: #A020F0">var</span></b> validator = <b><span style="color: #A020F0">new</span></b> XhtmlValidation(<b><span style="color: #A020F0">this</span></b>.editor);

        <b><span style="color: #A020F0">var</span></b> set1 = <b><span style="color: #A020F0">new</span></b> validator.Set([<b><span style="color: #BC8F8F">'a'</span></b>,<b><span style="color: #BC8F8F">'b'</span></b>,<b><span style="color: #BC8F8F">'c'</span></b>]);
        <b><span style="color: #A020F0">this</span></b>.assertTrue(set1.a && set1.b && set1.c);
        <b><span style="color: #A020F0">var</span></b> set2 = <b><span style="color: #A020F0">new</span></b> validator.Set(set1);
        <b><span style="color: #A020F0">this</span></b>.assertTrue(set2.a && set2.b && set2.c);
    }
    <b><span style="color: #A020F0">this</span></b>.testValidator = <b><span style="color: #A020F0">function</span></b>() {
        <b><span style="color: #A020F0">var</span></b> validator = <b><span style="color: #A020F0">new</span></b> XhtmlValidation(<b><span style="color: #A020F0">this</span></b>.editor);
        <b><span style="color: #A020F0">var</span></b> table = validator.States[<b><span style="color: #BC8F8F">'table'</span></b>];
        <b><span style="color: #A020F0">var</span></b> tags = [];
        <b><span style="color: #A020F0">for</span></b> (<b><span style="color: #A020F0">var</span></b> tag <b><span style="color: #A020F0">in</span></b> table) {
            <b><span style="color: #A020F0">this</span></b>.assertEquals(table[tag], 1);
            tags.push(tag);
        }
        <b><span style="color: #A020F0">this</span></b>.assertEquals(tags.toString(),
                          [<b><span style="color: #BC8F8F">'caption'</span></b>,<b><span style="color: #BC8F8F">'col'</span></b>,<b><span style="color: #BC8F8F">'colgroup'</span></b>,
                          <b><span style="color: #BC8F8F">'thead'</span></b>,<b><span style="color: #BC8F8F">'tfoot'</span></b>,<b><span style="color: #BC8F8F">'tbody'</span></b>,<b><span style="color: #BC8F8F">'tr'</span></b>].toString());
    };

    <b><span style="color: #A020F0">this</span></b>.testConvertToSarissa = <b><span style="color: #A020F0">function</span></b>() {
        <b><span style="color: #A020F0">var</span></b> data = <b><span style="color: #BC8F8F">'<p class="blue">This is a test</p>'</span></b>;
        <b><span style="color: #A020F0">this</span></b>.conversionTest(data, data);
    }
    <b><span style="color: #A020F0">this</span></b>.testXmlAttrs = <b><span style="color: #A020F0">function</span></b>() {
        <b><span style="color: #A020F0">var</span></b> data = <b><span style="color: #BC8F8F">'<pre xml:space="preserve" xml:lang="fr">This is a test</pre>'</span></b>;
        <b><span style="color: #A020F0">var</span></b> expected1 = <b><span style="color: #BC8F8F">'<pre xml:lang="fr" xml:space="preserve">This is a test</pre>'</span></b>;
        <b><span style="color: #A020F0">this</span></b>.conversionTest(data, expected1);
        <b><span style="color: #A020F0">var</span></b> expected2 = <b><span style="color: #BC8F8F">'<pre>This is a test</pre>'</span></b>;
        <b><span style="color: #A020F0">this</span></b>.editor.xhtmlvalid.excludeAttributes([<b><span style="color: #BC8F8F">'xml:lang'</span></b>,<b><span style="color: #BC8F8F">'xml:space'</span></b>]);
        <b><span style="color: #A020F0">this</span></b>.conversionTest(data, expected2);
    }
    <b><span style="color: #A020F0">this</span></b>.testConvertToSarissa2 = <b><span style="color: #A020F0">function</span></b>() {
        <b><span style="color: #A020F0">var</span></b> data = <b><span style="color: #BC8F8F">'<div id="div1">This is a test</div>'</span></b>;
        <b><span style="color: #A020F0">this</span></b>.conversionTest(data, data);
    }
    <b><span style="color: #A020F0">this</span></b>.testbadTags = <b><span style="color: #A020F0">function</span></b>() {
        <b><span style="color: #A020F0">var</span></b> data =  <b><span style="color: #BC8F8F">'<div><center>centered</center><p>Test</p><o:p>zzz</o:p></div>'</span></b>;
        <b><span style="color: #A020F0">var</span></b> expected = <b><span style="color: #BC8F8F">'<div>centered<p>Test</p>zzz</div>'</span></b>;
        <b><span style="color: #A020F0">this</span></b>.conversionTest(data, expected);
    }
    <b><span style="color: #A020F0">this</span></b>.testnbsp = <b><span style="color: #A020F0">function</span></b>() {
        <b><span style="color: #A020F0">var</span></b> data = <b><span style="color: #BC8F8F">'<p>Text with&nbsp;<b>non-break</b> space</p>'</span></b>;
        <b><span style="color: #A020F0">this</span></b>.conversionTest(data, data);
    };
    <b><span style="color: #A020F0">this</span></b>.teststyle = <b><span style="color: #A020F0">function</span></b>() {
        <b><span style="color: #A020F0">var</span></b> data = <b><span style="color: #BC8F8F">'<p style="text-align:right; mso-silly: green">Text aligned right</p>'</span></b>;
        <b><span style="color: #A020F0">var</span></b> expected = <b><span style="color: #BC8F8F">'<p style="text-align: left;">Text aligned right</p>'</span></b>;
        <b><span style="color: #A020F0">var</span></b> doc = <b><span style="color: #A020F0">this</span></b>.doc.documentElement;
        <b><span style="color: #A020F0">var</span></b> editor = <b><span style="color: #A020F0">this</span></b>.editor;
        <b><span style="color: #A020F0">this</span></b>.body.innerHTML = data;
        <b><span style="color: #A020F0">this</span></b>.body.firstChild.style.textAlign = <b><span style="color: #BC8F8F">'left'</span></b>;
        <b><span style="color: #A020F0">this</span></b>.body.firstChild.style.display = <b><span style="color: #BC8F8F">'block'</span></b>;
        <i><span style="color: #B22222">//alert(this.body.firstChild.style.cssText);
</span></i>        <b><span style="color: #A020F0">var</span></b> xhtmldoc = Sarissa.getDomDocument();
        <b><span style="color: #A020F0">var</span></b> newdoc = editor._convertToSarissaNode(xhtmldoc, <b><span style="color: #A020F0">this</span></b>.doc.documentElement);
        <b><span style="color: #A020F0">this</span></b>.verifyResult(newdoc, expected);
    };
    <b><span style="color: #A020F0">this</span></b>.testclass = <b><span style="color: #A020F0">function</span></b>() {
        <b><span style="color: #A020F0">var</span></b> data = <b><span style="color: #BC8F8F">'<div class="MsoNormal fred">This is a test</div>'</span></b>;
        <b><span style="color: #A020F0">var</span></b> expected = <b><span style="color: #BC8F8F">'<div class="fred">This is a test</div>'</span></b>;
        <b><span style="color: #A020F0">this</span></b>.conversionTest(data, expected);
    }
    <b><span style="color: #A020F0">this</span></b>.testclass2 = <b><span style="color: #A020F0">function</span></b>() {
        <b><span style="color: #A020F0">var</span></b> data = <b><span style="color: #BC8F8F">'<div class="MsoNormal">This is a test</div>'</span></b>;
        <b><span style="color: #A020F0">var</span></b> expected = <b><span style="color: #BC8F8F">'<div>This is a test</div>'</span></b>;
        <b><span style="color: #A020F0">this</span></b>.conversionTest(data, expected);
    }
    <b><span style="color: #A020F0">this</span></b>.testTable = <b><span style="color: #A020F0">function</span></b>() {
        <i><span style="color: #B22222">// N.B. This table contains text and a <P> tag where they
</span></i>        <i><span style="color: #B22222">// aren't legal. Mozilla strips out the <P> tag but lets the
</span></i>        <i><span style="color: #B22222">// text through, IE lets both through.
</span></i>        
        <b><span style="color: #A020F0">var</span></b> data = <b><span style="color: #BC8F8F">'<TABLE class="listing">BADTEXT!<THEAD><TR><TH>Col 01</TH><TH class=align-center>Col 11</TH>'</span></b>+
            <b><span style="color: #BC8F8F">'<TH class=align-right>Col 21</TH></TR></THEAD>'</span></b>+
            <b><span style="color: #BC8F8F">'<TBODY><TR>'</span></b>+
            <b><span style="color: #BC8F8F">'<TD>text</TD>'</span></b>+
            <b><span style="color: #BC8F8F">'<TD class=align-center>a</TD>'</span></b>+
            <b><span style="color: #BC8F8F">'<TD class=align-right>r</TD></TR>'</span></b>+
            <b><span style="color: #BC8F8F">'<TR>'</span></b>+
            <b><span style="color: #BC8F8F">'<TD>more text</TD>'</span></b>+
            <b><span style="color: #BC8F8F">'<TD class=align-center>aaa</TD>'</span></b>+
            <b><span style="color: #BC8F8F">'<TD class=align-right>rr</TD></TR>'</span></b>+
            <b><span style="color: #BC8F8F">'<TR>'</span></b>+
            <b><span style="color: #BC8F8F">'<TD>yet more text</TD>'</span></b>+
            <b><span style="color: #BC8F8F">'<TD class=align-center>aaaaa</TD>'</span></b>+
            <b><span style="color: #BC8F8F">'<TD class=align-right>rrr</TD></TR></TBODY><P></TABLE>'</span></b>;
        <b><span style="color: #A020F0">var</span></b> expected = <b><span style="color: #BC8F8F">'<table class="listing"><thead><tr><th>Col 01</th><th class="align-center">Col 11</th>'</span></b>+
            <b><span style="color: #BC8F8F">'<th class="align-right">Col 21</th></tr></thead>'</span></b>+
            <b><span style="color: #BC8F8F">'<tbody><tr>'</span></b>+
            <b><span style="color: #BC8F8F">'<td>text</td>'</span></b>+
            <b><span style="color: #BC8F8F">'<td class="align-center">a</td>'</span></b>+
            <b><span style="color: #BC8F8F">'<td class="align-right">r</td></tr>'</span></b>+
            <b><span style="color: #BC8F8F">'<tr>'</span></b>+
            <b><span style="color: #BC8F8F">'<td>more text</td>'</span></b>+
            <b><span style="color: #BC8F8F">'<td class="align-center">aaa</td>'</span></b>+
            <b><span style="color: #BC8F8F">'<td class="align-right">rr</td></tr>'</span></b>+
            <b><span style="color: #BC8F8F">'<tr>'</span></b>+
            <b><span style="color: #BC8F8F">'<td>yet more text</td>'</span></b>+
            <b><span style="color: #BC8F8F">'<td class="align-center">aaaaa</td>'</span></b>+
            <b><span style="color: #BC8F8F">'<td class="align-right">rrr</td></tr></tbody></table>'</span></b>;

        <b><span style="color: #A020F0">this</span></b>.editor.xhtmlvalid.filterstructure = <b><span style="color: #A020F0">true</span></b>;
        <b><span style="color: #A020F0">this</span></b>.conversionTest(data, expected);
    }
    <b><span style="color: #A020F0">this</span></b>.testCustomAttribute = <b><span style="color: #A020F0">function</span></b>() {
        <b><span style="color: #A020F0">var</span></b> validator = <b><span style="color: #A020F0">this</span></b>.editor.xhtmlvalid;
        <b><span style="color: #A020F0">var</span></b> data = <b><span style="color: #BC8F8F">'<div special="magic">This is a test</div>'</span></b>;
        <b><span style="color: #A020F0">this</span></b>.assertTrue(validator.tagAttributes.td===validator.tagAttributes.th);
        <b><span style="color: #A020F0">this</span></b>.editor.xhtmlvalid.includeTagAttributes([<b><span style="color: #BC8F8F">'div'</span></b>,<b><span style="color: #BC8F8F">'td'</span></b>],[<b><span style="color: #BC8F8F">'special'</span></b>]);
        <i><span style="color: #B22222">// Check that shared arrays are no longer shared...
</span></i>        <b><span style="color: #A020F0">this</span></b>.assertFalse(validator.tagAttributes.td===validator.tagAttributes.th);
        <b><span style="color: #A020F0">this</span></b>.assertTrue(<b><span style="color: #A020F0">this</span></b>.arrayContains(validator.tagAttributes.td, <b><span style="color: #BC8F8F">'special'</span></b>));
        <b><span style="color: #A020F0">this</span></b>.assertFalse(<b><span style="color: #A020F0">this</span></b>.arrayContains(validator.tagAttributes.th, <b><span style="color: #BC8F8F">'special'</span></b>));
        <b><span style="color: #A020F0">this</span></b>.editor.xhtmlvalid.setAttrFilter([<b><span style="color: #BC8F8F">'special'</span></b>]);
        <b><span style="color: #A020F0">this</span></b>.conversionTest(data, data);
    }

    <b><span style="color: #A020F0">this</span></b>.tearDown = <b><span style="color: #A020F0">function</span></b>() {
        <b><span style="color: #A020F0">this</span></b>.body.innerHTML = <b><span style="color: #BC8F8F">''</span></b>;
    };
}

KupuXhtmlTestCase.prototype = <b><span style="color: #A020F0">new</span></b> TestCase;
</pre>
<hr />
<address><span style="font-size: smaller">FreeBSD-CVSweb <<a href="mailto:freebsd-cvsweb@FreeBSD.org">freebsd-cvsweb@FreeBSD.org</a>></span></address>
</body>
</html>