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

  This file intentionally contains scpecial 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_\ { 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>
