<html>
<head>
<style id="style">@import url("fancyfonts.css") screen;
@media print {
  body { font-size: 10pt }
}
@media screen {
  body { font-size: 13px }
}
@media screen, print {
  body { line-height: 1.2 }
}
.one {display: block;}
.two {display: inline;}
.three {display: list-item; list-style-type: square; margin-left: 3em;}
.four {display: none; color: red;}
I {display: block;}
</style>
</head>
<body onload="runTests();">
<script>
function dumpRuleList(cssRules)
{
	var s = '';
	
	var i;
	for (i = 0; i < cssRules.length; i++) {
		rule = cssRules.item(i);

		switch (rule.type) {
		case CSSRule.IMPORT_RULE:
			s += '@import url("' + rule.href + '") ' + rule.media.mediaText;
			s += ';\n';
			break;
		case CSSRule.STYLE_RULE:		
			s += rule.selectorText + ' { ';
			
			style = rule.style;
			for (j = 0; j < style.length; j++) {
				s += style.item(j) + ': ' + style.getPropertyValue(style.item(j))+ '; ';
			}
			s += '} \n';
			break;
		case CSSRule.MEDIA_RULE:
			s += '@media ' + rule.media.mediaText + ' {\n';
			s += '  ' + dumpRuleList(rule.cssRules);
			s += '}\n';
			break;
		case CSSRule.PAGE_RULE:
			s += '@page ';
			break;
		}

	}
	
	return s;
}

function debug(s) {
	console = document.getElementById('console');
	li = document.createElement('li');
	console.appendChild(li);
	pre = document.createElement('pre');
	li.appendChild(pre);
	t = document.createTextNode(s + '\n');
	pre.appendChild(t);
}

function runTests() {
	if (window.layoutTestController)
		layoutTestController.dumpAsText();

	originalStyle = document.getElementById('style').firstChild.nodeValue;
	debug(originalStyle);

	styleSheet = document.styleSheets.item(0)
	s = dumpRuleList(styleSheet.cssRules);
	debug(s);
	
	s = ""
	for (i = 0; i < styleSheet.cssRules.length; i++) {
		rule = styleSheet.cssRules.item(i);

		s += rule.cssText + '\n';
	}
	debug(s);
}
</script>
This tests different ways of deserializing css stylesheets. The first item below is the style as specified in the document. The second is serialized using the different rule accessors. The third just uses rule.cssText. If the test is successful, all three should be the same.
<ul id="console">
</ul>
</body>
</html>
