CMake: if pylint is available, run it as part of the test-suite
This introduces a stub-implementation (fake) that mimics the API offered by libcalamares (the library is actually exposed to Python via Boost::Python, so it doesn't act like a C-extension). Using that stub-implementation, we can check Python modules for validity as part of the test-suite. The stub-implementation is needed, because otherwise every Python module already fails at `import libcalamares`. - stub-implement the API that is actually used by the Python modules - in globalstorage, be slightly smart about what keys are being requested (so that e.g. all the modules that handle partitions information get an empty list and can manipulate that, instead of erroring out when they get a string)
This commit is contained in:
parent
836ea55dbd
commit
719548213f
@ -42,6 +42,18 @@ include( CalamaresCheckModuleSelection )
|
||||
|
||||
set( MODULE_DATA_DESTINATION share/calamares/modules )
|
||||
|
||||
# We look for Pylint (just once) so that unittests can be added that
|
||||
# check the syntax / variables of Python modules. This should help
|
||||
# avoid more typo's-in-releases.
|
||||
if(BUILD_TESTING AND NOT PYLINT_COMMAND_SEARCHED)
|
||||
set(PYLINT_COMMAND_SEARCHED TRUE)
|
||||
find_program(
|
||||
PYLINT_COMMAND
|
||||
NAMES pylint3 pylint
|
||||
PATHS $ENV{HOME}/.local/bin
|
||||
)
|
||||
endif()
|
||||
|
||||
function( _calamares_add_module_subdirectory_impl )
|
||||
set( SUBDIRECTORY ${ARGV0} )
|
||||
|
||||
@ -241,6 +253,19 @@ function( _calamares_add_module_subdirectory_impl )
|
||||
if ( EXISTS ${_testdir}/CMakeTests.txt AND NOT EXISTS ${_mod_dir}/CMakeLists.txt )
|
||||
include( ${_testdir}/CMakeTests.txt )
|
||||
endif()
|
||||
if ( PYLINT_COMMAND AND MODULE_INTERFACE MATCHES "python" )
|
||||
# Python modules get an additional test via pylint; this
|
||||
# needs to run at top-level because the ci/libcalamares directory
|
||||
# contains API stubs.
|
||||
#
|
||||
# TODO: the entry point is assumed to be `main.py`, but that is
|
||||
# configurable through module.desc
|
||||
add_test(
|
||||
NAME lint-${SUBDIRECTORY}
|
||||
COMMAND env PYTHONPATH=ci: ${PYLINT_COMMAND} -E ${_mod_dir}/main.py
|
||||
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
|
@ -6,4 +6,4 @@
|
||||
# Boost::Python, not as a bare C-extension) so that
|
||||
# pylint doesn't complain about libcalamares internals.
|
||||
|
||||
pass
|
||||
VERSION_SHORT="1.0"
|
||||
|
@ -6,4 +6,19 @@
|
||||
# Boost::Python, not as a bare C-extension) so that
|
||||
# pylint doesn't complain about libcalamares internals.
|
||||
|
||||
def value(_): return 1
|
||||
def count(): return 1
|
||||
|
||||
def keys(): return []
|
||||
|
||||
def contains(_): return True
|
||||
|
||||
def value(key):
|
||||
if key in ("branding",):
|
||||
return dict()
|
||||
if key in ("partitions",):
|
||||
return list()
|
||||
return ""
|
||||
|
||||
def insert(key, value): pass
|
||||
|
||||
def remove(_): pass
|
||||
|
@ -10,6 +10,14 @@ def debug(_): pass
|
||||
|
||||
def warning(_): pass
|
||||
|
||||
def error(_): pass
|
||||
|
||||
def gettext_path(): pass
|
||||
|
||||
def gettext_languages(): pass
|
||||
|
||||
def target_env_call(_): return 0
|
||||
|
||||
def check_target_env_call(_): pass
|
||||
|
||||
def mount(device, mountpoint, fstype, options): return 0
|
||||
|
Loading…
Reference in New Issue
Block a user