summaryrefslogtreecommitdiff
path: root/tests/test_html.py
diff options
context:
space:
mode:
authorNed Batchelder <ned@nedbatchelder.com>2015-08-31 07:51:51 -0400
committerNed Batchelder <ned@nedbatchelder.com>2015-08-31 07:51:51 -0400
commit5164d566f03894f0fe9f29dc4e9721edfdf32818 (patch)
treeb111451d253cdd48500fce07c844d6aced8fedc0 /tests/test_html.py
parent0c895c59e72c7972533a32add7a771b745fa2089 (diff)
downloadpython-coveragepy-git-5164d566f03894f0fe9f29dc4e9721edfdf32818.tar.gz
Convert farm html tests to goldtests.
Diffstat (limited to 'tests/test_html.py')
-rw-r--r--tests/test_html.py301
1 files changed, 269 insertions, 32 deletions
diff --git a/tests/test_html.py b/tests/test_html.py
index 360f967a..13fdf9bb 100644
--- a/tests/test_html.py
+++ b/tests/test_html.py
@@ -5,15 +5,20 @@
"""Tests that HTML generation is awesome."""
import datetime
+import glob
+import os
import os.path
import re
import sys
import coverage
+import coverage.files
import coverage.html
from coverage.misc import CoverageException, NotPython, NoSource
from tests.coveragetest import CoverageTest
+from tests.goldtest import CoverageGoldTest
+from tests.goldtest import change_dir, compare, contains, doesnt_contain, contains_any
class HtmlTestHelpers(CoverageTest):
@@ -468,50 +473,282 @@ class HtmlStaticFileTest(CoverageTest):
cov.html_report()
-class CoverageGoldTest(CoverageTest):
-
- run_in_temp_dir = False
-
- def setUp(self):
- super(CoverageGoldTest, self).setUp()
- self.chdir(self.root_dir)
- # Modules should be importable from the current directory.
- sys.path.insert(0, '')
-
- def output_dir(self, the_dir):
- self.addCleanup(self.cleanup_output_dir, the_dir)
-
- def cleanup_output_dir(self, the_dir):
- if not os.environ.get("COVERAGE_KEEP_OUTPUT"):
- clean(the_dir)
-
-from coverage.test_helpers import change_dir
-from tests.test_farm import clean, compare, contains
-
class HtmlGoldTests(CoverageGoldTest):
root_dir = 'tests/farm/html'
def test_a(self):
- self.output_dir("html_a")
+ self.output_dir("out/a")
with change_dir("src"):
cov = coverage.Coverage()
cov.start()
- import a
- cov.stop()
- cov.html_report(a, directory='../html_a')
-
- compare("gold_a", "html_a", size_within=10, file_pattern="*.html")
- contains("html_a/a_py.html",
- '<span class="key">if</span> <span class="num">1</span> '
- '<span class="op">&lt;</span> <span class="num">2</span>',
- '&nbsp; &nbsp; <span class="nam">a</span> '
- '<span class="op">=</span> <span class="num">3</span>',
+ import a # pragma: nested
+ cov.stop() # pragma: nested
+ cov.html_report(a, directory='../out/a')
+
+ compare("gold_a", "out/a", size_within=10, file_pattern="*.html")
+ contains(
+ "out/a/a_py.html",
+ ('<span class="key">if</span> <span class="num">1</span> '
+ '<span class="op">&lt;</span> <span class="num">2</span>'),
+ ('&nbsp; &nbsp; <span class="nam">a</span> '
+ '<span class="op">=</span> <span class="num">3</span>'),
'<span class="pc_cov">67%</span>',
)
- contains("html_a/index.html",
+ contains(
+ "out/a/index.html",
'<a href="a_py.html">a.py</a>',
'<span class="pc_cov">67%</span>',
'<td class="right" data-ratio="2 3">67%</td>',
)
+
+ def test_b_branch(self):
+ self.output_dir("out/b_branch")
+
+ with change_dir("src"):
+ cov = coverage.Coverage(branch=True)
+ cov.start()
+ import b # pragma: nested
+ cov.stop() # pragma: nested
+ cov.html_report(b, directory="../out/b_branch")
+
+ compare("gold_b_branch", "out/b_branch", size_within=10, file_pattern="*.html")
+ contains(
+ "out/b_branch/b_py.html",
+ ('<span class="key">if</span> <span class="nam">x</span> '
+ '<span class="op">&lt;</span> <span class="num">2</span>'),
+ ('&nbsp; &nbsp; <span class="nam">a</span> <span class="op">=</span> '
+ '<span class="num">3</span>'),
+ '<span class="pc_cov">70%</span>',
+ ('<span class="annotate" title="Line 8 was executed, but never jumped to line 11">'
+ '8&#x202F;&#x219B;&#x202F;11 [?]</span>'),
+ ('<span class="annotate" title="Line 17 was executed, but never jumped '
+ 'to the function exit">17&#x202F;&#x219B;&#x202F;exit [?]</span>'),
+ ('<span class="annotate" title="Line 25 was executed, but never jumped '
+ 'to line 26 or line 28">25&#x202F;&#x219B;&#x202F;26,&nbsp;&nbsp; '
+ '25&#x202F;&#x219B;&#x202F;28 [?]</span>'),
+ )
+ contains(
+ "out/b_branch/index.html",
+ '<a href="b_py.html">b.py</a>',
+ '<span class="pc_cov">70%</span>',
+ '<td class="right" data-ratio="16 23">70%</td>',
+ )
+
+ def test_bom(self):
+ self.output_dir("out/bom")
+
+ with change_dir("src"):
+ cov = coverage.Coverage()
+ cov.start()
+ import bom # pragma: nested
+ cov.stop() # pragma: nested
+ cov.html_report(bom, directory="../out/bom")
+
+ compare("gold_bom", "out/bom", size_within=10, file_pattern="*.html")
+ contains(
+ "out/bom/bom_py.html",
+ '<span class="str">&quot;3&#215;4 = 12, &#247;2 = 6&#177;0&quot;</span>',
+ )
+
+ def test_isolatin1(self):
+ self.output_dir("out/isolatin1")
+
+ with change_dir("src"):
+ cov = coverage.Coverage()
+ cov.start()
+ import isolatin1 # pragma: nested
+ cov.stop() # pragma: nested
+ cov.html_report(isolatin1, directory="../out/isolatin1")
+
+ compare("gold_isolatin1", "out/isolatin1", size_within=10, file_pattern="*.html")
+ contains(
+ "out/isolatin1/isolatin1_py.html",
+ '<span class="str">&quot;3&#215;4 = 12, &#247;2 = 6&#177;0&quot;</span>',
+ )
+
+ def test_omit_1(self):
+ self.output_dir("out/omit_1")
+
+ with change_dir("src"):
+ cov = coverage.Coverage(include=["./*"])
+ cov.start()
+ import main # pragma: nested
+ cov.stop() # pragma: nested
+ cov.html_report(directory="../out/omit_1")
+
+ compare("gold_omit_1", "out/omit_1", size_within=10, file_pattern="*.html")
+
+ def test_omit_2(self):
+ self.output_dir("out/omit_2")
+
+ with change_dir("src"):
+ cov = coverage.Coverage(include=["./*"])
+ cov.start()
+ import main # pragma: nested
+ cov.stop() # pragma: nested
+ cov.html_report(directory="../out/omit_2", omit=["m1.py"])
+
+ compare("gold_omit_2", "out/omit_2", size_within=10, file_pattern="*.html")
+
+ def test_omit_3(self):
+ self.output_dir("out/omit_3")
+
+ with change_dir("src"):
+ cov = coverage.Coverage(include=["./*"])
+ cov.start()
+ import main # pragma: nested
+ cov.stop() # pragma: nested
+ cov.html_report(directory="../out/omit_3", omit=["m1.py", "m2.py"])
+
+ compare("gold_omit_3", "out/omit_3", size_within=10, file_pattern="*.html")
+
+ def test_omit_4(self):
+ self.output_dir("out/omit_4")
+
+ with change_dir("src"):
+ cov = coverage.Coverage(config_file="omit4.ini", include=["./*"])
+ cov.start()
+ import main # pragma: nested
+ cov.stop() # pragma: nested
+ cov.html_report(directory="../out/omit_4")
+
+ compare("gold_omit_4", "out/omit_4", size_within=10, file_pattern="*.html")
+
+ def test_omit_5(self):
+ self.output_dir("out/omit_5")
+
+ with change_dir("src"):
+ cov = coverage.Coverage(config_file="omit5.ini", include=["./*"])
+ cov.start()
+ import main # pragma: nested
+ cov.stop() # pragma: nested
+ cov.html_report()
+
+ compare("gold_omit_5", "out/omit_5", size_within=10, file_pattern="*.html")
+
+ def test_other(self):
+ self.output_dir("out/other")
+
+ with change_dir("src"):
+ sys.path.insert(0, "../othersrc")
+ cov = coverage.Coverage(include=["./*", "../othersrc/*"])
+ cov.start()
+ import here # pragma: nested
+ cov.stop() # pragma: nested
+ cov.html_report(directory="../out/other")
+
+ # Different platforms will name the "other" file differently. Rename it
+ for p in glob.glob("out/other/*_other_py.html"):
+ os.rename(p, "out/other/blah_blah_other_py.html")
+
+ compare("gold_other", "out/other", size_within=10, file_pattern="*.html")
+ contains(
+ "out/other/index.html",
+ '<a href="here_py.html">here.py</a>',
+ 'other_py.html">', 'other.py</a>',
+ )
+
+ def test_partial(self):
+ self.output_dir("out/partial")
+
+ with change_dir("src"):
+ cov = coverage.Coverage(branch=True)
+ cov.start()
+ import partial # pragma: nested
+ cov.stop() # pragma: nested
+ cov.html_report(partial, directory="../out/partial")
+
+ compare("gold_partial", "out/partial", size_within=10, file_pattern="*.html")
+ contains(
+ "out/partial/partial_py.html",
+ '<p id="t8" class="stm run hide_run">',
+ '<p id="t11" class="stm run hide_run">',
+ '<p id="t14" class="stm run hide_run">',
+ # The "if 0" and "if 1" statements are optimized away.
+ '<p id="t17" class="pln">',
+ )
+ contains(
+ "out/partial/index.html",
+ '<a href="partial_py.html">partial.py</a>',
+ )
+ contains(
+ "out/partial/index.html",
+ '<span class="pc_cov">100%</span>'
+ )
+
+ def test_styled(self):
+ self.output_dir("out/styled")
+
+ with change_dir("src"):
+ cov = coverage.Coverage()
+ cov.start()
+ import a # pragma: nested
+ cov.stop() # pragma: nested
+ cov.html_report(a, directory="../out/styled", extra_css="extra.css")
+
+ compare("gold_styled", "out/styled", size_within=10, file_pattern="*.html")
+ compare("gold_styled", "out/styled", size_within=10, file_pattern="*.css")
+ contains(
+ "out/styled/a_py.html",
+ '<link rel="stylesheet" href="extra.css" type="text/css">',
+ ('<span class="key">if</span> <span class="num">1</span> '
+ '<span class="op">&lt;</span> <span class="num">2</span>'),
+ ('&nbsp; &nbsp; <span class="nam">a</span> <span class="op">=</span> '
+ '<span class="num">3</span>'),
+ '<span class="pc_cov">67%</span>'
+ )
+ contains(
+ "out/styled/index.html",
+ '<link rel="stylesheet" href="extra.css" type="text/css">',
+ '<a href="a_py.html">a.py</a>',
+ '<span class="pc_cov">67%</span>'
+ )
+
+ def test_tabbed(self):
+ self.output_dir("out/tabbed")
+
+ with change_dir("src"):
+ cov = coverage.Coverage()
+ cov.start()
+ import tabbed # pragma: nested
+ cov.stop() # pragma: nested
+ cov.html_report(tabbed, directory="../out/tabbed")
+
+ # Editors like to change things, make sure our source file still has tabs.
+ contains("src/tabbed.py", "\tif x:\t\t\t\t\t# look nice")
+
+ contains(
+ "out/tabbed/tabbed_py.html",
+ '>&nbsp; &nbsp; &nbsp; &nbsp; <span class="key">if</span> '
+ '<span class="nam">x</span><span class="op">:</span>'
+ '&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; '
+ '&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; '
+ '<span class="com"># look nice</span>'
+ )
+
+ doesnt_contain("out/tabbed/tabbed_py.html", "\t")
+
+ def test_unicode(self):
+ self.output_dir("out/unicode")
+
+ with change_dir("src"):
+ cov = coverage.Coverage()
+ cov.start()
+ import unicode # pragma: nested
+ cov.stop() # pragma: nested
+ cov.html_report(unicode, directory="../out/unicode")
+
+ compare("gold_unicode", "out/unicode", size_within=10, file_pattern="*.html")
+ contains(
+ "out/unicode/unicode_py.html",
+ ('<span class="str">&quot;&#654;d&#729;&#477;b&#592;&#633;&#477;&#652;o&#596;&quot;'
+ '</span>'),
+ )
+
+ contains_any(
+ "out/unicode/unicode_py.html",
+ '<span class="str">&quot;db40,dd00: x&#56128;&#56576;&quot;</span>',
+ '<span class="str">&quot;db40,dd00: x&#917760;&quot;</span>',
+ )