mirror of
				https://github.com/ethereum/solidity
				synced 2023-10-03 13:03:40 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			64 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			64 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/env python2
 | |
| #
 | |
| # Not actively tested or maintained. Exists in case we want to rebuild an
 | |
| # ancient release.
 | |
| 
 | |
| import sys
 | |
| import re
 | |
| import os
 | |
| import hashlib
 | |
| # Pylint for some reason insists that isfile() is unused
 | |
| from os.path import join, isfile  # pylint: disable=unused-import
 | |
| 
 | |
| 
 | |
| def extract_test_cases(path):
 | |
|     with open(path, encoding="utf8", errors='ignore', mode='rb') as f:
 | |
|         lines = f.read().splitlines()
 | |
| 
 | |
|     inside = False
 | |
|     delimiter = ''
 | |
|     tests = []
 | |
| 
 | |
|     for l in lines:
 | |
|       if inside:
 | |
|         if l.strip().endswith(')' + delimiter + '";'):
 | |
|           tests[-1] += l.strip()[:-(3 + len(delimiter))]
 | |
|           inside = False
 | |
|         else:
 | |
|           tests[-1] += l + '\n'
 | |
|       else:
 | |
|         m = re.search(r'R"([^(]*)\((.*)$', l.strip())
 | |
|         if m:
 | |
|           inside = True
 | |
|           delimiter = m.group(1)
 | |
|           tests += [m.group(2)]
 | |
| 
 | |
|     return tests
 | |
| 
 | |
| def extract_and_write(f, path):
 | |
|     if f.endswith('.sol'):
 | |
|         with open(path, 'r', encoding='utf8') as _f:
 | |
|             cases = [_f.read()]
 | |
|     else:
 | |
|         cases = extract_test_cases(path)
 | |
|     write_cases(f, cases)
 | |
| 
 | |
| def write_cases(f, tests):
 | |
|     cleaned_filename = f.replace(".","_").replace("-","_").replace(" ","_").lower()
 | |
|     for test in tests:
 | |
|         remainder = re.sub(r'^ {4}', '', test, 0, re.MULTILINE)
 | |
|         source_code_hash = hashlib.sha256(test).hexdigest()
 | |
|         with open(f'test_{source_code_hash}_{cleaned_filename}.sol', 'w', encoding='utf8') as _f:
 | |
|             _f.write(remainder)
 | |
| 
 | |
| 
 | |
| if __name__ == '__main__':
 | |
|     path = sys.argv[1]
 | |
| 
 | |
|     for root, subdirs, files in os.walk(path):
 | |
|         if '_build' in subdirs:
 | |
|             subdirs.remove('_build')
 | |
|         for f in files:
 | |
|             path = join(root, f)
 | |
|             extract_and_write(f, path)
 |