#!/usr/bin/env python
# Copyright (c) 2009 Google Inc. All rights reserved.
# Copyright (C) 2010 Chris Jerdonek (cjerdonek@webkit.org)
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met:
# 
#     * Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
#     * Redistributions in binary form must reproduce the above
# copyright notice, this list of conditions and the following disclaimer
# in the documentation and/or other materials provided with the
# distribution.
#     * Neither the name of Google Inc. nor the names of its
# contributors may be used to endorse or promote products derived from
# this software without specific prior written permission.
# 
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

import logging
import sys

import webkitpy.python24.versioning as versioning

_log = logging.getLogger("test-webkitpy")


def configure_logging():
    """Configure the root logger.

    Configure the root logger not to log any messages from webkitpy,
    and to log all other messages that are INFO and above.

    """
    handler = logging.StreamHandler(sys.stderr)
    formatter = logging.Formatter("[%(levelname)s] %(name)s: %(message)s")
    handler.setFormatter(formatter)

    logger = logging.getLogger()
    logger.setLevel(logging.INFO)
    logger.addHandler(handler)

    # Filter out most webkitpy messages.
    #
    # Messages can be selectively re-enabled for this script by updating
    # this method accordingly.
    def filter(record):
        """Filter out autoinstall and non-third-party webkitpy messages."""
        # FIXME: Enable the logging of autoinstall messages once
        #        autoinstall is adjusted.  Currently, autoinstall logs
        #        INFO messages when importing already-downloaded packages,
        #        which is too verbose.
        if record.name.startswith("webkitpy.test"):
            return True
        if record.name.startswith("webkitpy"):
            return False
        return True

    testing_filter = logging.Filter()
    testing_filter.filter = filter

    # Display a message so developers are not mystified as to why
    # logging does not work in the unit tests.
    _log.info("Suppressing most webkitpy logging while running unit tests.")
    handler.addFilter(testing_filter)


def init():
    """Execute code prior to importing from webkitpy.unittests."""
    configure_logging()

    versioning.check_version(log=_log)

    (comparison, current_version, minimum_version) = \
        versioning.compare_version()

    if comparison > 0:
        # Then the current version is later than the minimum version.
        message = ("You are testing webkitpy with a Python version (%s) "
                   "higher than the minimum version (%s) it was meant "
                   "to support." % (current_version, minimum_version))
        _log.warn(message)


if __name__ == "__main__":

    init()

    # We import the unit test code after init() to ensure that any
    # Python version warnings are displayed in case an error occurs
    # while interpreting webkitpy.unittests.  This also allows
    # logging to be configured prior to importing -- for example to
    # enable the display of autoinstall logging.log messages while
    # running the unit tests.
    from webkitpy.test.main import Tester

    Tester().run_tests(sys.argv)
