<!DOCTYPE html>
<html lang="en">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>layouts</title>
    <link rel="stylesheet" type="text/css" href="style.css">
    <script src="jquery.min.js" type="text/javascript"></script>
    <script src="highcharts.js" type="text/javascript"></script>
    <script type="text/javascript">
    $(document).ready(function() {
          var classCoverageDistribution = new Highcharts.Chart({
             chart: {
                renderTo: 'classCoverageDistribution',
                type: 'column'
             },
             title: {text: ''},
             legend: {enabled: false},
             credits: {enabled: false},
             tooltip: {enabled: false},
             xAxis: {
                 labels: {style: {fontSize: '8px'}},
                 categories: [
                 '0%','0-10%','10-20%','20-30%','30-40%','40-50%','50-60%','60-70%','70-80%','80-90%','90-100%','100%'
                 ]
            },
            yAxis: {
                title: '',
                labels: {style: {fontSize: '8px'}},
            },
            series: [{
                data: [0,0,0,0,0,0,1,0,1,1,0,3]
            }],
          });

        var classComplexity = new Highcharts.Chart({
            chart: {
              renderTo: 'classComplexity',
              type: 'scatter'
            },
            title: {text: ''},
            legend: {enabled: false},
            credits: {enabled: false},
            xAxis: {
               labels: {enabled: false},
            },
            yAxis: {
              title: '',
              labels: {enabled: false},
            },
            tooltip: {
                formatter: function() {
                    return this.point.config[2];
                }
            },
            series: [{
              data: [[79.452054794521,13,"<a href=\"layouts_LoggerLayoutHtml.php.html#49\">LoggerLayoutHtml<\/a>"],[100,6,"<a href=\"layouts_LoggerLayoutPattern.php.html#138\">LoggerLayoutPattern<\/a>"],[100,4,"<a href=\"layouts_LoggerLayoutSerialized.php.html#33\">LoggerLayoutSerialized<\/a>"],[100,1,"<a href=\"layouts_LoggerLayoutSimple.php.html#41\">LoggerLayoutSimple<\/a>"],[54.545454545455,19,"<a href=\"layouts_LoggerLayoutTTCC.php.html#51\">LoggerLayoutTTCC<\/a>"],[85.454545454545,15,"<a href=\"layouts_LoggerLayoutXml.php.html#56\">LoggerLayoutXml<\/a>"]],
              marker: {
                  symbol: 'diamond'
              }
            }],
        });
    });
    </script>
  </head>

  <body>
    <table width="100%" border="0" cellspacing="0" cellpadding="0">
      <tr><td class="title">layouts</td></tr>
      <tr><td><div align="center"><p><a href="layouts.html">Back to Code Coverage report</a></p></div></td></tr>
      <tr><td class="ruler"><img src="glass.png" width="3" height="3" alt=""></td></tr>
    </table>

    <br />

    <center>
      <table width="90%" cellpadding="2" cellspacing="1" border="0">
        <tr>
          <td valign="top">
            <h2>Class Coverage Distribution</h2>
            <div id="classCoverageDistribution"></div>
          </td>

          <td valign="top">
            <h2>Class Complexity</h2>
            <div id="classComplexity"></div>
          </td>
        </tr>
        <tr>
          <td valign="top">
            <h2>Top Project Risks</h2>
            <ul>
              <li><a href="layouts_LoggerLayoutTTCC.php.html#51">LoggerLayoutTTCC</a> (52)</li>
              <li><a href="layouts_LoggerLayoutXml.php.html#56">LoggerLayoutXml</a> (15)</li>
              <li><a href="layouts_LoggerLayoutHtml.php.html#49">LoggerLayoutHtml</a> (14)</li>

            </ul>
          </td>

          <td valign="top">
            <h2>Least Tested Methods</h2>
            <ul>
              <li><a href="layouts_LoggerLayoutTTCC.php.html#140">LoggerLayoutTTCC::setDateFormat</a> (0%)</li>
              <li><a href="layouts_LoggerLayoutTTCC.php.html#135">LoggerLayoutTTCC::getMicroSecondsPrinting</a> (0%)</li>
              <li><a href="layouts_LoggerLayoutTTCC.php.html#128">LoggerLayoutTTCC::setMicroSecondsPrinting</a> (0%)</li>
              <li><a href="layouts_LoggerLayoutTTCC.php.html#147">LoggerLayoutTTCC::getDateFormat</a> (0%)</li>
              <li><a href="layouts_LoggerLayoutTTCC.php.html#194">LoggerLayoutTTCC::ignoresThrowable</a> (0%)</li>
              <li><a href="layouts_LoggerLayoutXml.php.html#182">LoggerLayoutXml::setLocationInfo</a> (0%)</li>
              <li><a href="layouts_LoggerLayoutXml.php.html#162">LoggerLayoutXml::getFooter</a> (0%)</li>
              <li><a href="layouts_LoggerLayoutXml.php.html#101">LoggerLayoutXml::getHeader</a> (0%)</li>
              <li><a href="layouts_LoggerLayoutTTCC.php.html#119">LoggerLayoutTTCC::getContextPrinting</a> (0%)</li>
              <li><a href="layouts_LoggerLayoutTTCC.php.html#112">LoggerLayoutTTCC::setContextPrinting</a> (0%)</li>

            </ul>
          </td>
        </tr>
      </table>
    </center>

    <br />

    <table width="100%" border="0" cellspacing="0" cellpadding="0">
      <tr><td class="ruler"><img src="glass.png" width="3" height="3" alt=""></td></tr>
      <tr><td class="versionInfo">Generated by <a href="http://github.com/sebastianbergmann/php-code-coverage" target="_top">PHP_CodeCoverage 1.1.1</a> using <a href="http://www.php.net/" target="_top">PHP 5.3.3-7+squeeze3</a> and PHPUnit 3.6.3 at Sat Feb 18 22:32:39 GMT 2012.</td></tr>
    </table>

    <br/>
  </body>
</html>
