4
from twisted.trial.runner import TestLoader
10
return list(gen_split_name(name))
14
[bit.lower() for bit in wordRE.findall(word) if len(bit) != 0])
18
def gen_split_name(name,
20
r'[0-9]+|[A-Z]?(?:(?:[A-Z](?![a-z]))+|[a-z]*)')):
21
for word in name.split('_'):
22
for bit in wordRE.findall(word):
25
if len(bit) > 1 and bit.upper() == bit:
32
return inspect.getsourcelines(obj)[1]
35
def find_tests(finder, module):
37
finder.gotModule(module)
38
classes = sorted(loader.findTestClasses(module), key=get_lineno)
39
for testCaseClass in classes:
40
finder.gotTestClass(testCaseClass)
41
methods = [getattr(testCaseClass, 'test%s' % name)
42
for name in loader.getTestCaseNames(testCaseClass)]
43
for method in sorted(methods, key=get_lineno):
44
finder.gotTest(method)
47
class Documenter(object):
49
def __init__(self, formatter):
50
self.formatter = formatter
52
def titleCase(self, words):
55
if word.lower() in ['in', 'a', 'the', 'of']:
56
titled.append(word.lower())
57
elif word.upper() == word:
60
titled.append(word.capitalize())
61
titled = ' '.join(titled)
62
return titled[0].upper() + titled[1:]
64
def getDocs(self, obj):
65
doc = inspect.getdoc(obj)
67
doc = inspect.getcomments(obj)
70
def gotModule(self, module):
71
self.formatter.title(module.__name__)
72
docs = self.getDocs(module)
74
self.formatter.paragraph(docs)
76
def gotTestClass(self, klass):
77
self.formatter.section(self.titleCase(
78
[bit for bit in split_name(klass.__name__) if bit != 'test']))
79
docs = self.getDocs(klass)
81
self.formatter.paragraph(docs)
83
def gotTest(self, method):
84
self.formatter.subsection(
85
self.titleCase(split_name(method.__name__)[1:]))
86
docs = self.getDocs(method)
88
self.formatter.paragraph(docs)
91
class WikiFormatter(object):
92
def __init__(self, stream):
95
def writeln(self, line):
96
self.stream.write('%s\n' % (line,))
98
def title(self, name):
99
self.writeln('= %s =\n' % (name,))
101
def section(self, name):
102
self.writeln('== %s ==\n' % (name,))
104
def subsection(self, name):
105
self.writeln('=== %s ===\n' % (name,))
107
def paragraph(self, text):
108
self.writeln('%s\n' % (text.strip(),))
111
if __name__ == '__main__':
113
from twisted.python.reflect import namedAny
114
formatter = WikiFormatter(sys.stdout)
115
documenter = Documenter(formatter)
116
find_tests(documenter, namedAny(sys.argv[1]))