/pyjs/tests/test-report.py

http://pyjamas.googlecode.com/ · Python · 191 lines · 169 code · 21 blank · 1 comment · 12 complexity · 1ad084e373ef549c50858a8c8d14e567 MD5 · raw file

  1. #!/usr/bin/env python
  2. import sys
  3. import difflib
  4. differ = difflib.HtmlDiff()
  5. class Coverage:
  6. def __init__(self, testset_name):
  7. self.testset_name = testset_name
  8. self.lines = {}
  9. def tracer(self, frame, event, arg):
  10. lineno = frame.f_lineno
  11. filename = frame.f_globals["__file__"]
  12. if filename[-4:] in [".pyc", ".pyo"]:
  13. filename = filename[:-1]
  14. self.lines[filename][lineno] = self.lines.setdefault(filename, {}).get(lineno, 0) + 1
  15. return self.tracer
  16. def start(self):
  17. sys.settrace(self.tracer)
  18. def stop(self):
  19. sys.settrace(None)
  20. def output(self, *files):
  21. print """
  22. <html>
  23. <head>
  24. <title>Coverage for %s</title>
  25. <style>
  26. body {
  27. color: #000;
  28. background-color: #FFF;
  29. }
  30. h1, h2 {
  31. font-family: sans-serif;
  32. font-weight: normal;
  33. }
  34. td {
  35. white-space: pre;
  36. padding: 1px 5px;
  37. font-family: monospace;
  38. font-size: 10pt;
  39. }
  40. td.hit {
  41. }
  42. td.hit-line {
  43. }
  44. td.miss {
  45. background-color: #C33;
  46. }
  47. td.miss-line {
  48. background-color: #FCC;
  49. }
  50. td.ignore {
  51. color: #999;
  52. }
  53. td.ignore-line {
  54. color: #999;
  55. }
  56. td.lineno {
  57. color: #999;
  58. background-color: #EEE;
  59. }
  60. </style>
  61. </head>
  62. <body>
  63. """ % self.testset_name
  64. print """
  65. <h1>Coverage for %s</h1>
  66. """ % self.testset_name
  67. for filename in files:
  68. print """
  69. <h2>%s</h2>
  70. <table>
  71. """ % filename
  72. code = open(filename).readlines()
  73. for lineno, line in enumerate(code):
  74. count = self.lines[filename].get(lineno + 1, 0)
  75. if count == 0:
  76. if line.strip() in ["", "else:"] or line.strip().startswith("#"):
  77. klass = "ignore"
  78. else:
  79. klass = "miss"
  80. else:
  81. klass = "hit"
  82. klass2 = klass + "-line"
  83. print """<tr><td class="lineno">%s</td><td class="%s">%s</td><td class="%s">%s</td></tr>""" % (lineno + 1, klass, count, klass2, line.strip("\n"))
  84. print """
  85. </table>
  86. """
  87. print """
  88. </body>
  89. </html>
  90. """
  91. print """
  92. <html>
  93. <head>
  94. <style>
  95. .diff_add { background: #9F9; }
  96. .diff_sub { background: #F99; }
  97. .diff_chg { background: #FF9; }
  98. .diff_header { background: #DDD; padding: 0px 3px; }
  99. .diff_next { padding: 0px 3px; }
  100. table.diff {
  101. font-family: monospace;
  102. }
  103. </style>
  104. </head>
  105. <body>
  106. """
  107. def test(filename, module):
  108. print "<h1>" + filename + "</h1>"
  109. try:
  110. output = pyjs.translate(filename + ".py", module)
  111. desired_output = open(filename + ".js").read()
  112. if output == desired_output:
  113. print "<p>pass</p>"
  114. else:
  115. print differ.make_table(output.split("\n"), desired_output.split("\n"), context=True)
  116. except Exception, e:
  117. print "\texception", e
  118. import sys
  119. sys.path.append("..")
  120. import pyjs
  121. test("test001", "ui")
  122. test("test002", "ui")
  123. test("test003", "ui")
  124. test("test004", "ui")
  125. test("test005", "ui")
  126. test("test006", "ui")
  127. test("test007", "ui")
  128. test("test008", "ui")
  129. test("test009", "ui")
  130. test("test010", None)
  131. test("test011", None)
  132. test("test012", None)
  133. test("test013", "ui")
  134. test("test014", None)
  135. test("test015", None)
  136. test("test016", None)
  137. test("test017", None)
  138. test("test018", None)
  139. test("test019", None)
  140. test("test020", None)
  141. test("test021", None)
  142. test("test022", None)
  143. test("test023", None)
  144. test("test024", None)
  145. test("test025", None)
  146. test("test026", None)
  147. test("test027", None)
  148. test("test028", None)
  149. test("test029", None)
  150. test("test030", None)
  151. test("test031", None)
  152. test("test032", None)
  153. test("test033", None)
  154. test("test034", None)
  155. test("test035", None)
  156. test("test036", None)
  157. test("test037", None)
  158. test("test038", None)
  159. test("test039", None)
  160. test("test040", None)
  161. test("test041", None)
  162. test("test042", None)
  163. test("test043", None)
  164. test("test044", None)
  165. test("test045", None)
  166. test("test046", None)
  167. print """
  168. </body>
  169. </html>
  170. """