Skip to content

Commit fdefb5b

Browse files
committedJul 25, 2012
run python tests from build directory
1 parent 269d32c commit fdefb5b

File tree

5 files changed

+74
-63
lines changed

5 files changed

+74
-63
lines changed
 

‎cmake/SIPMacros.cmake

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ MACRO(ADD_SIP_PYTHON_MODULE MODULE_NAME MODULE_SIP)
4646
SET(EXTRA_LINK_LIBRARIES ${ARGN})
4747

4848
STRING(REPLACE "." "/" _x ${MODULE_NAME})
49-
GET_FILENAME_COMPONENT(_parent_module_path ${_x} PATH)
49+
GET_FILENAME_COMPONENT(_parent_module_path ${_x} PATH)
5050
GET_FILENAME_COMPONENT(_child_module_name ${_x} NAME)
5151

5252
GET_FILENAME_COMPONENT(_module_path ${MODULE_SIP} PATH)
@@ -127,6 +127,16 @@ MACRO(ADD_SIP_PYTHON_MODULE MODULE_NAME MODULE_SIP)
127127
SET_TARGET_PROPERTIES(${_logical_name} PROPERTIES SUFFIX ".pyd")
128128
ENDIF (WIN32)
129129

130+
IF(WIN32)
131+
GET_TARGET_PROPERTY(_target_location ${_logical_name} LOCATION)
132+
GET_TARGET_PROPERTY(_runtime_output ${_logical_name} RUNTIME_OUTPUT_DIRECTORY)
133+
ADD_CUSTOM_COMMAND(TARGET ${_logical_name} POST_BUILD
134+
COMMAND ${CMAKE_COMMAND} -E echo "Copying extension ${_child_module_name}"
135+
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${_target_location}" "${_runtime_output}/${_child_module_name}.pyd"
136+
DEPENDS ${_logical_name}
137+
)
138+
ENDIF(WIN32)
139+
130140
INSTALL(TARGETS ${_logical_name} DESTINATION "${PYTHON_SITE_PACKAGES_DIR}/${_parent_module_path}")
131141

132142
ENDMACRO(ADD_SIP_PYTHON_MODULE)

‎cmake/UsePythonTest.cmake

