﻿<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<style>
/*
  === Warning ===

  This file intentionally contains special characters which
  cannot be displayed by some text editors. Please
  carefully edit the file.
*/

#a127_\7F { color:red; }
#b127_ { color:green; }

#a128_\80 { color:red; }
#b128_ { color:green; }

#a159_\9F { color:red; }
#b159_ { color:green; }

#a160_\A0 { color:red; }
#b160_  { color:green; }

#a384_\180 { color:red; }
#b384_ƀ { color:green; }
</style>

<script>

function runTest()
{
    if (window.testRunner)
        testRunner.dumpAsText();

    var rules = document.styleSheets[0].cssRules;
    var text = "";
    for (var i = 0; i < rules.length; i++) {
        text += rules.item(i).cssText;
        text += "\n";
    }

    document.getElementById("result").appendChild(document.createTextNode(text));

    if (document.getElementById("result").firstChild.data === document.getElementById("expected").firstChild.data)
        document.getElementById("message").firstChild.data = "SUCCESS";
    else
        document.getElementById("message").firstChild.data = "FAILURE";
}

</script>

</head>

<body onload="runTest()">

<p>Test parsing of CSS escapes.</p>

<p id="message">TEST DID NOT COMPLETE</p>

<p>Rules from the stylesheet:</p>

<pre id="result"></pre>

<p>Expected result:</p>

<pre id="expected">#a127_\7f  { color: red; }
#a128_ { color: red; }
#b128_ { color: green; }
#a159_ { color: red; }
#b159_ { color: green; }
#a160_  { color: red; }
#b160_  { color: green; }
#a384_ƀ { color: red; }
#b384_ƀ { color: green; }
</pre>

<script>

</script>
</body>
