mirror of
https://github.com/tc39/test262.git
synced 2025-08-31 23:08:23 +02:00
'Legacy' implies (to me) that it should no longer be allowed, but the lint explicitly checks for its presence (in the 'raw' case).
39 lines
1.4 KiB
Python
39 lines
1.4 KiB
Python
import re
|
|
from ..check import Check
|
|
|
|
_THROW_STMT = re.compile(
|
|
r'^\$DONOTEVALUATE\(\);$',
|
|
re.MULTILINE)
|
|
|
|
_THROW_STMT_RAW = re.compile(
|
|
r'^throw "Test262: This statement should not be evaluated\.";$',
|
|
re.MULTILINE)
|
|
|
|
class CheckNegative(Check):
|
|
'''Ensure tests have the expected YAML-formatted metadata.'''
|
|
ID = 'NEGATIVE'
|
|
|
|
def run(self, name, meta, source):
|
|
if meta is None or meta.get('negative') is None:
|
|
return
|
|
|
|
negative = meta['negative']
|
|
if not isinstance(negative, dict):
|
|
return '"negative" must be a dictionary with fields "type" and "phase"'
|
|
|
|
if not 'type' in negative:
|
|
return '"negative" must specify a "type" field'
|
|
|
|
if not 'phase' in negative:
|
|
return '"negative" must specify a "phase" field'
|
|
|
|
if negative["phase"] not in ["parse", "resolution", "runtime"]:
|
|
return '"phase" must be one of ["parse", "resolution", "runtime"]'
|
|
|
|
if negative["phase"] in ["parse", "resolution"]:
|
|
if meta.get('flags') and 'raw' in meta['flags']:
|
|
if not _THROW_STMT_RAW.search(source):
|
|
return 'Negative tests of type "early" must include a `throw` statement'
|
|
elif not _THROW_STMT.search(source):
|
|
return 'Negative tests of type "early" must include a $DONOTEVALUATE() call'
|