var UBound = 0;
var bug = 209067;
var summary = 'Testing complicated str.replace()';
var status = '';
var statusitems = [];
var actual = '';
var actualvalues = [];
var expect= '';
var expectedvalues = [];
function formatHTML(h)
{
function S(s)
{
return s.replace(/</g,'<').replace(/>/g,'>');
}
h+='\n';
h=h.replace(/&([^\s]+;)/g,'<&$1>');
h=h.replace(new RegExp('<!-'+'-[\\s\\S]*-'+'->','g'), S);
h=h.replace(/"[^"]*"/g,S);
h=h.replace(/'[^']*'/g,S);
h=h.replace(/<([^>]*)>/g,
function(s,p)
{
if(s.match(/!doctype/i))
return'<span class=doctype><' + p + '></span>';
p=p.replace(/\\'/g,'\\'').replace(/\\"/g,'\\"').replace(/^\s/,'');
p=p.replace(/(\s)([^<]+)$/g,
function(s,p1,p2)
{
p2=p2.replace(/(=)(\s*[^"'][^\s]*)(\s|$)/g,'$1<span class=attribute-value>$2</span>$3');
p2=p2.replace(/("[^"]*")/g,'<span class=attribute-value>$1</span>');
p2=p2.replace(/('[^']*')/g,'<span class=attribute-value>$1</span>');
return p1 + '<span class=attribute-name>'+p2+'</span>';
}
)
return'<<span class=' + (s.match(/<\s*\//)?'end-tag':'start-tag') + '>' + p + '</span>>';
}
)
h=h.replace(/<(&[^\s]+;)>/g,'<span class=entity>$1</span>');
h=h.replace(/(<!--[\s\S]*-->)/g,'<span class=comment>$1</span>');
numer=1;
h=h.replace(/(.*\n)/g,
function(s,p)
{
return (numer++) +'. ' + p;
}
)
return'<span class=text>' + h + '</span>';
}
/*
* sanity check
*/
status = inSection(1);
actual = formatHTML('abc');
expect = '<span class=text>1. abc\n</span>';
addThis();
/*
* The real test: can we run this without crashing?
* We are not validating the result, just running it.
*/
status = inSection(2);
var HUGE_TEST_STRING = hugeString();
formatHTML(HUGE_TEST_STRING);
//-----------------------------------------------------------------------------
test();
//-----------------------------------------------------------------------------
function addThis()
{
statusitems[UBound] = status;
actualvalues[UBound] = actual;
expectedvalues[UBound] = expect;
UBound++;
}
function test()
{
enterFunc('test');
printBugNumber(bug);
printStatus(summary);
for (var i=0; i<UBound; i++)
{
reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]);
}
exitFunc ('test');
}
function hugeString()
{
var s = '';
s += '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">';
s += '<html lang="en">';
s += '<head>';
s += ' <meta http-equiv="content-type" content="text/html; charset=iso-8859-1">';
s += ' <meta http-equiv="refresh" content="1800">';
s += ' <title>CNN.com</title>';
s += ' <link rel="Start" href="/">';
s += ' <link rel="Search" href="/search/">';
s += ' <link rel="stylesheet" href="http://i.cnn.net/cnn/.element/ssi/css/1.0/main.css" type="text/css">';
s += ' <script language="JavaScript1.2" src="http://i.cnn.net/cnn/.element/ssi/js/1.0/main.js" type="text/javascript">