forked from nedbat/coveragepy
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtest_misc.py
132 lines (99 loc) · 4.11 KB
/
test_misc.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
"""Tests of miscellaneous stuff."""
import sys
from coverage.misc import Hasher, file_be_gone, overrides
from coverage import __version__, __url__
from tests.coveragetest import CoverageTest
class HasherTest(CoverageTest):
"""Test our wrapper of md5 hashing."""
run_in_temp_dir = False
def test_string_hashing(self):
h1 = Hasher()
h1.update("Hello, world!")
h2 = Hasher()
h2.update("Goodbye!")
h3 = Hasher()
h3.update("Hello, world!")
self.assertNotEqual(h1.hexdigest(), h2.hexdigest())
self.assertEqual(h1.hexdigest(), h3.hexdigest())
def test_dict_hashing(self):
h1 = Hasher()
h1.update({'a': 17, 'b': 23})
h2 = Hasher()
h2.update({'b': 23, 'a': 17})
self.assertEqual(h1.hexdigest(), h2.hexdigest())
class RemoveFileTest(CoverageTest):
"""Tests of misc.file_be_gone."""
def test_remove_nonexistent_file(self):
# it's ok to try to remove a file that doesn't exist.
file_be_gone("not_here.txt")
def test_remove_actual_file(self):
# it really does remove a file that does exist.
self.make_file("here.txt", "We are here, we are here, we are here!")
file_be_gone("here.txt")
self.assert_doesnt_exist("here.txt")
def test_actual_errors(self):
# Errors can still happen.
# ". is a directory" on Unix, or "Access denied" on Windows
with self.assertRaises(OSError):
file_be_gone(".")
class SetupPyTest(CoverageTest):
"""Tests of setup.py"""
run_in_temp_dir = False
def test_metadata(self):
status, output = self.run_command_status(
"python setup.py --description --version --url --author"
)
self.assertEqual(status, 0)
out = output.splitlines()
self.assertIn("measurement", out[0])
self.assertEqual(out[1], __version__)
self.assertEqual(out[2], __url__)
self.assertIn("Ned Batchelder", out[3])
def test_more_metadata(self):
# Let's be sure we pick up our own setup.py
# CoverageTest.tearDown restores the original sys.path.
sys.path.insert(0, '')
from setup import setup_args
classifiers = setup_args['classifiers']
self.assertGreater(len(classifiers), 7)
self.assert_starts_with(classifiers[-1], "Development Status ::")
long_description = setup_args['long_description'].splitlines()
self.assertGreater(len(long_description), 7)
self.assertNotEqual(long_description[0].strip(), "")
self.assertNotEqual(long_description[-1].strip(), "")
class OverridesTest(CoverageTest):
"""Test plugins.py:overrides."""
run_in_temp_dir = False
def test_overrides(self):
class SomeBase(object):
"""Base class, two base methods."""
def method1(self):
pass
def method2(self):
pass
class Derived1(SomeBase):
"""Simple single inheritance."""
def method1(self):
pass
self.assertTrue(overrides(Derived1(), "method1", SomeBase))
self.assertFalse(overrides(Derived1(), "method2", SomeBase))
class FurtherDerived1(Derived1):
"""Derive again from Derived1, inherit its method1."""
pass
self.assertTrue(overrides(FurtherDerived1(), "method1", SomeBase))
self.assertFalse(overrides(FurtherDerived1(), "method2", SomeBase))
class FurtherDerived2(Derived1):
"""Override the overridden method."""
def method1(self):
pass
self.assertTrue(overrides(FurtherDerived2(), "method1", SomeBase))
self.assertFalse(overrides(FurtherDerived2(), "method2", SomeBase))
class Mixin(object):
"""A mixin that overrides method1."""
def method1(self):
pass
class Derived2(Mixin, SomeBase):
"""A class that gets the method from the mixin."""
pass
self.assertTrue(overrides(Derived2(), "method1", SomeBase))
self.assertFalse(overrides(Derived2(), "method2", SomeBase))