#!/usr/bin/env python
# -*- coding: Latin-1 -*-

import sys
print sys.prefix
print sys.path

from xml.dom.NodeFilter import NodeFilter
from xml.dom import Node
# http://sourceforge.net/project/showfiles.php?group_id=6473&package_id=6541&release_id=174846
from xml.dom.ext.reader import Sax2


def printHeader(filename):
    print '<html>'
    print '<head>'
    print '<title>' + filename + '</title>'
    print '</head>'
    print '<body>'

    
def printSummary(testcases, tests, passes, fails, errors, fatals):
    print '<table border="1" cellpadding="1" width="100%">'
    print '<caption>Summary</caption>'
    print '<tr>'
    print '<td>Test cases</td><td>' + testcases + '</td>'
    print '</tr>'
    print '<tr>'
    print '<td>Tests</td><td>' + tests + '</td>'
    print '</tr>'
    print '<tr>'
    print '<td>Passes</td><td>' + passes + '</td>'
    print '</tr>'
    print '<tr>'
    print '<td>Fails</td><td>' + fails + '</td>'
    print '</tr>'
    print '<tr>'
    print '<td>Errors</td><td>' + errors + '</td>'
    print '</tr>'
    print '<tr>'
    print '<td>Fatals</td><td>' + fatals + '</td>'
    print '</tr>'
    print '</table>'

    print "<table border=\"1\" cellpadding=\"3\" width=\"100%\">"
    print "<caption>Results</caption>"    


def printResult(result, time, line, message, detail):
    isReport = True
    if (isReport):
        if result == "LOG" or result == "START" or result == "END":
            return
        #end-if
    #end-if
        
    if result == "PASS":
        print '<tr bgcolor="green">'
    elif result == "FAIL":
        print '<tr bgcolor="yellow">'
    elif result == "ERROR" or result == "FATAL":
        print '<tr bgcolor="red">'
    else:
        print '<tr>'

    if result == "START" or result == "END":
        print '<td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td>' % \
               (result, time, "", "", "")
    elif result == "START_TEST_CASE" or result == "END_TEST_CASE":
        messageList = message.split("'")
        message = messageList[1]
        print '<td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td>' % \
               (result, time, "", message, "")
    elif result == "PASS" or result == "FAIL" or result == "ERROR" or \
         result == "FATAL" or result == "LOG":
        messageList = message.split(":")
        message = messageList[len(messageList)-1]        
        print '<td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td>' % \
               (result, "", line, message, detail)
    else :
        print '<td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td>' % \
               (result, time, line, message, detail)
        
    print '</tr>'    


def printFooter():
    print '</table>'
    print "</body>"
    print "</html>"


# create Reader object
reader = Sax2.Reader()

# open input file
if len(sys.argv) < 2:
    raise RuntimeError, "Missing a file name argument"
datasource = open(sys.argv[1])

# parse the document
doc = reader.fromStream(datasource)

# we can close the file again
datasource.close()

# create tree walker instance
walker = doc.createTreeWalker(doc.documentElement,
                              NodeFilter.SHOW_ELEMENT, None, 0)

# start output
printHeader(sys.argv[1])

# iterate over all nodes
node = walker.currentNode
while not node is None:
    attrs = node.attributes

    if node.nodeName == "summary":
        printSummary(node.getAttribute("testcases"),
                     node.getAttribute("tests"),
                     node.getAttribute("passes"),
                     node.getAttribute("fails"),
                     node.getAttribute("errors"),
                     node.getAttribute("fatals"))
    elif node.nodeName == "testresult":
        printResult(node.getAttribute("result"),
                    node.getAttribute("time"),
                    node.getAttribute("line"),
                    node.getAttribute("message"),
                    node.firstChild.nodeValue)


    # move to next node
    node = walker.nextNode()

# end output
printFooter()
