mirror of https://github.com/tc39/test262.git
64 lines
1.9 KiB
Python
64 lines
1.9 KiB
Python
import yaml
|
|
|
|
from ..check import Check
|
|
|
|
class CheckHarnessFeatures(Check):
|
|
'''Ensure tests that use harnesses with explicit features flag requirements
|
|
specify only `features` from a list of valid values.'''
|
|
ID = 'HARNESS_FEATURES'
|
|
|
|
def __init__(self):
|
|
with open('./harness/features.yml', 'r') as f:
|
|
self.include_has_features = yaml.load(f.read())
|
|
|
|
def comparison_result_lists(self, meta):
|
|
|
|
result = {'features': set(), 'missing': set()}
|
|
|
|
if not meta or 'includes' not in meta:
|
|
return result
|
|
|
|
meta_features = meta['features'] if 'features' in meta else []
|
|
meta_includes = meta['includes']
|
|
features = []
|
|
|
|
|
|
if len(meta_includes) == 0:
|
|
return result
|
|
|
|
for meta_include in meta_includes:
|
|
if meta_include in self.include_has_features:
|
|
features = self.include_has_features[meta_include]
|
|
|
|
if len(features) == 0:
|
|
return result
|
|
|
|
if 'features' not in meta or len(meta['features']) == 0:
|
|
result['missing'].update(features)
|
|
else:
|
|
meta_features = meta['features']
|
|
|
|
for feature in features:
|
|
if feature not in meta_features:
|
|
result['missing'].add(feature)
|
|
|
|
result['features'].update(meta_features);
|
|
|
|
return result
|
|
|
|
|
|
def run(self, name, meta, source):
|
|
|
|
result = self.comparison_result_lists(meta)
|
|
|
|
if len(result['features']) == 0 and len(result['missing']) == 0:
|
|
return
|
|
|
|
if len(result['missing']) > 0:
|
|
if len(result['features']) == 0:
|
|
return 'Missing: `features: [%s]`' % ', '.join(list(result['missing']))
|
|
else:
|
|
return 'Missing from `features`: %s' % ', '.join(list(result['missing']))
|
|
else:
|
|
return
|