# bootstrapping setuptools
import ez_setup
ez_setup.use_setuptools()

import os
import sys
import textwrap
from distutils.errors import *
from distutils.command.clean import clean as _clean
from distutils.cmd import Command
from setuptools import setup
from distutils import log

from distutils.core import setup


class clean(_clean):
    """Also cleanup local temp files."""

    def run(self):
        _clean.run(self)

        import fnmatch

        # kill temporary files
        patterns = [
            # generic tempfiles
            '*~', '*.bak', '*.pyc',

            # tempfiles generated by ANTLR runs
            't[0-9]*Lexer.py', 't[0-9]*Parser.py',
            '*.tokens', '*__.g',
            ]

        for path in ('antlr3', 'unittests', 'tests'):
            path = os.path.join(os.path.dirname(__file__), path)
            if os.path.isdir(path):
                for root, dirs, files in os.walk(path, topdown=True):
                    graveyard = []
                    for pat in patterns:
                        graveyard.extend(fnmatch.filter(files, pat))

                    for name in graveyard:
                        filePath = os.path.join(root, name)

                        try:
                            log.info("removing '%s'", filePath)
                            os.unlink(filePath)
                        except OSError, exc:
                            log.warn(
                                "Failed to delete '%s': %s",
                                filePath, exc
                                )


class TestError(DistutilsError):
    pass


# grml.. the class name appears in the --help output:
# ...
# Options for 'CmdUnitTest' command
# ...
# so I have to use a rather ugly name...
class unittest(Command):
    """Run unit tests for package"""

    description = "run unit tests for package"

    user_options = [
        ('xml-output=', None,
         "Directory for JUnit compatible XML files."),
        ]
    boolean_options = []

    def initialize_options(self):
        self.xml_output = None

    def finalize_options(self):
        pass

    def run(self):
        testDir = os.path.join(os.path.dirname(__file__), 'unittests')
        if not os.path.isdir(testDir):
            raise DistutilsFileError(
                "There is not 'unittests' directory. Did you fetch the "
                "development version?",
                )

        import glob
        import imp
        import unittest
        import traceback
        import StringIO

        suite = unittest.TestSuite()
        loadFailures = []

        # collect tests from all unittests/test*.py files
        testFiles = []
        for testPath in glob.glob(os.path.join(testDir, 'test*.py')):
            testFiles.append(testPath)

        testFiles.sort()
        for testPath in testFiles:
            testID = os.path.basename(testPath)[:-3]

            try:
                modFile, modPathname, modDescription \
                         = imp.find_module(testID, [testDir])

                testMod = imp.load_module(
                    testID, modFile, modPathname, modDescription
                    )

                suite.addTests(
                    unittest.defaultTestLoader.loadTestsFromModule(testMod)
                    )

            except Exception:
                buf = StringIO.StringIO()
                traceback.print_exc(file=buf)

                loadFailures.append(
                    (os.path.basename(testPath), buf.getvalue())
                    )

        if self.xml_output:
            import xmlrunner
            runner = xmlrunner.XMLTestRunner(
                stream=open(os.path.join(self.xml_output, 'unittest.xml'), 'w'))
        else:
            runner = unittest.TextTestRunner(verbosity=2)
        result = runner.run(suite)

        for testName, error in loadFailures:
            sys.stderr.write('\n' + '='*70 + '\n')
            sys.stderr.write(
                "Failed to load test module %s\n" % testName
                )
            sys.stderr.write(error)
            sys.stderr.write('\n')

        if not result.wasSuccessful() or loadFailures:
            raise TestError(
                "Unit test suite failed!",
                )


