~justin-fathomdb/nova/justinsb-openstack-api-volumes

« back to all changes in this revision

Viewing changes to vendor/Twisted-10.0.0/twisted/test/test_doc.py

  • Committer: Jesse Andrews
  • Date: 2010-05-28 06:05:26 UTC
  • Revision ID: git-v1:bf6e6e718cdc7488e2da87b21e258ccc065fe499
initial commit

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
from twisted.trial import unittest
 
2
import inspect, glob, os
 
3
from os import path
 
4
 
 
5
from twisted.python import reflect
 
6
 
 
7
import twisted
 
8
 
 
9
def errorInFile(f, line=17, name=''):
 
10
    """Return a filename formatted so emacs will recognize it as an error point
 
11
 
 
12
    @param line: Line number in file.  Defaults to 17 because that's about how
 
13
        long the copyright headers are.
 
14
    """
 
15
    return '%s:%d:%s' % (f, line, name)
 
16
    # return 'File "%s", line %d, in %s' % (f, line, name)
 
17
 
 
18
class DocCoverage(unittest.TestCase):
 
19
    def setUp(self):
 
20
        remove = len(os.path.dirname(os.path.dirname(twisted.__file__)))+1
 
21
        def visit(dirlist, directory, files):
 
22
            if '__init__.py' in files:
 
23
                d = directory[remove:].replace('/','.')
 
24
                dirlist.append(d)
 
25
        self.packageNames = []
 
26
        os.path.walk(os.path.dirname(twisted.__file__),
 
27
                     visit, self.packageNames)
 
28
 
 
29
    def testModules(self):
 
30
        """Looking for docstrings in all modules."""
 
31
        docless = []
 
32
        for packageName in self.packageNames:
 
33
            if packageName in ('twisted.test',):
 
34
                # because some stuff in here behaves oddly when imported
 
35
                continue
 
36
            try:
 
37
                package = reflect.namedModule(packageName)
 
38
            except ImportError, e:
 
39
                # This is testing doc coverage, not importability.
 
40
                # (Really, I don't want to deal with the fact that I don't
 
41
                #  have pyserial installed.)
 
42
                # print e
 
43
                pass
 
44
            else:
 
45
                docless.extend(self.modulesInPackage(packageName, package))
 
46
        self.failIf(docless, "No docstrings in module files:\n"
 
47
                    "%s" % ('\n'.join(map(errorInFile, docless)),))
 
48
 
 
49
    def modulesInPackage(self, packageName, package):
 
50
        docless = []
 
51
        directory = path.dirname(package.__file__)
 
52
        for modfile in glob.glob(path.join(directory, '*.py')):
 
53
            moduleName = inspect.getmodulename(modfile)
 
54
            if moduleName == '__init__':
 
55
                # These are tested by test_packages.
 
56
                continue
 
57
            elif moduleName in ('spelunk_gnome','gtkmanhole'):
 
58
                # argh special case pygtk evil argh.  How does epydoc deal
 
59
                # with this?
 
60
                continue
 
61
            try:
 
62
                module = reflect.namedModule('.'.join([packageName,
 
63
                                                       moduleName]))
 
64
            except Exception, e:
 
65
                # print moduleName, "misbehaved:", e
 
66
                pass
 
67
            else:
 
68
                if not inspect.getdoc(module):
 
69
                    docless.append(modfile)
 
70
        return docless
 
71
 
 
72
    def testPackages(self):
 
73
        """Looking for docstrings in all packages."""
 
74
        docless = []
 
75
        for packageName in self.packageNames:
 
76
            try:
 
77
                package = reflect.namedModule(packageName)
 
78
            except Exception, e:
 
79
                # This is testing doc coverage, not importability.
 
80
                # (Really, I don't want to deal with the fact that I don't
 
81
                #  have pyserial installed.)
 
82
                # print e
 
83
                pass
 
84
            else:
 
85
                if not inspect.getdoc(package):
 
86
                    docless.append(package.__file__.replace('.pyc','.py'))
 
87
        self.failIf(docless, "No docstrings for package files\n"
 
88
                    "%s" % ('\n'.join(map(errorInFile, docless),)))
 
89
 
 
90
 
 
91
    # This test takes a while and doesn't come close to passing.  :(
 
92
    testModules.skip = "Activate me when you feel like writing docstrings, and fixing GTK crashing bugs."