Move the python imports test out of the build test module

The build test is designed to run with frozen calibre, where the
source files may not be available. So run it only as part of
the setup test suite.
This commit is contained in:
Kovid Goyal 2019-03-31 09:31:38 +05:30
parent 496d8beed8
commit c33768b35e
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C
2 changed files with 46 additions and 41 deletions

View File

@ -2,15 +2,57 @@
# vim:fileencoding=utf-8 # vim:fileencoding=utf-8
# License: GPLv3 Copyright: 2016, Kovid Goyal <kovid at kovidgoyal.net> # License: GPLv3 Copyright: 2016, Kovid Goyal <kovid at kovidgoyal.net>
from __future__ import (unicode_literals, division, absolute_import, from __future__ import absolute_import, division, print_function, unicode_literals
print_function)
import os
import unittest import unittest
from setup import Command from setup import Command, islinux, isosx, iswindows, SRC
TEST_MODULES = frozenset('srv db polish opf css docx cfi matcher icu smartypants build misc dbcli'.split()) TEST_MODULES = frozenset('srv db polish opf css docx cfi matcher icu smartypants build misc dbcli'.split())
class TestImports(unittest.TestCase):
def test_import_of_all_python_modules(self):
import importlib
exclude_modules = {'calibre.gui2.dbus_export.demo', 'calibre.gui2.dbus_export.gtk'}
exclude_packages = {'calibre.devices.mtp.unix.upstream'}
if not iswindows:
exclude_modules |= {'calibre.utils.iphlpapi', 'calibre.utils.open_with.windows', 'calibre.devices.winusb'}
exclude_packages |= {'calibre.utils.winreg'}
if not isosx:
exclude_modules.add('calibre.utils.open_with.osx')
if not islinux:
exclude_modules |= {
'calibre.utils.dbus_service', 'calibre.linux',
'calibre.utils.linux_trash', 'calibre.utils.open_with.linux',
'calibre.gui2.linux_file_dialogs'
}
exclude_packages.add('calibre.gui2.dbus_export')
base = os.path.join(SRC, 'calibre')
import_base = os.path.dirname(base)
count = 0
for root, dirs, files in os.walk(base):
for d in dirs:
if not os.path.isfile(os.path.join(root, d, '__init__.py')):
dirs.remove(d)
for fname in files:
module_name, ext = os.path.splitext(fname)
if ext != '.py':
continue
path = os.path.join(root, module_name)
relpath = os.path.relpath(path, import_base).replace(os.sep, '/')
full_module_name = '.'.join(relpath.split('/'))
if full_module_name.endswith('.__init__'):
full_module_name = full_module_name.rpartition('.')[0]
if full_module_name in exclude_modules or ('.' in full_module_name and full_module_name.rpartition('.')[0] in exclude_packages):
continue
importlib.import_module(full_module_name)
count += 1
self.assertGreater(count, 1000)
def find_tests(which_tests=None): def find_tests(which_tests=None):
ans = [] ans = []
a = ans.append a = ans.append
@ -76,6 +118,7 @@ def find_tests(which_tests=None):
a(find_tests()) a(find_tests())
from calibre.library.comments import find_tests from calibre.library.comments import find_tests
a(find_tests()) a(find_tests())
a(unittest.defaultTestLoader.loadTestsFromTestCase(TestImports))
if ok('dbcli'): if ok('dbcli'):
from calibre.db.cli.tests import find_tests from calibre.db.cli.tests import find_tests
a(find_tests()) a(find_tests())

View File

@ -73,44 +73,6 @@ class BuildTest(unittest.TestCase):
from html5_parser import parse from html5_parser import parse
parse('<p>xxx') parse('<p>xxx')
def test_import_of_all_python_modules(self):
import importlib
exclude_modules = {'calibre.gui2.dbus_export.demo', 'calibre.gui2.dbus_export.gtk'}
exclude_packages = {'calibre.devices.mtp.unix.upstream'}
if not iswindows:
exclude_modules |= {'calibre.utils.iphlpapi', 'calibre.utils.open_with.windows', 'calibre.devices.winusb'}
exclude_packages |= {'calibre.utils.winreg'}
if not isosx:
exclude_modules.add('calibre.utils.open_with.osx')
if not islinux:
exclude_modules |= {
'calibre.utils.dbus_service', 'calibre.linux',
'calibre.utils.linux_trash', 'calibre.utils.open_with.linux',
'calibre.gui2.linux_file_dialogs'
}
exclude_packages.add('calibre.gui2.dbus_export')
base = os.path.dirname(__file__)
import_base = os.path.dirname(base)
count = 0
for root, dirs, files in os.walk(base):
for d in dirs:
if not os.path.isfile(os.path.join(root, d, '__init__.py')):
dirs.remove(d)
for fname in files:
module_name, ext = os.path.splitext(fname)
if ext != '.py':
continue
path = os.path.join(root, module_name)
relpath = os.path.relpath(path, import_base).replace(os.sep, '/')
full_module_name = '.'.join(relpath.split('/'))
if full_module_name.endswith('.__init__'):
full_module_name = full_module_name.rpartition('.')[0]
if full_module_name in exclude_modules or ('.' in full_module_name and full_module_name.rpartition('.')[0] in exclude_packages):
continue
importlib.import_module(full_module_name)
count += 1
self.assertGreater(count, 1000)
def test_plugins(self): def test_plugins(self):
exclusions = set() exclusions = set()
if is_ci: if is_ci: