#!/usr/bin/env python import glob, re def get_testmap(testlist): tl = open(testlist) testmap = {} module_under_test = "" test_function = "" for line in tl.readlines(): line = line.rstrip() s = re.search("Doctest unit tests for module L{(.*)}", line) if s: module_under_test = s.group(1) #print "Module under test:", module_under_test continue s = re.search("def (.*)\(", line) if s: test_function = s.group(1) #print "Found test function:", test_function continue s = re.search("- L{%s\.(.*)}" % module_under_test, line) if s: func_under_test = s.group(1) #print "Found function under test:", func_under_test testmap.setdefault(func_under_test, []).append(test_function) continue tl.close() return (module_under_test, testmap) def print_testmap(testmap): for func_under_test, tests in testmap.items(): print "Tests for function %s:" % func_under_test, print tests def write_testmap(module_under_test, testmap): testmap_file = "testmap_%s.py" % module_under_test print "Creating testmap file:", testmap_file t = open(testmap_file, 'w') keys = testmap.keys() keys.sort() for func_under_test in keys: sanitized_func_name = re.sub("\.", "_", func_under_test) func_text = """ def testmap_%s(): \"\"\" Testmap for L{%s.%s}: """ % (sanitized_func_name, module_under_test, func_under_test) for test_function in testmap[func_under_test]: func_text += """ - L{testlist_%s.%s}""" % (module_under_test, test_function) func_text += "\n \"\"\"\n" t.write(func_text + "\n") t.close() def main(): testlists = glob.glob("testlist_*.py") for testlist in testlists: print "Processing", testlist (module_under_test, testmap) = get_testmap(testlist) print "Module under test:", module_under_test #print_testmap(testmap) write_testmap(module_under_test, testmap) if __name__ == "__main__": main()