<html xmlns="http://www.w3.org/1999/xhtml">
<body>
  <table id="results" width='100%'>
    <tr>
      <th>case sensitive?</th>
      <th>tag</th>
      <th>namespace</th>
      <th>id</th>
      <th>attribute</th>
      <th>namespace</th>
      <th>first value</th>
      <th>second value</th>
    </tr>
  </table>
  
  <!-- First a few elements created by the parser -->
  <div id="parserTests" style='display: none'>
    <p id="test1" case='first' CASE='second'></p>
    <foobar id="test2" case='first' CASE='second'></foobar>
    <svg xmlns="http://www.w3.org/2000/svg" id="test3" case='first' CASE='second'></svg>
  </div>
  
  <div id="javascriptTests" style='display: none'>
  </div>
  
  <script src="resources/attr-case-sensitivity.js"></script>
  
  <script type="text/javascript">
  
    if (window.layoutTestController)
      layoutTestController.dumpAsText();
    
    resultLog("Parser Tests:")
    checkAttribute(getTestElement(1), 'case');
    checkAttribute(getTestElement(2), 'case');
    checkAttribute(getTestElement(3), 'case');
    
    resultLog("Javascript Tests:")
    var element = createElementForCheck(4, 'p');
    createAndCheckAttributes(element, 'testattr');
    createAndCheckAttributes(element, 'namespacetest', 'http://www.example.com/');
    createAndCheckAttributes(element, 'href', 'http://www.w3.org/1999/xlink');
    
    element = createElementForCheck(5, 'foobar');
    createAndCheckAttributes(element, 'testattr');
    createAndCheckAttributes(element, 'namespacetest', 'http://www.example.com/');
    createAndCheckAttributes(element, 'href', 'http://www.w3.org/1999/xlink');
    
    element = createElementForCheck(6, 'barbar', 'http://www.example.com/');
    createAndCheckAttributes(element, 'testattr');
    createAndCheckAttributes(element, 'namespacetest', 'http://www.example.com/');
    createAndCheckAttributes(element, 'href', 'http://www.w3.org/1999/xlink');
    
    element = createElementForCheck(7, 'svg', 'http://www.w3.org/2000/svg');
    createAndCheckAttributes(element, 'testattr');
    createAndCheckAttributes(element, 'namespacetest', 'http://www.example.com/');
    createAndCheckAttributes(element, 'href', 'http://www.w3.org/1999/xlink');
    
  </script>
</body>
</html>