mirror of
				https://github.com/tc39/test262.git
				synced 2025-10-25 17:53:53 +02:00 
			
		
		
		
	
		
			
				
	
	
		
			96 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			96 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/env python
 | |
| # Copyright (C) 2016 the V8 project authors. All rights reserved.
 | |
| # This code is governed by the BSD license found in the LICENSE file.
 | |
| 
 | |
| from __future__ import print_function
 | |
| import argparse
 | |
| import os, sys
 | |
| 
 | |
| from lib.expander import Expander
 | |
| from lib.test import Test
 | |
| 
 | |
| def print_error(*values):
 | |
|     print('ERROR:', *values, file=sys.stderr)
 | |
| 
 | |
| # When a directory contains at least one file with a `.case` extension, it
 | |
| # should be interpreted as a "case directory"
 | |
| def is_case_dir(location):
 | |
|     for file_name in os.listdir(location):
 | |
|         if file_name.lower().endswith('.case'):
 | |
|             return True
 | |
|     return False
 | |
| 
 | |
| def find_cases(location):
 | |
|     # When a file is specified, return the file name and its containing
 | |
|     # directory
 | |
|     if os.path.isfile(location):
 | |
|         return location, [os.path.dirname(location)]
 | |
| 
 | |
|     if is_case_dir(location):
 | |
|         return None, [location]
 | |
|     else:
 | |
|         return None, map(
 | |
|             lambda x: os.path.join(args.cases, x), os.listdir(args.cases))
 | |
| 
 | |
| def clean(args):
 | |
|     for (subdir, _, fileNames) in os.walk(args.directory):
 | |
|         for fileName in map(lambda x: os.path.join(subdir, x), fileNames):
 | |
|             test = Test(fileName)
 | |
|             test.load()
 | |
|             if test.is_generated():
 | |
|                 print('Deleting file "' + fileName + '"...')
 | |
|                 os.remove(fileName)
 | |
| 
 | |
| def create(args):
 | |
|     caseFile, caseDirs = find_cases(args.cases)
 | |
| 
 | |
|     for caseDir in caseDirs:
 | |
|         exp = Expander(caseDir)
 | |
|         for test in exp.expand('utf-8', caseFile):
 | |
|             if args.out:
 | |
|                 try:
 | |
|                     existing = Test(test.file_name)
 | |
|                     existing.load(args.out)
 | |
| 
 | |
|                     if args.no_clobber:
 | |
|                         print_error(
 | |
|                             'Refusing to overwrite file: ' + test.file_name)
 | |
|                         exit(1)
 | |
| 
 | |
|                     if not existing.is_generated():
 | |
|                         print_error(
 | |
|                             'Refusing to overwrite non-generated file: ' +
 | |
|                             test.file_name)
 | |
|                         exit(1)
 | |
|                 except IOError:
 | |
|                     pass
 | |
| 
 | |
|                 test.write(args.out, parents=args.parents)
 | |
|             else:
 | |
|                 print(test.to_string())
 | |
| 
 | |
| parser = argparse.ArgumentParser(description='Test262 test generator tool')
 | |
| subparsers = parser.add_subparsers()
 | |
| 
 | |
| create_parser = subparsers.add_parser('create',
 | |
|     help='''Generate test material''')
 | |
| create_parser.add_argument('-o', '--out', help='''The directory to write the
 | |
|     compiled tests. If unspecified, tests will be written to standard out.''')
 | |
| create_parser.add_argument('-p', '--parents', action='store_true',
 | |
|     help='''Create non-existent directories as necessary.''')
 | |
| create_parser.add_argument('-n', '--no-clobber', action='store_true',
 | |
|     help='''Do not produce test if a corresponding file exists within this
 | |
|         directory.''')
 | |
| create_parser.add_argument('cases',
 | |
|     help='''Test cases to generate. May be a file or a directory.''')
 | |
| create_parser.set_defaults(func=create)
 | |
| 
 | |
| clean_parser = subparsers.add_parser('clean',
 | |
|     help='''Remove previously-generated files''')
 | |
| clean_parser.add_argument('directory',
 | |
|     help='''Remove any generated tests from this directory''')
 | |
| clean_parser.set_defaults(func=clean)
 | |
| 
 | |
| args = parser.parse_args()
 | |
| args.func(args)
 |