diff options
author | Ned Batchelder <ned@nedbatchelder.com> | 2014-11-21 05:51:19 -0500 |
---|---|---|
committer | Ned Batchelder <ned@nedbatchelder.com> | 2014-11-21 05:51:19 -0500 |
commit | f4b9914ab81eca5762b66446afa3fd57f84d5ec5 (patch) | |
tree | a0af3a4ef77b10af63c49bc0bd9c0686aa2fff63 | |
parent | b79573db277dc80763bda8660c4e65b03f512981 (diff) | |
download | python-coveragepy-git-f4b9914ab81eca5762b66446afa3fd57f84d5ec5.tar.gz |
Move to the misc.py file
-rw-r--r-- | coverage/control.py | 4 | ||||
-rw-r--r-- | coverage/misc.py | 24 | ||||
-rw-r--r-- | coverage/plugin.py | 23 | ||||
-rw-r--r-- | tests/test_misc.py | 53 | ||||
-rw-r--r-- | tests/test_plugins.py | 52 |
5 files changed, 79 insertions, 77 deletions
diff --git a/coverage/control.py b/coverage/control.py index 1191b9eb..3e04bace 100644 --- a/coverage/control.py +++ b/coverage/control.py @@ -9,12 +9,12 @@ from coverage.collector import Collector from coverage.config import CoverageConfig from coverage.data import CoverageData from coverage.debug import DebugControl -from coverage.plugin import CoveragePlugin, Plugins, overrides +from coverage.plugin import CoveragePlugin, Plugins from coverage.files import FileLocator, TreeMatcher, FnmatchMatcher from coverage.files import PathAliases, find_python_files, prep_patterns from coverage.html import HtmlReporter from coverage.misc import CoverageException, bool_or_none, join_regex -from coverage.misc import file_be_gone +from coverage.misc import file_be_gone, overrides from coverage.results import Analysis, Numbers from coverage.summary import SummaryReporter from coverage.xmlreport import XmlReporter diff --git a/coverage/misc.py b/coverage/misc.py index f9a30bc5..f0e043b9 100644 --- a/coverage/misc.py +++ b/coverage/misc.py @@ -4,6 +4,7 @@ import errno import hashlib import inspect import os +import sys from coverage.backward import string_class, to_bytes @@ -135,6 +136,29 @@ class Hasher(object): return self.md5.hexdigest() +def overrides(obj, method_name, base_class): + """Does `obj` override the `method_name` it got from `base_class`? + + Determine if `obj` implements the method called `method_name`, which it + inherited from `base_class`. + + Returns a boolean. + + """ + klass = obj.__class__ + klass_func = getattr(klass, method_name) + base_func = getattr(base_class, method_name) + + # Python 2/3 compatibility: Python 2 returns an instancemethod object, the + # function is the .im_func attribute. Python 3 returns a plain function + # object already. + if sys.version_info < (3, 0): + klass_func = klass_func.im_func + base_func = base_func.im_func + + return klass_func is not base_func + + class CoverageException(Exception): """An exception specific to Coverage.""" pass diff --git a/coverage/plugin.py b/coverage/plugin.py index 3d41aab9..1e6e2353 100644 --- a/coverage/plugin.py +++ b/coverage/plugin.py @@ -129,26 +129,3 @@ class Plugins(object): def get(self, module): return self.names[module] - - -def overrides(obj, method_name, base_class): - """Does `obj` override the `method_name` it got from `base_class`? - - Determine if `obj` implements the method called `method_name`, which it - inherited from `base_class`. - - Returns a boolean. - - """ - klass = obj.__class__ - klass_func = getattr(klass, method_name) - base_func = getattr(base_class, method_name) - - # Python 2/3 compatibility: Python 2 returns an instancemethod object, the - # function is the .im_func attribute. Python 3 returns a plain function - # object already. - if sys.version_info < (3, 0): - klass_func = klass_func.im_func - base_func = base_func.im_func - - return klass_func is not base_func diff --git a/tests/test_misc.py b/tests/test_misc.py index 37191f67..a2b39a82 100644 --- a/tests/test_misc.py +++ b/tests/test_misc.py @@ -2,10 +2,11 @@ import sys -from coverage.misc import Hasher, file_be_gone +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.""" @@ -79,3 +80,53 @@ class SetupPyTest(CoverageTest): 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)) diff --git a/tests/test_plugins.py b/tests/test_plugins.py index 83840ea3..7c4986a5 100644 --- a/tests/test_plugins.py +++ b/tests/test_plugins.py @@ -5,7 +5,7 @@ import sys from nose.plugins.skip import SkipTest import coverage -from coverage.plugin import Plugins, overrides +from coverage.plugin import Plugins import coverage.plugin @@ -162,53 +162,3 @@ class PluginTest(CoverageTest): self.assertEqual(missing, []) _, statements, _, _ = cov.analysis("/src/try_ABC.zz") self.assertEqual(statements, [105, 106, 107, 205, 206, 207]) - - -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)) |