<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Strict//EN">
<html>
<head>
    <title>CSS Test: :not selector with :first-letter selector</title>
    <style type="text/css">
    div
    {
        color: green;
    }
    div, *:not(:first-letter)
    {
        color: red;
    }
    div, *:not(::first-letter)
    {
        color: red;
    }
</style>
<script>
    if (window.testRunner)
        window.testRunner.dumpAsText();
</script>
</head>
<body>
    <p>The test passes if there is no red on the page.</p>
    <div>
        <div id="test">Filler Text</div>
    </div>
    <div id="testresult" style="color: blue">Running</div>
    <script type="text/javascript">
       function ArrayContains(array, value, ci)
        {
            ci = ci == true ? true : false;
            for (var i = 0; i < array.length; i++)
            {
                if (ci && array[i].toLowerCase() == value.toLowerCase())
                {
                    return true;
                }
                else if (array[i] == value)
                {
                    return true;
                }
            }
            return false;
        }
        
        function TestCase()
        {
            try
            {
                var target = document.getElementById("test");
                var val = getComputedStyle(target, null).getPropertyValue("color");

                var aExpectedValues = new Array("green", "#008000", "rgb(0, 128, 0)");

                if (ArrayContains(aExpectedValues, val, true))
                {
                  document.getElementById("testresult").innerHTML = "Pass";
                  return;
                }
            }catch(e){}

            document.getElementById("testresult").innerHTML = "Fail";

        }
        TestCase();

    </script>

</body>
</html>
