<html>
<head>
    <script type="text/javascript">
        if (window.testRunner)
            testRunner.dumpAsText();
    </script>
    <style>
        .to_be_shown {
          display:none;
          color:green;
        }
        .to_be_hidden {
          display:block;
          color:red;
        }

        /* Expression containing an invalid block should be skipped */
        #test1 {
            behavior:expression((function(){})());
            display:none;
        }
        #test2 {
            behavior:expression(function(){}());
            display:none;
        }

        /* Value containing an invalid block should be skipped */
        .malformed1 {
          height:{}
        }
        #test3 {
            display:none;
        }

        /* Malformed declaration list should be skipped */
        .malformed2 {
            a:link { color: blue;}
            a:active { color: red;}
        }
        #test4 {
            display:none;
        }

        .malformed3 {
            ;*display:expression(function(){})
        }
        #test5 {
            display:none;
        }

        #test6 {
            display: none !important;
            display: block !important {invalid_block};
        }

        #test7 {
            display: none !important;
        }
        #test7 {
            display: block !important {invalid_block}
        }

        #test8 {
            color: rgb(1,});
            display: none;
        }

        #test9 {
            color: rgb(});
            display: none;
        }

        #test10 {
            width: calc(1,});
            display: none;
        }

        #test11 {
            width: calc(});
            display: none;
        }

        #test12 {
            width: -webkit-min(1,});
            display: none;
        }

        #test13 {
            width: -webkit-min(});
            display: none;
        }

        /* Successfully parsed */
        #last {
            display:block;
        }
    </style>
</head>
<body>
  <div class="to_be_hidden" id="test1">FAIL: Test 1</div>
  <div class="to_be_hidden" id="test2">FAIL: Test 2</div>
  <div class="to_be_hidden" id="test3">FAIL: Test 3</div>
  <div class="to_be_hidden" id="test4">FAIL: Test 4</div>
  <div class="to_be_hidden" id="test5">FAIL: Test 5</div>
  <div class="to_be_hidden" id="test6">FAIL: Test 6</div>
  <div class="to_be_hidden" id="test7">FAIL: Test 7</div>
  <div class="to_be_hidden" id="test8">FAIL: Test 8</div>
  <div class="to_be_hidden" id="test9">FAIL: Test 9</div>
  <div class="to_be_hidden" id="test10">FAIL: Test 10</div>
  <div class="to_be_hidden" id="test11">FAIL: Test 11</div>
  <div class="to_be_hidden" id="test12">FAIL: Test 12</div>
  <div class="to_be_hidden" id="test13">FAIL: Test 13</div>
  <div class="to_be_shown" id="last">PASS</div>
</body>
</html>

