Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(302)

Side by Side Diff: tools/telemetry/third_party/coverage/tests/test_testing.py

Issue 1366913004: Add coverage Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 # -*- coding: utf-8 -*-
2 # Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0
3 # For details: https://bitbucket.org/ned/coveragepy/src/default/NOTICE.txt
4
5 """Tests that our test infrastructure is really working!"""
6
7 import datetime
8 import os
9 import sys
10
11 from coverage.backunittest import TestCase
12 from coverage.backward import to_bytes
13 from coverage.files import actual_path
14 from coverage.test_helpers import EnvironmentAwareMixin, TempDirMixin
15
16 from tests.coveragetest import CoverageTest
17
18
19 class TestingTest(TestCase):
20 """Tests of helper methods on `backunittest.TestCase`."""
21
22 def test_assert_count_equal(self):
23 self.assertCountEqual(set(), set())
24 self.assertCountEqual(set([1,2,3]), set([3,1,2]))
25 with self.assertRaises(AssertionError):
26 self.assertCountEqual(set([1,2,3]), set())
27 with self.assertRaises(AssertionError):
28 self.assertCountEqual(set([1,2,3]), set([4,5,6]))
29
30
31 class TempDirMixinTest(TempDirMixin, TestCase):
32 """Test the methods in TempDirMixin."""
33
34 def file_text(self, fname):
35 """Return the text read from a file."""
36 with open(fname, "rb") as f:
37 return f.read().decode('ascii')
38
39 def test_make_file(self):
40 # A simple file.
41 self.make_file("fooey.boo", "Hello there")
42 self.assertEqual(self.file_text("fooey.boo"), "Hello there")
43 # A file in a sub-directory
44 self.make_file("sub/another.txt", "Another")
45 self.assertEqual(self.file_text("sub/another.txt"), "Another")
46 # A second file in that sub-directory
47 self.make_file("sub/second.txt", "Second")
48 self.assertEqual(self.file_text("sub/second.txt"), "Second")
49 # A deeper directory
50 self.make_file("sub/deeper/evenmore/third.txt")
51 self.assertEqual(self.file_text("sub/deeper/evenmore/third.txt"), "")
52
53 def test_make_file_newline(self):
54 self.make_file("unix.txt", "Hello\n")
55 self.assertEqual(self.file_text("unix.txt"), "Hello\n")
56 self.make_file("dos.txt", "Hello\n", newline="\r\n")
57 self.assertEqual(self.file_text("dos.txt"), "Hello\r\n")
58 self.make_file("mac.txt", "Hello\n", newline="\r")
59 self.assertEqual(self.file_text("mac.txt"), "Hello\r")
60
61 def test_make_file_non_ascii(self):
62 self.make_file("unicode.txt", "tabblo: «ταБЬℓσ»")
63 with open("unicode.txt", "rb") as f:
64 text = f.read()
65 self.assertEqual(text, to_bytes("tabblo: «ταБЬℓσ»"))
66
67
68 class EnvironmentAwareMixinTest(EnvironmentAwareMixin, TestCase):
69 """Tests of test_helpers.EnvironmentAwareMixin."""
70
71 def test_setting_and_cleaning_env_vars(self):
72 # The before state.
73 # Not sure what environment variables are available in all of our
74 # different testing environments, so try a bunch.
75 for envvar in ["HOME", "HOMEDIR", "USER", "SYSTEMDRIVE", "TEMP"]: # pr agma: part covered
76 if envvar in os.environ:
77 original_text = os.environ[envvar]
78 new_text = "Some Strange Text"
79 break
80 # pylint: disable=undefined-loop-variable
81 self.assertNotEqual(original_text, new_text)
82 self.assertNotIn("XYZZY_PLUGH", os.environ)
83
84 # Change the environment.
85 self.set_environ(envvar, new_text)
86 self.set_environ("XYZZY_PLUGH", "Vogon")
87
88 self.assertEqual(os.environ[envvar], new_text)
89 self.assertEqual(os.environ["XYZZY_PLUGH"], "Vogon")
90
91 # Do the clean ups early.
92 self.doCleanups()
93
94 # The environment should be restored.
95 self.assertEqual(os.environ[envvar], original_text)
96 self.assertNotIn("XYZZY_PLUGH", os.environ)
97
98
99 class CoverageTestTest(CoverageTest):
100 """Test the methods in `CoverageTest`."""
101
102 def test_arcz_to_arcs(self):
103 self.assertEqual(self.arcz_to_arcs(".1 12 2."), [(-1, 1), (1, 2), (2, -1 )])
104 self.assertEqual(self.arcz_to_arcs("-11 12 2-5"), [(-1, 1), (1, 2), (2, -5)])
105 self.assertEqual(
106 self.arcz_to_arcs("-QA CB IT Z-A"),
107 [(-26, 10), (12, 11), (18, 29), (35, -10)]
108 )
109
110 def test_file_exists(self):
111 self.make_file("whoville.txt", "We are here!")
112 self.assert_exists("whoville.txt")
113 self.assert_doesnt_exist("shadow.txt")
114 with self.assertRaises(AssertionError):
115 self.assert_doesnt_exist("whoville.txt")
116 with self.assertRaises(AssertionError):
117 self.assert_exists("shadow.txt")
118
119 def test_assert_startwith(self):
120 self.assert_starts_with("xyzzy", "xy")
121 self.assert_starts_with("xyz\nabc", "xy")
122 self.assert_starts_with("xyzzy", ("x", "z"))
123 with self.assertRaises(AssertionError):
124 self.assert_starts_with("xyz", "a")
125 with self.assertRaises(AssertionError):
126 self.assert_starts_with("xyz\nabc", "a")
127
128 def test_assert_recent_datetime(self):
129 def now_delta(seconds):
130 """Make a datetime `seconds` seconds from now."""
131 return datetime.datetime.now() + datetime.timedelta(seconds=seconds)
132
133 # Default delta is 10 seconds.
134 self.assert_recent_datetime(now_delta(0))
135 self.assert_recent_datetime(now_delta(-9))
136 with self.assertRaises(AssertionError):
137 self.assert_recent_datetime(now_delta(-11))
138 with self.assertRaises(AssertionError):
139 self.assert_recent_datetime(now_delta(1))
140
141 # Delta is settable.
142 self.assert_recent_datetime(now_delta(0), seconds=120)
143 self.assert_recent_datetime(now_delta(-100), seconds=120)
144 with self.assertRaises(AssertionError):
145 self.assert_recent_datetime(now_delta(-1000), seconds=120)
146 with self.assertRaises(AssertionError):
147 self.assert_recent_datetime(now_delta(1), seconds=120)
148
149 def test_sub_python_is_this_python(self):
150 # Try it with a Python command.
151 os.environ['COV_FOOBAR'] = 'XYZZY'
152 self.make_file("showme.py", """\
153 import os, sys
154 print(sys.executable)
155 print(os.__file__)
156 print(os.environ['COV_FOOBAR'])
157 """)
158 out = self.run_command("python showme.py").splitlines()
159 self.assertEqual(actual_path(out[0]), actual_path(sys.executable))
160 self.assertEqual(out[1], os.__file__)
161 self.assertEqual(out[2], 'XYZZY')
162
163 # Try it with a "coverage debug sys" command.
164 out = self.run_command("coverage debug sys").splitlines()
165 # "environment: COV_FOOBAR = XYZZY" or "COV_FOOBAR = XYZZY"
166 executable = next(l for l in out if "executable:" in l) # pragma: pa rt covered
167 executable = executable.split(":", 1)[1].strip()
168 self.assertTrue(same_python_executable(executable, sys.executable))
169 environ = next(l for l in out if "COV_FOOBAR" in l) # pragma: pa rt covered
170 _, _, environ = environ.rpartition(":")
171 self.assertEqual(environ.strip(), "COV_FOOBAR = XYZZY")
172
173
174 def same_python_executable(e1, e2):
175 """Determine if `e1` and `e2` refer to the same Python executable.
176
177 Either path could include symbolic links. The two paths might not refer
178 to the exact same file, but if they are in the same directory and their
179 numeric suffixes aren't different, they are the same executable.
180
181 """
182 e1 = os.path.abspath(os.path.realpath(e1))
183 e2 = os.path.abspath(os.path.realpath(e2))
184
185 if os.path.dirname(e1) != os.path.dirname(e2):
186 return False # pragma: only failure
187
188 e1 = os.path.basename(e1)
189 e2 = os.path.basename(e2)
190
191 if e1 == "python" or e2 == "python" or e1 == e2:
192 # Python and Python2.3: OK
193 # Python2.3 and Python: OK
194 # Python and Python: OK
195 # Python2.3 and Python2.3: OK
196 return True
197
198 return False # pragma: only failure
OLDNEW
« no previous file with comments | « tools/telemetry/third_party/coverage/tests/test_templite.py ('k') | tools/telemetry/third_party/coverage/tests/test_xml.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698