45 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			45 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
import os
 | 
						|
import toml
 | 
						|
from glob import glob
 | 
						|
 | 
						|
abspath = os.path.abspath(__file__)
 | 
						|
dname = os.path.dirname(abspath)
 | 
						|
os.chdir(dname)
 | 
						|
 | 
						|
# ======= load test list
 | 
						|
tests = {}
 | 
						|
for f in sorted(glob('./src/bin/*.rs')):
 | 
						|
    name = os.path.splitext(os.path.basename(f))[0]
 | 
						|
    features = []
 | 
						|
    with open(f, 'r') as f:
 | 
						|
        for line in f:
 | 
						|
            if line.startswith('// required-features:'):
 | 
						|
                features = [feature.strip() for feature in line.split(':', 2)[1].strip().split(',')]
 | 
						|
 | 
						|
    tests[name] = features
 | 
						|
 | 
						|
# ========= Update Cargo.toml
 | 
						|
 | 
						|
things = {
 | 
						|
    'bin': [
 | 
						|
        {
 | 
						|
            'name': f'{name}',
 | 
						|
            'path': f'src/bin/{name}.rs',
 | 
						|
            'required-features': features,
 | 
						|
        }
 | 
						|
        for name, features in tests.items()
 | 
						|
    ]
 | 
						|
}
 | 
						|
 | 
						|
SEPARATOR_START = '# BEGIN TESTS\n'
 | 
						|
SEPARATOR_END = '# END TESTS\n'
 | 
						|
HELP = '# Generated by gen_test.py. DO NOT EDIT.\n'
 | 
						|
with open('Cargo.toml', 'r') as f:
 | 
						|
    data = f.read()
 | 
						|
before, data = data.split(SEPARATOR_START, maxsplit=1)
 | 
						|
_, after = data.split(SEPARATOR_END, maxsplit=1)
 | 
						|
data = before + SEPARATOR_START + HELP + \
 | 
						|
    toml.dumps(things) + SEPARATOR_END + after
 | 
						|
with open('Cargo.toml', 'w') as f:
 | 
						|
    f.write(data)
 |