<!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.layoutTestController)
        window.layoutTestController.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>
