<html>
<head>
<script src="../../resources/js-test-pre.js"></script>
<script>
jsTestIsAsync = true;

if (window.testRunner)
    window.testRunner.keepWebHistory();

function compareStyles()
{
    if (window.internals) {
        firstStyle = internals.computedStyleIncludingVisitedInfo(document.getElementById('one'));
        secondStyle = internals.computedStyleIncludingVisitedInfo(document.getElementById('two'));
        shouldBecomeEqual('firstStyle.color', 'secondStyle.color', finishJSTest);
    }
}
</script>
<style>
#one:link { color: green }
#two:link { color: purple }
#one:visited { color: orange }
#two.test:visited { color: orange }
</style>
</head>
<body onload="compareStyles()">
<iframe src="resources/dummy.html" style="display:none"></iframe>
<p>These two links should be the same color (orange):</p>
<p>
  <a href="resources/dummy.html" id="one">One</a>
  <a href="resources/dummy.html" id="two" class="test">Two</a><br>
</p>
<div id=console></div>
</body>
<script src="../../resources/js-test-post.js"></script>
</html>
