# -*- coding: utf-8 -*-

"""Custom Django test runner that runs the tests using the
XMLTestRunner class.

This script shows how to use the XMLTestRunner in a Django project. To learn
how to configure a custom TestRunner in a Django project, please read the
Django docs website.
"""

from django.conf import settings
try:
    # Only available in Django1.3+
    # http://docs.djangoproject.com/en/dev/topics/testing/#writing-unit-tests
    from django.utils import unittest
except ImportError:
    import unittest #we just defeault to the basic unittest

from django.db.models import get_app, get_apps
from django.test.utils import setup_test_environment, teardown_test_environment
from django.test.simple import (
        build_suite, build_test, DjangoTestSuiteRunner, reorder_suite
)
from django.test.testcases import TestCase
import xmlrunner

class XMLTestRunner(DjangoTestSuiteRunner):
    def run_tests(self, test_labels, verbosity=1, interactive=True, extra_tests=[]):
        """
        Run the unit tests for all the test labels in the provided list.
        Labels must be of the form:
         - app.TestClass.test_method
            Run a single specific test method
         - app.TestClass
            Run all the test methods in a given class
         - app
            Search for doctests and unittests in the named application.

        When looking for tests, the test runner will look in the models and
        tests modules for the application.

        A list of 'extra' tests may also be provided; these tests
        will be added to the test suite.

        Returns the number of tests that failed.
        """
        setup_test_environment()

        settings.DEBUG = False

        verbosity = getattr(settings, 'TEST_OUTPUT_VERBOSE', 1)
        if isinstance(verbosity, bool):
            verbosity = (1, 2)[verbosity]
        descriptions = getattr(settings, 'TEST_OUTPUT_DESCRIPTIONS', False)
        output = getattr(settings, 'TEST_OUTPUT_DIR', '.')

        suite = unittest.TestSuite()

        if test_labels:
            for label in test_labels:
                if '.' in label:
                    suite.addTest(build_test(label))
                else:
                    app = get_app(label)
                    suite.addTest(build_suite(app))
        else:
            for app in get_apps():
                suite.addTest(build_suite(app))

        for test in extra_tests:
            suite.addTest(test)

        suite = reorder_suite(suite, (TestCase,))

        old_config = self.setup_databases()

        result = xmlrunner.XMLTestRunner(
            verbosity=verbosity, descriptions=descriptions,
            output=output).run(suite)

        self.teardown_databases(old_config)
        teardown_test_environment()

        return len(result.failures) + len(result.errors)

@@ -313,519 +313,140 @@
 ngs%0A
-try:%0A    # Only available in Django1.3+%0A    # http://docs.djangoproject.com/en/dev/topics/testing/#writing-unit-tests%0A    from django.utils import unittest%0Aexcept ImportError:%0A    import unittest #we just defeault to the basic unittest%0A%0Afrom django.db.models import get_app, get_apps%0Afrom django.test.utils import setup_test_environment, teardown_test_environment%0Afrom django.test.simple import (%0A        build_suite, build_test, DjangoTestSuiteRunner, reorder_suite%0A)%0Afrom django.test.testcases import TestCase
+from django.test.simple import DjangoTestSuiteRunner%0Afrom django.test.utils import setup_test_environment, teardown_test_environment
 %0Aimp
@@ -460,16 +460,17 @@
 runner%0A%0A
+%0A
 class XM
@@ -546,53 +546,34 @@
 ls, 
-verbosity=1, interactive=True, extra_tests=%5B%5D
+extra_tests=None, **kwargs
 ):%0A 
@@ -1599,505 +1599,49 @@
 e = 
-unittest.TestSuite()%0A%0A        if test_labels:%0A            for label in test_labels:%0A                if '.' in label:%0A                    suite.addTest(build_test(label))%0A                else:%0A                    app = get_app(label)%0A                    suite.addTest(build_suite(app))%0A        else:%0A            for app in get_apps():%0A                suite.addTest(build_suite(app))%0A%0A        for test in extra_tests:%0A            suite.addTest(test)%0A%0A        suite = reorder_suite(suite, (TestCase,)
+self.build_suite(test_labels, extra_tests
 )%0A%0A 

refactor Django test runner to clean up imports