class functest(Command):
    """Run functional tests for package"""

    description = "run functional tests for package"

    user_options = [
        ('testcase=', None,
         "testcase to run [default: run all]"),
        ('antlr-version=', None,
         "ANTLR version to use [default: HEAD (in ../../build)]"),
        ('antlr-jar=', None,
         "Explicit path to an antlr jar (overrides --antlr-version)"),
        ('xml-output=', None,
         "Directory for JUnit compatible XML files."),
        ]

    boolean_options = []

    def initialize_options(self):
        self.testcase = None
        self.antlr_version = 'HEAD'
        self.antlr_jar = None
        self.xml_output = None

    def finalize_options(self):
        pass

    def run(self):
        import glob
        import imp
        import unittest
        import traceback
        import StringIO

        testDir = os.path.join(os.path.dirname(__file__), 'tests')
        if not os.path.isdir(testDir):
            raise DistutilsFileError(
                "There is not 'tests' directory. Did you fetch the "
                "development version?",
                )

        # make sure, relative imports from testcases work
        sys.path.insert(0, testDir)

        rootDir = os.path.abspath(
            os.path.join(os.path.dirname(__file__), '..', '..'))

        if self.antlr_jar is not None:
            classpath = [self.antlr_jar]
        elif self.antlr_version == 'HEAD':
            classpath = [
                os.path.join(rootDir, 'tool', 'target', 'classes'),
                os.path.join(rootDir, 'runtime', 'Java', 'target', 'classes')
                ]
        else:
            classpath = [
                os.path.join(rootDir, 'archive',
                             'antlr-%s.jar' % self.antlr_version)
                ]

        classpath.extend([
            os.path.join(rootDir, 'lib', 'antlr-2.7.7.jar'),
            os.path.join(rootDir, 'lib', 'stringtemplate-3.2.1.jar'),
            os.path.join(rootDir, 'lib', 'ST-4.0.2.jar'),
            os.path.join(rootDir, 'lib', 'junit-4.2.jar')
            ])
        os.environ['CLASSPATH'] = ':'.join(classpath)

        os.environ['ANTLRVERSION'] = self.antlr_version

        suite = unittest.TestSuite()
        loadFailures = []

        # collect tests from all tests/t*.py files
        testFiles = []
        test_glob = 't[0-9][0-9][0-9]*.py'
        for testPath in glob.glob(os.path.join(testDir, test_glob)):
            if testPath.endswith('Lexer.py') or testPath.endswith('Parser.py'):
                continue

            # if a single testcase has been selected, filter out all other
            # tests
            if (self.testcase is not None
                and not os.path.basename(testPath)[:-3].startswith(self.testcase)):
                continue

            testFiles.append(testPath)

        testFiles.sort()
        for testPath in testFiles:
            testID = os.path.basename(testPath)[:-3]

            try:
                modFile, modPathname, modDescription \
                         = imp.find_module(testID, [testDir])

                testMod = imp.load_module(
                    testID, modFile, modPathname, modDescription)

                suite.addTests(
                    unittest.defaultTestLoader.loadTestsFromModule(testMod))

            except Exception:
                buf = StringIO.StringIO()
                traceback.print_exc(file=buf)

                loadFailures.append(
                    (os.path.basename(testPath), buf.getvalue()))

        if self.xml_output:
            import xmlrunner
            runner = xmlrunner.XMLTestRunner(
                stream=open(os.path.join(self.xml_output, 'functest.xml'), 'w'))
        else:
            runner = unittest.TextTestRunner(verbosity=2)

        result = runner.run(suite)

        for testName, error in loadFailures:
            sys.stderr.write('\n' + '='*70 + '\n')
            sys.stderr.write(
                "Failed to load test module %s\n" % testName
                )
            sys.stderr.write(error)
            sys.stderr.write('\n')

        if not result.wasSuccessful() or loadFailures:
            raise TestError(
                "Functional test suite failed!",
                )


setup(name='antlr_python_runtime',
      version='3.4',
      packages=['antlr3'],

      author="Benjamin Niemann",
      author_email="pink@odahoda.de",
      url="http://www.antlr.org/",
      download_url="http://www.antlr.org/download.html",
      license="BSD",
      description="Runtime package for ANTLR3",
      long_description=textwrap.dedent('''\
      This is the runtime package for ANTLR3, which is required to use parsers
      generated by ANTLR3.
      '''),
      cmdclass={'unittest': unittest,
                'functest': functest,
                'clean': clean
                },
      )
