1
0
mirror of https://github.com/qgis/QGIS.git synced 2025-04-27 00:03:38 -04:00

run python tests from build directory

This commit is contained in:
Juergen E. Fischer 2012-07-25 22:32:29 +02:00
parent 269d32c82d
commit fdefb5bffb
5 changed files with 74 additions and 63 deletions

@ -127,6 +127,16 @@ MACRO(ADD_SIP_PYTHON_MODULE MODULE_NAME MODULE_SIP)
SET_TARGET_PROPERTIES(${_logical_name} PROPERTIES SUFFIX ".pyd") SET_TARGET_PROPERTIES(${_logical_name} PROPERTIES SUFFIX ".pyd")
ENDIF (WIN32) ENDIF (WIN32)
IF(WIN32)
GET_TARGET_PROPERTY(_target_location ${_logical_name} LOCATION)
GET_TARGET_PROPERTY(_runtime_output ${_logical_name} RUNTIME_OUTPUT_DIRECTORY)
ADD_CUSTOM_COMMAND(TARGET ${_logical_name} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E echo "Copying extension ${_child_module_name}"
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${_target_location}" "${_runtime_output}/${_child_module_name}.pyd"
DEPENDS ${_logical_name}
)
ENDIF(WIN32)
INSTALL(TARGETS ${_logical_name} DESTINATION "${PYTHON_SITE_PACKAGES_DIR}/${_parent_module_path}") INSTALL(TARGETS ${_logical_name} DESTINATION "${PYTHON_SITE_PACKAGES_DIR}/${_parent_module_path}")
ENDMACRO(ADD_SIP_PYTHON_MODULE) ENDMACRO(ADD_SIP_PYTHON_MODULE)

