def CleanMain(options, unused_args): """The main function for the 'clean' command.""" # File and directory names to be removed. file_names = [] directory_names = [] # Collect stuff in the gyp directories. gyp_directory_names = [os.path.dirname(f) for f in GetGypFileNames(options)] for gyp_directory_name in gyp_directory_names: if IsWindows(): for pattern in ['*.ncb', '*.rules', '*.props', '*.sdf', '*.sln', '*.suo', '*.targets', '*.vcproj', '*.vcproj.*.user', '*.vcxproj', '*.vcxproj.filters', '*.vcxproj.user', 'gen_*_files.xml']: file_names.extend(glob.glob(os.path.join(gyp_directory_name, pattern))) for build_type in ['Debug', 'Release']: directory_names.append(os.path.join(gyp_directory_name, build_type)) elif IsMac(): directory_names.extend(glob.glob(os.path.join(gyp_directory_name, '*.xcodeproj'))) # mozc_version.txt does not always exist. version_file = '%s/mozc_version.txt' % SRC_DIR if os.path.exists(version_file): file_names.append(version_file) build_base = GetBuildBaseName(GetMozcVersion().GetTargetPlatform()) if build_base: directory_names.append(build_base) if IsLinux(): # Remove auto-generated files. file_names.append(os.path.join(SRC_DIR, 'android', 'AndroidManifest.xml')) file_names.append(os.path.join( SRC_DIR, 'android', 'tests', 'AndroidManifest.xml')) # Remove a symbolic link to android/resources/res file_names.append(os.path.join(SRC_DIR, 'android', 'resources', 'res')) directory_names.append(os.path.join(SRC_DIR, 'android', 'assets')) # Delete files/dirs generated by Android SDK/NDK. android_library_projects = [ '', 'resources', 'tests', ] android_generated_dirs = ['bin', 'gen', 'obj', 'libs', 'gen_for_adt'] for project in android_library_projects: for directory in android_generated_dirs: directory_names.append( os.path.join(SRC_DIR, 'android', project, directory)) # Remove files. for file_name in file_names: RemoveFile(file_name) # Remove directories. for directory_name in directory_names: RemoveDirectoryRecursively(directory_name)
def CleanMain(options, unused_args): """The main function for the 'clean' command.""" # File and directory names to be removed. file_names = [] directory_names = [] # Collect stuff in the gyp directories. gyp_directory_names = [ os.path.dirname(f) for f in GetGypFileNames(options) ] for gyp_directory_name in gyp_directory_names: if IsWindows(): for pattern in [ '*.ncb', '*.rules', '*.props', '*.sdf', '*.sln', '*.suo', '*.targets', '*.vcproj', '*.vcproj.*.user', '*.vcxproj', '*.vcxproj.filters', '*.vcxproj.user', 'gen_*_files.xml' ]: file_names.extend( glob.glob(os.path.join(gyp_directory_name, pattern))) for build_type in ['Debug', 'Release']: directory_names.append( os.path.join(gyp_directory_name, build_type)) elif IsMac(): directory_names.extend( glob.glob(os.path.join(gyp_directory_name, '*.xcodeproj'))) # mozc_version.txt does not always exist. version_file = '%s/mozc_version.txt' % SRC_DIR if os.path.exists(version_file): file_names.append(version_file) build_base = GetBuildBaseName(GetMozcVersion().GetTargetPlatform()) if build_base: directory_names.append(build_base) # Remove files. for file_name in file_names: RemoveFile(file_name) # Remove directories. for directory_name in directory_names: RemoveDirectoryRecursively(directory_name)
def RunTests(target_platform, configuration, parallel_num): """Run built tests actually. Args: target_platform: The build target ('Linux', 'Windows', etc.) configuration: build configuration ('Release' or 'Debug') parallel_num: allows specified jobs at once. Raises: RunOrDieError: One or more tests have failed. """ # TODO(nona): move this function to build_tools/test_tools base_path = os.path.join(GetBuildBaseName(target_platform), configuration) options = [] # Specify the log_dir directory. # base_path looks like out_mac/Debug. options.append('--log_dir=%s' % base_path) failed_tests = [] # This is a silly algorithm: it runs *all* tests built in the target # directory. Therefore, if you build multiple tests without # cleaning, the second runtests runs every test. # TODO(mukai): parses gyp files and get the target binaries, if possible. executable_suffix = '' test_function = RunTest if target_platform == 'Windows': executable_suffix = '.exe' elif target_platform == 'iOS': executable_suffix = '.app' test_function = RunTestOnIos parallel_num = 1 test_binaries = glob.glob( os.path.join(base_path, '*_test' + executable_suffix)) # Prepare gtest_report directory. gtest_report_dir = os.path.abspath(os.path.join(base_path, 'gtest_report')) if os.path.exists(gtest_report_dir): # Clear existing gtest reports. RemoveDirectoryRecursively(gtest_report_dir) os.makedirs(gtest_report_dir) failed_tests = [] # Create default test reports in case any test process crashes and cannot # leave test result as a XML report. # TODO(yukawa): Move this template to test_tools/gtest_report.py. xml_template = ( '<?xml version="1.0" encoding="UTF-8"?>\n' ' <testsuite name="%s" tests="1" errors="1">\n' ' <testcase name="No reporting XML">\n' ' <error message="No reporting XML has been generated. ' 'Process crash?" />\n' ' </testcase>\n' '</testsuite>\n') for binary in test_binaries: binary_filename = os.path.basename(binary) xml_path = os.path.join(gtest_report_dir, '%s.xml' % binary_filename) with open(xml_path, 'w') as f: f.write(xml_template % binary_filename) if parallel_num == 1: for binary in test_binaries: logging.info('running %s...', binary) try: test_function(binary, gtest_report_dir, options) except RunOrDieError as e: logging.error(e) failed_tests.append(binary) else: launcher = test_launcher.TestLauncher(gtest_report_dir) for binary in test_binaries: launcher.AddTestCommand([binary] + options) failed_tests = launcher.Execute(parallel_num) if failed_tests: error_text = ColoredText('following tests failed', logging.ERROR) raise RunOrDieError('\n'.join([error_text] + failed_tests))