diff --git a/modules/ts/misc/run_suite.py b/modules/ts/misc/run_suite.py index 280c21caa6..bd80874475 100644 --- a/modules/ts/misc/run_suite.py +++ b/modules/ts/misc/run_suite.py @@ -85,8 +85,8 @@ class TestSuite(object): return set(res) def isTest(self, fullpath): - if fullpath == "java": - return True + if fullpath in ['java', 'python2', 'python3']: + return self.options.mode == 'test' if not os.path.isfile(fullpath): return False if self.cache.getOS() == "nt" and not fullpath.endswith(".exe"): @@ -102,6 +102,14 @@ class TestSuite(object): return res + cmd return cmd + def tryCommand(self, cmd): + try: + if 0 == execute(cmd, cwd = workingDir): + return True + except: + pass + return False + def runTest(self, path, logfile, workingDir, args = []): args = args[:] exe = os.path.abspath(path) @@ -109,6 +117,22 @@ class TestSuite(object): cmd = [self.cache.ant_executable, "-Dopencv.build.type=%s" % self.cache.build_type, "buildAndTest"] ret = execute(cmd, cwd = self.cache.java_test_binary_dir + "/.build") return None, ret + elif path in ['python2', 'python3']: + executable = os.getenv('OPENCV_PYTHON_BINARY', None) + if executable is None: + executable = path + if not self.tryCommand([executable, '--version']): + executable = 'python' + cmd = [executable, self.cache.opencv_home + '/modules/python/test/test.py', '--repo', self.cache.opencv_home, '-v'] + args + module_suffix = '' if not 'Visual Studio' in self.cache.cmake_generator else '/' + self.cache.build_type + env = {} + env['PYTHONPATH'] = self.cache.opencv_build + '/lib' + module_suffix + os.pathsep + os.getenv('PYTHONPATH', '') + if self.cache.getOS() == 'nt': + env['PATH'] = self.cache.opencv_build + '/bin' + module_suffix + os.pathsep + os.getenv('PATH', '') + else: + env['LD_LIBRARY_PATH'] = self.cache.opencv_build + '/bin' + os.pathsep + os.getenv('LD_LIBRARY_PATH', '') + ret = execute(cmd, cwd = workingDir, env = env) + return None, ret else: if isColorEnabled(args): args.append("--gtest_color=yes") @@ -140,12 +164,15 @@ class TestSuite(object): more_args = [] exe = self.getTest(test) - userlog = [a for a in args if a.startswith("--gtest_output=")] - if len(userlog) == 0: - logname = self.getLogName(exe, date) - more_args.append("--gtest_output=xml:" + logname) + if exe in ["java", "python2", "python3"]: + logname = None else: - logname = userlog[0][userlog[0].find(":")+1:] + userlog = [a for a in args if a.startswith("--gtest_output=")] + if len(userlog) == 0: + logname = self.getLogName(exe, date) + more_args.append("--gtest_output=xml:" + logname) + else: + logname = userlog[0][userlog[0].find(":")+1:] log.debug("Running the test: %s (%s) ==> %s in %s", exe, args + more_args, logname, workingDir) if self.options.dry_run: diff --git a/modules/ts/misc/run_utils.py b/modules/ts/misc/run_utils.py index 5841631a7c..8740aa7855 100644 --- a/modules/ts/misc/run_utils.py +++ b/modules/ts/misc/run_utils.py @@ -22,13 +22,17 @@ class Err(Exception): def __init__(self, msg, *args): self.msg = msg % args -def execute(cmd, silent = False, cwd = "."): +def execute(cmd, silent = False, cwd = ".", env = None): try: log.debug("Run: %s", cmd) + if env: + for k in env: + log.debug(" Environ: %s=%s", k, env[k]) + env = os.environ.update(env) if silent: - return check_output(cmd, stderr = STDOUT, cwd = cwd).decode("latin-1") + return check_output(cmd, stderr = STDOUT, cwd = cwd, env = env).decode("latin-1") else: - return check_call(cmd, cwd = cwd) + return check_call(cmd, cwd = cwd, env = env) except CalledProcessError as e: if silent: log.debug("Process returned: %d", e.returncode) @@ -171,6 +175,8 @@ parse_patterns = ( {'name': "cuda_library", 'default': None, 'pattern': re.compile(r"^CUDA_CUDA_LIBRARY:FILEPATH=(.+)$")}, {'name': "cuda_version", 'default': None, 'pattern': re.compile(r"^CUDA_VERSION:STRING=(.+)$")}, {'name': "core_dependencies", 'default': None, 'pattern': re.compile(r"^opencv_core_LIB_DEPENDS:STATIC=(.+)$")}, + {'name': "python2", 'default': None, 'pattern': re.compile(r"^BUILD_opencv_python2:BOOL=(.*)$")}, + {'name': "python3", 'default': None, 'pattern': re.compile(r"^BUILD_opencv_python3:BOOL=(.*)$")}, ) class CMakeCache: @@ -247,11 +253,15 @@ class CMakeCache: files = glob.glob(os.path.join(d, mask)) if not self.getOS() == "android" and self.withJava(): files.append("java") + if self.withPython2(): + files.append("python2") + if self.withPython3(): + files.append("python3") return [f for f in files if isGood(f)] return [] def isMainModule(self, name): - return name in self.main_modules + return name in self.main_modules + ['python2', 'python3'] def withCuda(self): return self.cuda_version and self.with_cuda == "ON" and self.cuda_library and not self.cuda_library.endswith("-NOTFOUND") @@ -259,6 +269,12 @@ class CMakeCache: def withJava(self): return self.ant_executable and self.java_test_binary_dir + def withPython2(self): + return self.python2 == 'ON' + + def withPython3(self): + return self.python3 == 'ON' + def getGitVersion(self): if self.cmake_home_vcver: if self.cmake_home_vcver == self.opencv_home_vcver: