| # Copyright (c) 2014 The Chromium Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| import sys |
| import os |
| import re |
| |
| from tvcm import project as project_module |
| |
| |
| def _FindAllFilesRecursive(source_paths): |
| assert isinstance(source_paths, list) |
| all_filenames = set() |
| for source_path in source_paths: |
| for dirpath, _, filenames in os.walk(source_path): |
| for f in filenames: |
| if f.startswith('.'): |
| continue |
| x = os.path.abspath(os.path.join(dirpath, f)) |
| all_filenames.add(x) |
| return all_filenames |
| |
| def _IsFilenameATest(loader, x): # pylint: disable=unused-argument |
| if x.endswith('_test.js'): |
| return True |
| |
| if x.endswith('_test.html'): |
| return True |
| |
| if x.endswith('_unittest.js'): |
| return True |
| |
| if x.endswith('_unittest.html'): |
| return True |
| |
| # TODO(nduca): Add content test? |
| return False |
| |
| |
| class TracingProject(project_module.Project): |
| tracing_path = os.path.abspath(os.path.join(os.path.dirname(__file__), '..')) |
| tracing_root_path = os.path.abspath(os.path.join(tracing_path, 'tracing')) |
| tracing_src_path = os.path.abspath(os.path.join(tracing_root_path, 'tracing')) |
| extras_path = os.path.join(tracing_src_path, 'extras') |
| |
| tracing_third_party_path = os.path.abspath(os.path.join( |
| tracing_root_path, 'third_party')) |
| |
| jszip_path = os.path.abspath(os.path.join(tracing_third_party_path, 'jszip')) |
| |
| glmatrix_path = os.path.abspath(os.path.join( |
| tracing_third_party_path, 'gl-matrix', 'dist')) |
| |
| ui_path = os.path.abspath(os.path.join(tracing_src_path, 'ui')) |
| d3_path = os.path.abspath(os.path.join(tracing_third_party_path, 'd3')) |
| chai_path = os.path.abspath(os.path.join(tracing_third_party_path, 'chai')) |
| mocha_path = os.path.abspath(os.path.join(tracing_third_party_path, 'mocha')) |
| parse5_path = os.path.abspath(os.path.join( |
| tracing_third_party_path, 'vinn', 'third_party', 'parse5')) |
| |
| test_data_path = os.path.join(tracing_root_path, 'test_data') |
| skp_data_path = os.path.join(tracing_root_path, 'skp_data') |
| |
| rjsmin_path = os.path.abspath(os.path.join( |
| tracing_third_party_path, 'tvcm', 'third_party', 'rjsmin')) |
| rcssmin_path = os.path.abspath(os.path.join( |
| tracing_third_party_path, 'tvcm', 'third_party', 'rcssmin')) |
| |
| def __init__(self, *args, **kwargs): |
| super(TracingProject, self).__init__(*args, **kwargs) |
| self.source_paths.append(self.tracing_src_path) |
| self.source_paths.append(self.tracing_root_path) |
| self.source_paths.append(self.tracing_third_party_path) |
| self.source_paths.append(self.jszip_path) |
| self.source_paths.append(self.glmatrix_path) |
| self.source_paths.append(self.d3_path) |
| self.source_paths.append(self.chai_path) |
| self.source_paths.append(self.mocha_path) |
| |
| |
| def IsD8CompatibleFile(self, filename): |
| return not filename.startswith(self.ui_path) |
| |
| def FindAllTestModuleResources(self): |
| all_filenames = _FindAllFilesRecursive([self.tracing_src_path]) |
| test_module_filenames = [x for x in all_filenames if |
| _IsFilenameATest(self.loader, x)] |
| test_module_filenames.sort() |
| |
| # Find the equivalent resources. |
| return [self.loader.FindResourceGivenAbsolutePath(x) |
| for x in test_module_filenames] |
| |
| def FindAllD8TestModuleResources(self): |
| all_test_module_resources = self.FindAllTestModuleResources() |
| return [x for x in all_test_module_resources |
| if self.IsD8CompatibleFile(x.absolute_path)] |
| |
| def GetConfigNames(self): |
| config_files = [ |
| os.path.join(self.extras_path, x) for x in os.listdir(self.extras_path) |
| if x.endswith('_config.html') |
| ] |
| |
| config_files = [x for x in config_files if os.path.isfile(x)] |
| |
| config_basenames = [os.path.basename(x) for x in config_files] |
| config_names = [re.match('(.+)_config.html$', x).group(1) |
| for x in config_basenames] |
| return config_names |
| |
| def GetDefaultConfigName(self): |
| assert 'full' in self.GetConfigNames() |
| return 'full' |
| |
| def AddConfigNameOptionToParser(self, parser): |
| choices = self.GetConfigNames() |
| parser.add_option( |
| '--config', dest='config_name', |
| type='choice', choices=choices, |
| default=self.GetDefaultConfigName(), |
| help='Picks a browser config. Valid choices: %s' % ', '.join(choices)) |
| return choices |
| |
| def GetModuleNameForConfigName(self, config_name): |
| return 'extras.%s_config' % config_name |
| |
| @classmethod |
| def IsIgnoredFile(cls, affected_file): |
| if affected_file.LocalPath().endswith('.png'): |
| return True |
| |
| if affected_file.LocalPath().endswith('.svg'): |
| return True |
| |
| if affected_file.LocalPath().endswith('.skp'): |
| return True |
| |
| if (affected_file.LocalPath().endswith('.gypi') or |
| affected_file.LocalPath().endswith('.gyp') or |
| affected_file.LocalPath().endswith('.gn')): |
| return True |
| |
| if TracingProject.IsThirdParty(affected_file): |
| return True |
| |
| # Is test data? |
| if affected_file.AbsoluteLocalPath().startswith(cls.test_data_path): |
| return True |
| |
| if (affected_file.LocalPath().startswith('.gitignore') or |
| affected_file.LocalPath().startswith('codereview.settings') or |
| affected_file.LocalPath().startswith('tracing/.allow-devtools-save') or |
| affected_file.LocalPath().startswith('tracing/AUTHORS') or |
| affected_file.LocalPath().startswith('tracing/LICENSE') or |
| affected_file.LocalPath().startswith('tracing/OWNERS') or |
| affected_file.LocalPath().startswith('tracing/bower.json') or |
| affected_file.LocalPath().startswith('tracing/.gitignore') or |
| affected_file.LocalPath().startswith('tracing/.bowerrc') or |
| affected_file.LocalPath().startswith('tracing/README.md') or |
| affected_file.LocalPath().startswith( |
| 'tracing/examples/string_convert.js')): |
| return True |
| |
| return False |
| |
| @staticmethod |
| def IsThirdParty(affected_file): |
| return affected_file.LocalPath().startswith('tracing/third_party') |