Lines changed: 35 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
# Add a python test from a python file
2-
# One cannot simply do:
1+
# Add a python test from a python file # One cannot simply do:
32
# SET(ENV{PYTHONPATH} ${LIBRARY_OUTPUT_PATH})
43
# SET(my_test "from test_mymodule import *\;test_mymodule()")
54
# ADD_TEST(PYTHON-TEST-MYMODULE python -c ${my_test})
@@ -26,44 +25,42 @@ MARK_AS_ADVANCED(PYTHON_EXECUTABLE)
2625
MACRO(ADD_PYTHON_TEST TESTNAME FILENAME)
2726
GET_SOURCE_FILE_PROPERTY(loc ${FILENAME} LOCATION)
2827
GET_SOURCE_FILE_PROPERTY(pyenv ${FILENAME} PYTHONPATH)
29-
IF(CMAKE_CONFIGURATION_TYPES)
30-
# I cannot use CMAKE_CFG_INTDIR since it expand to "$(OutDir)"
31-
IF(pyenv)
32-
SET(pyenv "${pyenv};${LIBRARY_OUTPUT_PATH}/${CMAKE_BUILD_TYPE}")
33-
ELSE(pyenv)
34-
SET(pyenv ${LIBRARY_OUTPUT_PATH}/${CMAKE_BUILD_TYPE})
35-
#SET(pyenv ${LIBRARY_OUTPUT_PATH}/${CMAKE_CFG_INTDIR})
36-
#SET(pyenv ${LIBRARY_OUTPUT_PATH}/${CMAKE_CONFIG_TYPE})
37-
#SET(pyenv ${LIBRARY_OUTPUT_PATH}/\${CMAKE_CONFIG_TYPE})
38-
ENDIF(pyenv)
39-
ELSE(CMAKE_CONFIGURATION_TYPES)
40-
IF(pyenv)
41-
SET(pyenv ${pyenv}:${LIBRARY_OUTPUT_PATH})
42-
ELSE(pyenv)
43-
SET(pyenv ${LIBRARY_OUTPUT_PATH})
44-
ENDIF(pyenv)
45-
ENDIF(CMAKE_CONFIGURATION_TYPES)
46-
STRING(REGEX REPLACE ";" " " wo_semicolumn "${ARGN}")
28+
29+
IF(WIN32)
30+
STRING(REGEX REPLACE ":" " " wo_semicolon "${ARGN}")
31+
ELSE(WIN32)
32+
STRING(REGEX REPLACE ";" " " wo_semicolon "${ARGN}")
33+
ENDIF(WIN32)
34+
4735
FILE(WRITE ${CMAKE_CURRENT_BINARY_DIR}/${TESTNAME}.cmake
4836
"
49-
SET(ENV{PYTHONPATH} ${pyenv}:\$ENV{PYTHONPATH})
50-
SET(ENV{LD_LIBRARY_PATH} ${pyenv}:\$ENV{LD_LIBRARY_PATH})
51-
MESSAGE(\"${pyenv}\")
52-
EXECUTE_PROCESS(
53-
COMMAND ${PYTHON_EXECUTABLE} ${loc} ${wo_semicolumn}
54-
#WORKING_DIRECTORY @LIBRARY_OUTPUT_PATH@
55-
RESULT_VARIABLE import_res
56-
OUTPUT_VARIABLE import_output
57-
ERROR_VARIABLE import_output
58-
)
59-
60-
# Pass the output back to ctest
61-
IF(import_output)
62-
MESSAGE("\${import_output}")
63-
ENDIF(import_output)
64-
IF(import_res)
65-
MESSAGE(SEND_ERROR "\${import_res}")
66-
ENDIF(import_res)
37+
IF(WIN32)
38+
SET(ENV{QGIS_PREFIX_PATH} \"${QGIS_OUTPUT_DIRECTORY}/bin/${CMAKE_BUILD_TYPE}\")
39+
SET(ENV{PATH} \"${QGIS_OUTPUT_DIRECTORY}/bin/${CMAKE_BUILD_TYPE};\$ENV{PATH}\")
40+
SET(ENV{PYTHONPATH} \"${QGIS_OUTPUT_DIRECTORY}/python/;\$ENV{PYTHONPATH}\")
41+
MESSAGE(\"PATH:\$ENV{PATH}\")
42+
ELSE(WIN32)
43+
SET(ENV{QGIS_PREFIX_PATH} \"${QGIS_OUTPUT_DIRECTORY}\")
44+
SET(ENV{LD_LIBRARY_PATH} \"${pyenv}:${QGIS_OUTPUT_DIRECTORY}/lib:\$ENV{LD_LIBRARY_PATH}\")
45+
SET(ENV{PYTHONPATH} \"${QGIS_OUTPUT_DIRECTORY}/python/:\$ENV{PYTHONPATH}\")
46+
MESSAGE(\"LD_LIBRARY_PATH:\$ENV{LD_LIBRARY_PATH}\")
47+
ENDIF(WIN32)
48+
MESSAGE(\"PYTHONPATH:\$ENV{PYTHONPATH}\")
49+
MESSAGE(STATUS \"Running ${PYTHON_EXECUTABLE} ${loc} ${wo_semicolon}\")
50+
EXECUTE_PROCESS(
51+
COMMAND ${PYTHON_EXECUTABLE} ${loc} ${wo_semicolumn}
52+
#WORKING_DIRECTORY @LIBRARY_OUTPUT_PATH@
53+
RESULT_VARIABLE import_res
54+
OUTPUT_VARIABLE import_output
55+
ERROR_VARIABLE import_output
56+
)
57+
# Pass the output back to ctest
58+
IF(import_output)
59+
MESSAGE("\${import_output}")
60+
ENDIF(import_output)
61+
IF(import_res)
62+
MESSAGE(SEND_ERROR "\${import_res}")
63+
ENDIF(import_res)
6764
"
6865
)
6966
ADD_TEST(${TESTNAME} ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/${TESTNAME}.cmake)

‎src/core/qgsapplication.cpp

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -85,28 +85,30 @@ void QgsApplication::init( QString customConfigPath )
8585
}
8686
qRegisterMetaType<QgsGeometry::Error>( "QgsGeometry::Error" );
8787

88+
QString prefixPath( getenv( "QGIS_PREFIX_PATH" ) ? getenv( "QGIS_PREFIX_PATH" ) : applicationDirPath() );
89+
8890
// check if QGIS is run from build directory (not the install directory)
89-
QDir appDir( applicationDirPath() );
91+
QDir appDir( prefixPath );
9092
#ifndef _MSC_VER
9193
#define SOURCE_PATH "source_path.txt"
9294
#else
9395
#define SOURCE_PATH "../source_path.txt"
9496
#endif
9597
if ( appDir.exists( SOURCE_PATH ) )
9698
{
97-
QFile f( applicationDirPath() + "/" + SOURCE_PATH );
99+
QFile f( prefixPath + "/" + SOURCE_PATH );
98100
if ( f.open( QIODevice::ReadOnly ) )
99101
{
100102
ABISYM( mRunningFromBuildDir ) = true;
101103
ABISYM( mBuildSourcePath ) = f.readAll();
102104
#if _MSC_VER
103-
QStringList elems = applicationDirPath().split( "/", QString::SkipEmptyParts );
105+
QStringList elems = prefixPath.split( "/", QString::SkipEmptyParts );
104106
ABISYM( mCfgIntDir ) = elems.last();
105-
ABISYM( mBuildOutputPath ) = applicationDirPath() + "/../..";
107+
ABISYM( mBuildOutputPath ) = prefixPath + "/../..";
106108
#elif defined(Q_WS_MACX)
107-
ABISYM( mBuildOutputPath ) = applicationDirPath();
109+
ABISYM( mBuildOutputPath ) = prefixPath;
108110
#else
109-
ABISYM( mBuildOutputPath ) = applicationDirPath() + "/.."; // on linux
111+
ABISYM( mBuildOutputPath ) = prefixPath + "/.."; // on linux
110112
#endif
111113
qDebug( "Running from build directory!" );
112114
qDebug( "- source directory: %s", ABISYM( mBuildSourcePath ).toAscii().data() );

‎src/gui/qgsmapcanvas.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ QgsMapCanvas::~QgsMapCanvas()
158158
it++;
159159
}
160160

161-
delete mScene;
161+
mScene->deleteLater(); // crashes in python tests on windows
162162

163163
delete mMapRenderer;
164164
// mCanvasProperties auto-deleted via std::auto_ptr

‎tests/src/python/test_qgisapp.py

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,27 @@
11
import unittest
2-
from utilities import (getQgisTestApp,
3-
setCanvasCrs,
4-
GEOCRS,
5-
GOOGLECRS
6-
)
7-
QGISAPP, CANVAS, IFACE, PARENT = getQgisTestApp()
82

9-
class TestQGisApp(unittest.TestCase):
3+
from utilities import getQgisTestApp
104

11-
def testValidThemeName(self):
12-
"""That can set the app to use a valid theme"""
13-
QGISAPP.setThemeName('gis')
14-
myExpectedResult = 'gis'
15-
myResult = QGISAPP.themeName()
16-
myMessage = ('Expected:\n%s\nGot:\n%s\n' %
17-
(myExpectedResult, myResult))
5+
QGISAPP, CANVAS, IFACE, PARENT = getQgisTestApp()
186

19-
mySettings = QGISAPP.showSettings()
20-
print mySettings
7+
class TestQGisApp(unittest.TestCase):
218

22-
assert myExpectedResult == myResult, myMessage
9+
# Can this work at all?
10+
# The theme resources are built into the executable and should only be
11+
# available to plugins and not in test applications.
12+
#
13+
# def testValidThemeName(self):
14+
# """That can set the app to use a valid theme"""
15+
# QGISAPP.setThemeName('gis')
16+
# myExpectedResult = 'gis'
17+
# myResult = QGISAPP.themeName()
18+
# myMessage = ('Expected:\n%s\nGot:\n%s\n' %
19+
# (myExpectedResult, myResult))
20+
#
21+
# mySettings = QGISAPP.showSettings()
22+
# print mySettings
23+
#
24+
# assert myExpectedResult == myResult, myMessage
2325

2426
def testInvalidThemeName(self):
2527
"""That setting the app to use an invalid theme will fallback to 'default'"""

0 commit comments

Comments
 (0)
Please sign in to comment.