summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNed Batchelder <ned@nedbatchelder.com>2014-11-21 05:51:19 -0500
committerNed Batchelder <ned@nedbatchelder.com>2014-11-21 05:51:19 -0500
commitf4b9914ab81eca5762b66446afa3fd57f84d5ec5 (patch)
treea0af3a4ef77b10af63c49bc0bd9c0686aa2fff63
parentb79573db277dc80763bda8660c4e65b03f512981 (diff)
downloadpython-coveragepy-git-f4b9914ab81eca5762b66446afa3fd57f84d5ec5.tar.gz
Move to the misc.py file
-rw-r--r--coverage/control.py4
-rw-r--r--coverage/misc.py24
-rw-r--r--coverage/plugin.py23
-rw-r--r--tests/test_misc.py53
-rw-r--r--tests/test_plugins.py52
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))