@ -1,5 +1,4 @@
# Add a python test from a python file # Add a python test from a python file # One cannot simply do:
# One cannot simply do:
# SET(ENV{PYTHONPATH} ${LIBRARY_OUTPUT_PATH}) # SET(ENV{PYTHONPATH} ${LIBRARY_OUTPUT_PATH})
# SET(my_test "from test_mymodule import *\;test_mymodule()") # SET(my_test "from test_mymodule import *\;test_mymodule()")
# ADD_TEST(PYTHON-TEST-MYMODULE python -c ${my_test}) # ADD_TEST(PYTHON-TEST-MYMODULE python -c ${my_test})
@ -26,29 +25,28 @@ MARK_AS_ADVANCED(PYTHON_EXECUTABLE)
MACRO(ADD_PYTHON_TEST TESTNAME FILENAME) MACRO(ADD_PYTHON_TEST TESTNAME FILENAME)
GET_SOURCE_FILE_PROPERTY(loc ${FILENAME} LOCATION) GET_SOURCE_FILE_PROPERTY(loc ${FILENAME} LOCATION)
GET_SOURCE_FILE_PROPERTY(pyenv ${FILENAME} PYTHONPATH) GET_SOURCE_FILE_PROPERTY(pyenv ${FILENAME} PYTHONPATH)
IF(CMAKE_CONFIGURATION_TYPES)
# I cannot use CMAKE_CFG_INTDIR since it expand to "$(OutDir)" IF(WIN32)
IF(pyenv) STRING(REGEX REPLACE ":" " " wo_semicolon "${ARGN}")
SET(pyenv "${pyenv};${LIBRARY_OUTPUT_PATH}/${CMAKE_BUILD_TYPE}") ELSE(WIN32)
ELSE(pyenv) STRING(REGEX REPLACE ";" " " wo_semicolon "${ARGN}")
SET(pyenv ${LIBRARY_OUTPUT_PATH}/${CMAKE_BUILD_TYPE}) ENDIF(WIN32)
#SET(pyenv ${LIBRARY_OUTPUT_PATH}/${CMAKE_CFG_INTDIR})
#SET(pyenv ${LIBRARY_OUTPUT_PATH}/${CMAKE_CONFIG_TYPE})
#SET(pyenv ${LIBRARY_OUTPUT_PATH}/\${CMAKE_CONFIG_TYPE})
ENDIF(pyenv)
ELSE(CMAKE_CONFIGURATION_TYPES)
IF(pyenv)
SET(pyenv ${pyenv}:${LIBRARY_OUTPUT_PATH})
ELSE(pyenv)
SET(pyenv ${LIBRARY_OUTPUT_PATH})
ENDIF(pyenv)
ENDIF(CMAKE_CONFIGURATION_TYPES)
STRING(REGEX REPLACE ";" " " wo_semicolumn "${ARGN}")
FILE(WRITE ${CMAKE_CURRENT_BINARY_DIR}/${TESTNAME}.cmake FILE(WRITE ${CMAKE_CURRENT_BINARY_DIR}/${TESTNAME}.cmake
" "
SET(ENV{PYTHONPATH} ${pyenv}:\$ENV{PYTHONPATH}) IF(WIN32)
SET(ENV{LD_LIBRARY_PATH} ${pyenv}:\$ENV{LD_LIBRARY_PATH}) SET(ENV{QGIS_PREFIX_PATH} \"${QGIS_OUTPUT_DIRECTORY}/bin/${CMAKE_BUILD_TYPE}\")
MESSAGE(\"${pyenv}\") SET(ENV{PATH} \"${QGIS_OUTPUT_DIRECTORY}/bin/${CMAKE_BUILD_TYPE};\$ENV{PATH}\")
SET(ENV{PYTHONPATH} \"${QGIS_OUTPUT_DIRECTORY}/python/;\$ENV{PYTHONPATH}\")
MESSAGE(\"PATH:\$ENV{PATH}\")
ELSE(WIN32)
SET(ENV{QGIS_PREFIX_PATH} \"${QGIS_OUTPUT_DIRECTORY}\")
SET(ENV{LD_LIBRARY_PATH} \"${pyenv}:${QGIS_OUTPUT_DIRECTORY}/lib:\$ENV{LD_LIBRARY_PATH}\")
SET(ENV{PYTHONPATH} \"${QGIS_OUTPUT_DIRECTORY}/python/:\$ENV{PYTHONPATH}\")
MESSAGE(\"LD_LIBRARY_PATH:\$ENV{LD_LIBRARY_PATH}\")
ENDIF(WIN32)
MESSAGE(\"PYTHONPATH:\$ENV{PYTHONPATH}\")
MESSAGE(STATUS \"Running ${PYTHON_EXECUTABLE} ${loc} ${wo_semicolon}\")
EXECUTE_PROCESS( EXECUTE_PROCESS(
COMMAND ${PYTHON_EXECUTABLE} ${loc} ${wo_semicolumn} COMMAND ${PYTHON_EXECUTABLE} ${loc} ${wo_semicolumn}
#WORKING_DIRECTORY @LIBRARY_OUTPUT_PATH@ #WORKING_DIRECTORY @LIBRARY_OUTPUT_PATH@
@ -56,7 +54,6 @@ MACRO(ADD_PYTHON_TEST TESTNAME FILENAME)
OUTPUT_VARIABLE import_output OUTPUT_VARIABLE import_output
ERROR_VARIABLE import_output ERROR_VARIABLE import_output
) )
# Pass the output back to ctest # Pass the output back to ctest
IF(import_output) IF(import_output)
MESSAGE("\${import_output}") MESSAGE("\${import_output}")

@ -85,8 +85,10 @@ void QgsApplication::init( QString customConfigPath )
} }
qRegisterMetaType<QgsGeometry::Error>( "QgsGeometry::Error" ); qRegisterMetaType<QgsGeometry::Error>( "QgsGeometry::Error" );
QString prefixPath( getenv( "QGIS_PREFIX_PATH" ) ? getenv( "QGIS_PREFIX_PATH" ) : applicationDirPath() );
// check if QGIS is run from build directory (not the install directory) // check if QGIS is run from build directory (not the install directory)
QDir appDir( applicationDirPath() ); QDir appDir( prefixPath );
#ifndef _MSC_VER #ifndef _MSC_VER
#define SOURCE_PATH "source_path.txt" #define SOURCE_PATH "source_path.txt"
#else #else
@ -94,19 +96,19 @@ void QgsApplication::init( QString customConfigPath )
#endif #endif
if ( appDir.exists( SOURCE_PATH ) ) if ( appDir.exists( SOURCE_PATH ) )
{ {
QFile f( applicationDirPath() + "/" + SOURCE_PATH ); QFile f( prefixPath + "/" + SOURCE_PATH );
if ( f.open( QIODevice::ReadOnly ) ) if ( f.open( QIODevice::ReadOnly ) )
{ {
ABISYM( mRunningFromBuildDir ) = true; ABISYM( mRunningFromBuildDir ) = true;
ABISYM( mBuildSourcePath ) = f.readAll(); ABISYM( mBuildSourcePath ) = f.readAll();
#if _MSC_VER #if _MSC_VER
QStringList elems = applicationDirPath().split( "/", QString::SkipEmptyParts ); QStringList elems = prefixPath.split( "/", QString::SkipEmptyParts );
ABISYM( mCfgIntDir ) = elems.last(); ABISYM( mCfgIntDir ) = elems.last();
ABISYM( mBuildOutputPath ) = applicationDirPath() + "/../.."; ABISYM( mBuildOutputPath ) = prefixPath + "/../..";
#elif defined(Q_WS_MACX) #elif defined(Q_WS_MACX)
ABISYM( mBuildOutputPath ) = applicationDirPath(); ABISYM( mBuildOutputPath ) = prefixPath;
#else #else
ABISYM( mBuildOutputPath ) = applicationDirPath() + "/.."; // on linux ABISYM( mBuildOutputPath ) = prefixPath + "/.."; // on linux
#endif #endif
qDebug( "Running from build directory!" ); qDebug( "Running from build directory!" );
qDebug( "- source directory: %s", ABISYM( mBuildSourcePath ).toAscii().data() ); qDebug( "- source directory: %s", ABISYM( mBuildSourcePath ).toAscii().data() );

@ -158,7 +158,7 @@ QgsMapCanvas::~QgsMapCanvas()
it++; it++;
} }
delete mScene; mScene->deleteLater(); // crashes in python tests on windows
delete mMapRenderer; delete mMapRenderer;
// mCanvasProperties auto-deleted via std::auto_ptr // mCanvasProperties auto-deleted via std::auto_ptr

@ -1,25 +1,27 @@
import unittest import unittest
from utilities import (getQgisTestApp,
setCanvasCrs, from utilities import getQgisTestApp
GEOCRS,
GOOGLECRS
)
QGISAPP, CANVAS, IFACE, PARENT = getQgisTestApp() QGISAPP, CANVAS, IFACE, PARENT = getQgisTestApp()
class TestQGisApp(unittest.TestCase): class TestQGisApp(unittest.TestCase):
def testValidThemeName(self): # Can this work at all?
"""That can set the app to use a valid theme""" # The theme resources are built into the executable and should only be
QGISAPP.setThemeName('gis') # available to plugins and not in test applications.
myExpectedResult = 'gis' #
myResult = QGISAPP.themeName() # def testValidThemeName(self):
myMessage = ('Expected:\n%s\nGot:\n%s\n' % # """That can set the app to use a valid theme"""
(myExpectedResult, myResult)) # QGISAPP.setThemeName('gis')
# myExpectedResult = 'gis'
mySettings = QGISAPP.showSettings() # myResult = QGISAPP.themeName()
print mySettings # myMessage = ('Expected:\n%s\nGot:\n%s\n' %
# (myExpectedResult, myResult))
assert myExpectedResult == myResult, myMessage #
# mySettings = QGISAPP.showSettings()
# print mySettings
#
# assert myExpectedResult == myResult, myMessage
def testInvalidThemeName(self): def testInvalidThemeName(self):
"""That setting the app to use an invalid theme will fallback to 'default'""" """That setting the app to use an invalid theme will fallback to 'default'"""