source: proto/RE2Pablo/ref/re2pbs/antlr/antlr_python_runtime-3.1.3/setup.py @ 2226

Last change on this file since 2226 was 2226, checked in by ksherdy, 7 years ago

Initial check in.

File size: 9.3 KB
Line 
1# bootstrapping setuptools
2import ez_setup
3ez_setup.use_setuptools()
4
5import os
6import sys
7import textwrap
8from distutils.errors import *
9from distutils.command.clean import clean as _clean
10from distutils.cmd import Command
11from setuptools import setup
12from distutils import log
13
14from distutils.core import setup
15
16
17class clean(_clean):
18    """Also cleanup local temp files."""
19
20    def run(self):
21        _clean.run(self)
22
23        import fnmatch
24       
25        # kill temporary files
26        patterns = [
27            # generic tempfiles
28            '*~', '*.bak', '*.pyc',
29
30            # tempfiles generated by ANTLR runs
31            't[0-9]*Lexer.py', 't[0-9]*Parser.py',
32            '*.tokens', '*__.g',
33            ]
34           
35        for path in ('antlr3', 'unittests', 'tests'):
36            path = os.path.join(os.path.dirname(__file__), path)
37            if os.path.isdir(path):
38                for root, dirs, files in os.walk(path, topdown=True):
39                    graveyard = []                   
40                    for pat in patterns:
41                        graveyard.extend(fnmatch.filter(files, pat))
42
43                    for name in graveyard:
44                        filePath = os.path.join(root, name)
45
46                        try:
47                            log.info("removing '%s'", filePath)
48                            os.unlink(filePath)
49                        except OSError, exc:
50                            log.warn(
51                                "Failed to delete '%s': %s",
52                                filePath, exc
53                                )
54
55           
56class TestError(DistutilsError):
57    pass
58
59
60# grml.. the class name appears in the --help output:
61# ...
62# Options for 'CmdUnitTest' command
63# ...
64# so I have to use a rather ugly name...
65class unittest(Command):
66    """Run unit tests for package"""
67
68    description = "run unit tests for package"
69
70    user_options = [
71        ('xml-output=', None,
72         "Directory for JUnit compatible XML files."),
73        ]
74    boolean_options = []
75
76    def initialize_options(self):
77        self.xml_output = None
78   
79    def finalize_options(self):
80        pass
81   
82    def run(self):
83        testDir = os.path.join(os.path.dirname(__file__), 'unittests')
84        if not os.path.isdir(testDir):
85            raise DistutilsFileError(
86                "There is not 'unittests' directory. Did you fetch the "
87                "development version?",
88                )
89
90        import glob
91        import imp
92        import unittest
93        import traceback
94        import StringIO
95       
96        suite = unittest.TestSuite()
97        loadFailures = []
98       
99        # collect tests from all unittests/test*.py files
100        testFiles = []
101        for testPath in glob.glob(os.path.join(testDir, 'test*.py')):
102            testFiles.append(testPath)
103
104        testFiles.sort()
105        for testPath in testFiles:
106            testID = os.path.basename(testPath)[:-3]
107
108            try:
109                modFile, modPathname, modDescription \
110                         = imp.find_module(testID, [testDir])
111
112                testMod = imp.load_module(
113                    testID, modFile, modPathname, modDescription
114                    )
115               
116                suite.addTests(
117                    unittest.defaultTestLoader.loadTestsFromModule(testMod)
118                    )
119               
120            except Exception:
121                buf = StringIO.StringIO()
122                traceback.print_exc(file=buf)
123               
124                loadFailures.append(
125                    (os.path.basename(testPath), buf.getvalue())
126                    )             
127         
128        if self.xml_output:
129            import xmlrunner
130            runner = xmlrunner.XMLTestRunner(
131                stream=open(os.path.join(self.xml_output, 'unittest.xml'), 'w'))
132        else:
133            runner = unittest.TextTestRunner(verbosity=2)
134        result = runner.run(suite)
135
136        for testName, error in loadFailures:
137            sys.stderr.write('\n' + '='*70 + '\n')
138            sys.stderr.write(
139                "Failed to load test module %s\n" % testName
140                )
141            sys.stderr.write(error)
142            sys.stderr.write('\n')
143           
144        if not result.wasSuccessful() or loadFailures:
145            raise TestError(
146                "Unit test suite failed!",
147                )
148           
149
150class functest(Command):
151    """Run functional tests for package"""
152
153    description = "run functional tests for package"
154
155    user_options = [
156        ('testcase=', None,
157         "testcase to run [default: run all]"),
158        ('antlr-version=', None,
159         "ANTLR version to use [default: HEAD (in ../../build)]"),
160        ('antlr-jar=', None,
161         "Explicit path to an antlr jar (overrides --antlr-version)"),
162        ('xml-output=', None,
163         "Directory for JUnit compatible XML files."),
164        ]
165   
166    boolean_options = []
167
168    def initialize_options(self):
169        self.testcase = None
170        self.antlr_version = 'HEAD'
171        self.antlr_jar = None
172        self.xml_output = None
173   
174    def finalize_options(self):
175        pass
176
177   
178    def run(self):
179        import glob
180        import imp
181        import unittest
182        import traceback
183        import StringIO
184       
185        testDir = os.path.join(os.path.dirname(__file__), 'tests')
186        if not os.path.isdir(testDir):
187            raise DistutilsFileError(
188                "There is not 'tests' directory. Did you fetch the "
189                "development version?",
190                )
191
192        # make sure, relative imports from testcases work
193        sys.path.insert(0, testDir)
194
195        rootDir = os.path.abspath(
196            os.path.join(os.path.dirname(__file__), '..', '..'))
197
198        if self.antlr_jar is not None:
199            classpath = [self.antlr_jar]
200        elif self.antlr_version == 'HEAD':
201            classpath = [
202                os.path.join(rootDir, 'tool', 'target', 'classes'),
203                os.path.join(rootDir, 'runtime', 'Java', 'target', 'classes')
204                ]
205        else:
206            classpath = [
207                os.path.join(rootDir, 'archive',
208                             'antlr-%s.jar' % self.antlr_version)
209                ]
210
211        classpath.extend([
212            os.path.join(rootDir, 'lib', 'antlr-2.7.7.jar'),
213            os.path.join(rootDir, 'lib', 'stringtemplate-3.2.jar'),
214            os.path.join(rootDir, 'lib', 'junit-4.2.jar')
215            ])
216        os.environ['CLASSPATH'] = ':'.join(classpath)
217
218        os.environ['ANTLRVERSION'] = self.antlr_version
219
220        suite = unittest.TestSuite()
221        loadFailures = []
222       
223        # collect tests from all tests/t*.py files
224        testFiles = []
225        for testPath in glob.glob(os.path.join(testDir, 't*.py')):
226            if (testPath.endswith('Lexer.py')
227                or testPath.endswith('Parser.py')
228                ):
229                continue
230
231            # if a single testcase has been selected, filter out all other
232            # tests
233            if (self.testcase is not None
234                and os.path.basename(testPath)[:-3] != self.testcase
235                ):
236                continue
237           
238            testFiles.append(testPath)
239
240        testFiles.sort()
241        for testPath in testFiles:
242            testID = os.path.basename(testPath)[:-3]
243
244            try:
245                modFile, modPathname, modDescription \
246                         = imp.find_module(testID, [testDir])
247
248                testMod = imp.load_module(
249                    testID, modFile, modPathname, modDescription
250                    )
251               
252                suite.addTests(
253                    unittest.defaultTestLoader.loadTestsFromModule(testMod)
254                    )
255               
256            except Exception:
257                buf = StringIO.StringIO()
258                traceback.print_exc(file=buf)
259               
260                loadFailures.append(
261                    (os.path.basename(testPath), buf.getvalue())
262                    )             
263               
264           
265        if self.xml_output:
266            import xmlrunner
267            runner = xmlrunner.XMLTestRunner(
268                stream=open(os.path.join(self.xml_output, 'functest.xml'), 'w'))
269        else:
270            runner = unittest.TextTestRunner(verbosity=2)
271
272        result = runner.run(suite)
273
274        for testName, error in loadFailures:
275            sys.stderr.write('\n' + '='*70 + '\n')
276            sys.stderr.write(
277                "Failed to load test module %s\n" % testName
278                )
279            sys.stderr.write(error)
280            sys.stderr.write('\n')
281           
282        if not result.wasSuccessful() or loadFailures:
283            raise TestError(
284                "Functional test suite failed!",
285                )
286           
287
288setup(name='antlr_python_runtime',
289      version='3.1.3',
290      packages=['antlr3'],
291
292      author="Benjamin Niemann",
293      author_email="pink@odahoda.de",
294      url="http://www.antlr.org/",
295      download_url="http://www.antlr.org/download.html",
296      license="BSD",
297      description="Runtime package for ANTLR3",
298      long_description=textwrap.dedent('''\
299      This is the runtime package for ANTLR3, which is required to use parsers
300      generated by ANTLR3.
301      '''),
302     
303     
304      cmdclass={'unittest': unittest,
305                'functest': functest,
306                'clean': clean
307                },
308      )
Note: See TracBrowser for help on using the repository browser.