#!/usr/bin/python3 ''' NetSurf test plan generator The division form parameter may be given to select different groups of tests to include. ''' import os import re import cgi import cgitb import yaml cgitb.enable() def main(): ''' The test plan generator ''' docroot = os.environ["DOCUMENT_ROOT"] files = {} testroot = os.path.join(docroot, "monkey-test") params = cgi.FieldStorage() division = 'index' group_filter = None if 'division' in params and re.match('^[A-Za-z0-9-]+$', params['division'].value): division = params['division'].value if 'group' in params and re.match('^[A-Za-z0-9-]+$', params['group'].value): group_filter = params['group'].value print('Content-Type: text/plain') print('') # load all test plan yaml files for fname in os.listdir(testroot): if not fname.endswith(".yaml"): continue with open(os.path.join(testroot, fname), "r") as file_handle: files[fname] = yaml.load(file_handle) if division + '.yaml' not in files: print('# Unknown division ' + division) return for group in files[division + '.yaml']: if group_filter not None and group_filter != group['group']: continue print("---") group["kind"] = "group" print(yaml.dump(group, default_flow_style=False)) for filename, content in files.items(): if isinstance(content, dict) and content.get("group") == group["group"]: group_data = {"kind": "test", "filename": filename, "content": content} print("---") print(yaml.dump(group_data, default_flow_style=False)) if __name__ == "__main__": main()