mirror of
https://github.com/tahoe-lafs/tahoe-lafs.git
synced 2025-02-06 19:20:08 +00:00
68 lines
1.7 KiB
Python
68 lines
1.7 KiB
Python
"""
|
|
Tests to check for Python2 regressions
|
|
"""
|
|
|
|
from inspect import isclass
|
|
|
|
from twisted.python.modules import getModule
|
|
|
|
from testtools import (
|
|
TestCase,
|
|
)
|
|
from testtools.matchers import (
|
|
Equals,
|
|
)
|
|
|
|
BLACKLIST = {
|
|
"allmydata.test.check_load",
|
|
"allmydata.windows.registry",
|
|
}
|
|
|
|
|
|
def is_new_style(cls):
|
|
"""
|
|
:return bool: ``True`` if and only if the given class is "new style".
|
|
"""
|
|
# All new-style classes are instances of type. By definition.
|
|
return isinstance(cls, type)
|
|
|
|
def defined_here(cls, where):
|
|
"""
|
|
:return bool: ``True`` if and only if the given class was defined in a
|
|
module with the given name.
|
|
|
|
:note: Classes can lie about where they are defined. Try not to do that.
|
|
"""
|
|
return cls.__module__ == where
|
|
|
|
class PythonTwoRegressions(TestCase):
|
|
"""
|
|
Regression tests for Python 2 behaviors related to Python 3 porting.
|
|
"""
|
|
def test_new_style_classes(self):
|
|
"""
|
|
All classes in Tahoe-LAFS are new-style.
|
|
"""
|
|
newstyle = set()
|
|
classic = set()
|
|
for mod in getModule("allmydata").walkModules():
|
|
if mod.name in BLACKLIST:
|
|
continue
|
|
|
|
# iterAttributes will only work on loaded modules. So, load it.
|
|
mod.load()
|
|
|
|
for attr in mod.iterAttributes():
|
|
value = attr.load()
|
|
if isclass(value) and defined_here(value, mod.name):
|
|
if is_new_style(value):
|
|
newstyle.add(value)
|
|
else:
|
|
classic.add(value)
|
|
|
|
self.assertThat(
|
|
classic,
|
|
Equals(set()),
|
|
"Expected to find no classic classes.",
|
|
)
|