PageRenderTime 118ms CodeModel.GetById 23ms RepoModel.GetById 1ms app.codeStats 0ms

/pyjs/tests/test-report.py

http://pyjamas.googlecode.com/
Python | 191 lines | 181 code | 9 blank | 1 comment | 3 complexity | 1ad084e373ef549c50858a8c8d14e567 MD5 | raw file
Possible License(s): LGPL-2.1, Apache-2.0
  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. """