121939df44de1705786c545cd1bf519d47250322dBen Murdoch#!/usr/bin/python
221939df44de1705786c545cd1bf519d47250322dBen Murdoch# Copyright (C) 2010 Google Inc. All rights reserved.
321939df44de1705786c545cd1bf519d47250322dBen Murdoch#
421939df44de1705786c545cd1bf519d47250322dBen Murdoch# Redistribution and use in source and binary forms, with or without
521939df44de1705786c545cd1bf519d47250322dBen Murdoch# modification, are permitted provided that the following conditions are
621939df44de1705786c545cd1bf519d47250322dBen Murdoch# met:
721939df44de1705786c545cd1bf519d47250322dBen Murdoch#
821939df44de1705786c545cd1bf519d47250322dBen Murdoch#     * Redistributions of source code must retain the above copyright
921939df44de1705786c545cd1bf519d47250322dBen Murdoch# notice, this list of conditions and the following disclaimer.
1021939df44de1705786c545cd1bf519d47250322dBen Murdoch#     * Redistributions in binary form must reproduce the above
1121939df44de1705786c545cd1bf519d47250322dBen Murdoch# copyright notice, this list of conditions and the following disclaimer
1221939df44de1705786c545cd1bf519d47250322dBen Murdoch# in the documentation and/or other materials provided with the
1321939df44de1705786c545cd1bf519d47250322dBen Murdoch# distribution.
1421939df44de1705786c545cd1bf519d47250322dBen Murdoch#     * Neither the name of Google Inc. nor the names of its
1521939df44de1705786c545cd1bf519d47250322dBen Murdoch# contributors may be used to endorse or promote products derived from
1621939df44de1705786c545cd1bf519d47250322dBen Murdoch# this software without specific prior written permission.
1721939df44de1705786c545cd1bf519d47250322dBen Murdoch#
1821939df44de1705786c545cd1bf519d47250322dBen Murdoch# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
1921939df44de1705786c545cd1bf519d47250322dBen Murdoch# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
2021939df44de1705786c545cd1bf519d47250322dBen Murdoch# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
2121939df44de1705786c545cd1bf519d47250322dBen Murdoch# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
2221939df44de1705786c545cd1bf519d47250322dBen Murdoch# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
2321939df44de1705786c545cd1bf519d47250322dBen Murdoch# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
2421939df44de1705786c545cd1bf519d47250322dBen Murdoch# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
2521939df44de1705786c545cd1bf519d47250322dBen Murdoch# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
2621939df44de1705786c545cd1bf519d47250322dBen Murdoch# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
2721939df44de1705786c545cd1bf519d47250322dBen Murdoch# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
2821939df44de1705786c545cd1bf519d47250322dBen Murdoch# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2921939df44de1705786c545cd1bf519d47250322dBen Murdoch
3021939df44de1705786c545cd1bf519d47250322dBen Murdoch"""Unit tests for printing.py."""
3121939df44de1705786c545cd1bf519d47250322dBen Murdoch
3221939df44de1705786c545cd1bf519d47250322dBen Murdochimport optparse
3321939df44de1705786c545cd1bf519d47250322dBen Murdochimport unittest
3421939df44de1705786c545cd1bf519d47250322dBen Murdochimport logging
3521939df44de1705786c545cd1bf519d47250322dBen Murdoch
3621939df44de1705786c545cd1bf519d47250322dBen Murdochfrom webkitpy.common import array_stream
375ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsenfrom webkitpy.common.system import logtesting
3821939df44de1705786c545cd1bf519d47250322dBen Murdochfrom webkitpy.layout_tests import port
39f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch
4021939df44de1705786c545cd1bf519d47250322dBen Murdochfrom webkitpy.layout_tests.layout_package import printing
41f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochfrom webkitpy.layout_tests.layout_package import result_summary
4221939df44de1705786c545cd1bf519d47250322dBen Murdochfrom webkitpy.layout_tests.layout_package import test_expectations
4321939df44de1705786c545cd1bf519d47250322dBen Murdochfrom webkitpy.layout_tests.layout_package import test_failures
44f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochfrom webkitpy.layout_tests.layout_package import test_results
45f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochfrom webkitpy.layout_tests.layout_package import test_runner
4621939df44de1705786c545cd1bf519d47250322dBen Murdoch
4721939df44de1705786c545cd1bf519d47250322dBen Murdoch
4821939df44de1705786c545cd1bf519d47250322dBen Murdochdef get_options(args):
4921939df44de1705786c545cd1bf519d47250322dBen Murdoch    print_options = printing.print_options()
5021939df44de1705786c545cd1bf519d47250322dBen Murdoch    option_parser = optparse.OptionParser(option_list=print_options)
5121939df44de1705786c545cd1bf519d47250322dBen Murdoch    return option_parser.parse_args(args)
5221939df44de1705786c545cd1bf519d47250322dBen Murdoch
5321939df44de1705786c545cd1bf519d47250322dBen Murdoch
5421939df44de1705786c545cd1bf519d47250322dBen Murdochclass TestUtilityFunctions(unittest.TestCase):
5521939df44de1705786c545cd1bf519d47250322dBen Murdoch    def test_configure_logging(self):
5621939df44de1705786c545cd1bf519d47250322dBen Murdoch        options, args = get_options([])
5721939df44de1705786c545cd1bf519d47250322dBen Murdoch        stream = array_stream.ArrayStream()
585ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen        handler = printing._configure_logging(stream, options.verbose)
5921939df44de1705786c545cd1bf519d47250322dBen Murdoch        logging.info("this should be logged")
605ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen        self.assertFalse(stream.empty())
6121939df44de1705786c545cd1bf519d47250322dBen Murdoch
6221939df44de1705786c545cd1bf519d47250322dBen Murdoch        stream.reset()
6321939df44de1705786c545cd1bf519d47250322dBen Murdoch        logging.debug("this should not be logged")
645ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen        self.assertTrue(stream.empty())
655ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen
665ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen        printing._restore_logging(handler)
6721939df44de1705786c545cd1bf519d47250322dBen Murdoch
6821939df44de1705786c545cd1bf519d47250322dBen Murdoch        stream.reset()
6921939df44de1705786c545cd1bf519d47250322dBen Murdoch        options, args = get_options(['--verbose'])
705ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen        handler = printing._configure_logging(stream, options.verbose)
7121939df44de1705786c545cd1bf519d47250322dBen Murdoch        logging.debug("this should be logged")
725ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen        self.assertFalse(stream.empty())
735ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen        printing._restore_logging(handler)
7421939df44de1705786c545cd1bf519d47250322dBen Murdoch
7521939df44de1705786c545cd1bf519d47250322dBen Murdoch    def test_print_options(self):
7621939df44de1705786c545cd1bf519d47250322dBen Murdoch        options, args = get_options([])
7721939df44de1705786c545cd1bf519d47250322dBen Murdoch        self.assertTrue(options is not None)
7821939df44de1705786c545cd1bf519d47250322dBen Murdoch
796c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    def test_parse_print_options(self):
804576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang        def test_switches(args, expected_switches_str,
814576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang                          verbose=False, child_processes=1,
824576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang                          is_fully_parallel=False):
836c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen            options, args = get_options(args)
846c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen            if expected_switches_str:
856c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen                expected_switches = set(expected_switches_str.split(','))
866c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen            else:
876c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen                expected_switches = set()
886c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen            switches = printing.parse_print_options(options.print_options,
896c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen                                                    verbose,
906c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen                                                    child_processes,
916c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen                                                    is_fully_parallel)
926c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen            self.assertEqual(expected_switches, switches)
936c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
946c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        # test that we default to the default set of switches
954576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang        test_switches([], printing.PRINT_DEFAULT)
966c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
976c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        # test that verbose defaults to everything
984576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang        test_switches([], printing.PRINT_EVERYTHING, verbose=True)
996c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
1006c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        # test that --print default does what it's supposed to
1014576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang        test_switches(['--print', 'default'], printing.PRINT_DEFAULT)
1026c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
1036c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        # test that --print nothing does what it's supposed to
1044576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang        test_switches(['--print', 'nothing'], None)
1056c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
1066c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        # test that --print everything does what it's supposed to
1074576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang        test_switches(['--print', 'everything'], printing.PRINT_EVERYTHING)
1086c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
1096c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        # this tests that '--print X' overrides '--verbose'
1104576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang        test_switches(['--print', 'actual'], 'actual', verbose=True)
1114576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang
1126c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
11321939df44de1705786c545cd1bf519d47250322dBen Murdoch
11421939df44de1705786c545cd1bf519d47250322dBen Murdochclass  Testprinter(unittest.TestCase):
11521939df44de1705786c545cd1bf519d47250322dBen Murdoch    def get_printer(self, args=None, single_threaded=False,
11621939df44de1705786c545cd1bf519d47250322dBen Murdoch                   is_fully_parallel=False):
117ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch        args = args or []
11821939df44de1705786c545cd1bf519d47250322dBen Murdoch        printing_options = printing.print_options()
11921939df44de1705786c545cd1bf519d47250322dBen Murdoch        option_parser = optparse.OptionParser(option_list=printing_options)
12021939df44de1705786c545cd1bf519d47250322dBen Murdoch        options, args = option_parser.parse_args(args)
12121939df44de1705786c545cd1bf519d47250322dBen Murdoch        self._port = port.get('test', options)
12221939df44de1705786c545cd1bf519d47250322dBen Murdoch        nproc = 2
12321939df44de1705786c545cd1bf519d47250322dBen Murdoch        if single_threaded:
12421939df44de1705786c545cd1bf519d47250322dBen Murdoch            nproc = 1
12521939df44de1705786c545cd1bf519d47250322dBen Murdoch
12621939df44de1705786c545cd1bf519d47250322dBen Murdoch        regular_output = array_stream.ArrayStream()
12721939df44de1705786c545cd1bf519d47250322dBen Murdoch        buildbot_output = array_stream.ArrayStream()
12821939df44de1705786c545cd1bf519d47250322dBen Murdoch        printer = printing.Printer(self._port, options, regular_output,
12921939df44de1705786c545cd1bf519d47250322dBen Murdoch                                   buildbot_output, single_threaded,
13021939df44de1705786c545cd1bf519d47250322dBen Murdoch                                   is_fully_parallel)
13121939df44de1705786c545cd1bf519d47250322dBen Murdoch        return printer, regular_output, buildbot_output
13221939df44de1705786c545cd1bf519d47250322dBen Murdoch
133e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block    def get_result(self, test, result_type=test_expectations.PASS, run_time=0):
134e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        failures = []
135e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        if result_type == test_expectations.TIMEOUT:
136e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block            failures = [test_failures.FailureTimeout()]
137e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        elif result_type == test_expectations.CRASH:
138e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block            failures = [test_failures.FailureCrash()]
139ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch        path = self._port._filesystem.join(self._port.layout_tests_dir(), test)
140cad810f21b803229eb11403f9209855525a25d57Steve Block        return test_results.TestResult(path, failures=failures, test_run_time=run_time)
141e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block
142e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block    def get_result_summary(self, tests, expectations_str):
143ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch        test_paths = [self._port._filesystem.join(self._port.layout_tests_dir(), test) for
144e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block                      test in tests]
145e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        expectations = test_expectations.TestExpectations(
146e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block            self._port, test_paths, expectations_str,
1472fc2651226baac27029e38c9d6ef883fa32084dbSteve Block            self._port.test_configuration(),
148bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen            is_lint_mode=False)
149e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block
150f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        rs = result_summary.ResultSummary(expectations, test_paths)
151e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        return test_paths, rs, expectations
152e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block
15321939df44de1705786c545cd1bf519d47250322dBen Murdoch    def test_help_printer(self):
15421939df44de1705786c545cd1bf519d47250322dBen Murdoch        # Here and below we'll call the "regular" printer err and the
15521939df44de1705786c545cd1bf519d47250322dBen Murdoch        # buildbot printer out; this corresponds to how things run on the
15621939df44de1705786c545cd1bf519d47250322dBen Murdoch        # bots with stderr and stdout.
15721939df44de1705786c545cd1bf519d47250322dBen Murdoch        printer, err, out = self.get_printer()
15821939df44de1705786c545cd1bf519d47250322dBen Murdoch
15921939df44de1705786c545cd1bf519d47250322dBen Murdoch        # This routine should print something to stdout. testing what it is
16021939df44de1705786c545cd1bf519d47250322dBen Murdoch        # is kind of pointless.
16121939df44de1705786c545cd1bf519d47250322dBen Murdoch        printer.help_printing()
16221939df44de1705786c545cd1bf519d47250322dBen Murdoch        self.assertFalse(err.empty())
16321939df44de1705786c545cd1bf519d47250322dBen Murdoch        self.assertTrue(out.empty())
16421939df44de1705786c545cd1bf519d47250322dBen Murdoch
16521939df44de1705786c545cd1bf519d47250322dBen Murdoch    def do_switch_tests(self, method_name, switch, to_buildbot,
16621939df44de1705786c545cd1bf519d47250322dBen Murdoch                        message='hello', exp_err=None, exp_bot=None):
16721939df44de1705786c545cd1bf519d47250322dBen Murdoch        def do_helper(method_name, switch, message, exp_err, exp_bot):
16821939df44de1705786c545cd1bf519d47250322dBen Murdoch            printer, err, bot = self.get_printer(['--print', switch])
16921939df44de1705786c545cd1bf519d47250322dBen Murdoch            getattr(printer, method_name)(message)
17021939df44de1705786c545cd1bf519d47250322dBen Murdoch            self.assertEqual(err.get(), exp_err)
17121939df44de1705786c545cd1bf519d47250322dBen Murdoch            self.assertEqual(bot.get(), exp_bot)
17221939df44de1705786c545cd1bf519d47250322dBen Murdoch
17321939df44de1705786c545cd1bf519d47250322dBen Murdoch        if to_buildbot:
17421939df44de1705786c545cd1bf519d47250322dBen Murdoch            if exp_err is None:
17521939df44de1705786c545cd1bf519d47250322dBen Murdoch                exp_err = []
17621939df44de1705786c545cd1bf519d47250322dBen Murdoch            if exp_bot is None:
17721939df44de1705786c545cd1bf519d47250322dBen Murdoch                exp_bot = [message + "\n"]
17821939df44de1705786c545cd1bf519d47250322dBen Murdoch        else:
17921939df44de1705786c545cd1bf519d47250322dBen Murdoch            if exp_err is None:
1806c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen                exp_err = [message + "\n"]
18121939df44de1705786c545cd1bf519d47250322dBen Murdoch            if exp_bot is None:
18221939df44de1705786c545cd1bf519d47250322dBen Murdoch                exp_bot = []
18321939df44de1705786c545cd1bf519d47250322dBen Murdoch        do_helper(method_name, 'nothing', 'hello', [], [])
18421939df44de1705786c545cd1bf519d47250322dBen Murdoch        do_helper(method_name, switch, 'hello', exp_err, exp_bot)
18521939df44de1705786c545cd1bf519d47250322dBen Murdoch        do_helper(method_name, 'everything', 'hello', exp_err, exp_bot)
18621939df44de1705786c545cd1bf519d47250322dBen Murdoch
1875ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    def test_configure_and_cleanup(self):
1885ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen        # This test verifies that calling cleanup repeatedly and deleting
1895ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen        # the object is safe.
1905ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen        printer, err, out = self.get_printer(['--print', 'everything'])
1915ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen        printer.cleanup()
1925ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen        printer.cleanup()
1935ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen        printer = None
1945ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen
19521939df44de1705786c545cd1bf519d47250322dBen Murdoch    def test_print_actual(self):
19621939df44de1705786c545cd1bf519d47250322dBen Murdoch        # Actual results need to be logged to the buildbot's stream.
19721939df44de1705786c545cd1bf519d47250322dBen Murdoch        self.do_switch_tests('print_actual', 'actual', to_buildbot=True)
19821939df44de1705786c545cd1bf519d47250322dBen Murdoch
19921939df44de1705786c545cd1bf519d47250322dBen Murdoch    def test_print_actual_buildbot(self):
20021939df44de1705786c545cd1bf519d47250322dBen Murdoch        # FIXME: Test that the format of the actual results matches what the
20121939df44de1705786c545cd1bf519d47250322dBen Murdoch        # buildbot is expecting.
20221939df44de1705786c545cd1bf519d47250322dBen Murdoch        pass
20321939df44de1705786c545cd1bf519d47250322dBen Murdoch
20421939df44de1705786c545cd1bf519d47250322dBen Murdoch    def test_print_config(self):
20521939df44de1705786c545cd1bf519d47250322dBen Murdoch        self.do_switch_tests('print_config', 'config', to_buildbot=False)
20621939df44de1705786c545cd1bf519d47250322dBen Murdoch
20721939df44de1705786c545cd1bf519d47250322dBen Murdoch    def test_print_expected(self):
20821939df44de1705786c545cd1bf519d47250322dBen Murdoch        self.do_switch_tests('print_expected', 'expected', to_buildbot=False)
20921939df44de1705786c545cd1bf519d47250322dBen Murdoch
21021939df44de1705786c545cd1bf519d47250322dBen Murdoch    def test_print_timing(self):
21121939df44de1705786c545cd1bf519d47250322dBen Murdoch        self.do_switch_tests('print_timing', 'timing', to_buildbot=False)
21221939df44de1705786c545cd1bf519d47250322dBen Murdoch
21321939df44de1705786c545cd1bf519d47250322dBen Murdoch    def test_print_update(self):
21421939df44de1705786c545cd1bf519d47250322dBen Murdoch        # Note that there shouldn't be a carriage return here; updates()
21521939df44de1705786c545cd1bf519d47250322dBen Murdoch        # are meant to be overwritten.
21621939df44de1705786c545cd1bf519d47250322dBen Murdoch        self.do_switch_tests('print_update', 'updates', to_buildbot=False,
21721939df44de1705786c545cd1bf519d47250322dBen Murdoch                             message='hello', exp_err=['hello'])
21821939df44de1705786c545cd1bf519d47250322dBen Murdoch
21921939df44de1705786c545cd1bf519d47250322dBen Murdoch    def test_print_one_line_summary(self):
22021939df44de1705786c545cd1bf519d47250322dBen Murdoch        printer, err, out = self.get_printer(['--print', 'nothing'])
2215af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke        printer.print_one_line_summary(1, 1, 0)
22221939df44de1705786c545cd1bf519d47250322dBen Murdoch        self.assertTrue(err.empty())
22321939df44de1705786c545cd1bf519d47250322dBen Murdoch
22421939df44de1705786c545cd1bf519d47250322dBen Murdoch        printer, err, out = self.get_printer(['--print', 'one-line-summary'])
2255af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke        printer.print_one_line_summary(1, 1, 0)
2266c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        self.assertEquals(err.get(), ["All 1 tests ran as expected.\n", "\n"])
22721939df44de1705786c545cd1bf519d47250322dBen Murdoch
22821939df44de1705786c545cd1bf519d47250322dBen Murdoch        printer, err, out = self.get_printer(['--print', 'everything'])
2295af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke        printer.print_one_line_summary(1, 1, 0)
2306c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        self.assertEquals(err.get(), ["All 1 tests ran as expected.\n", "\n"])
23121939df44de1705786c545cd1bf519d47250322dBen Murdoch
23221939df44de1705786c545cd1bf519d47250322dBen Murdoch        err.reset()
2335af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke        printer.print_one_line_summary(2, 1, 1)
23421939df44de1705786c545cd1bf519d47250322dBen Murdoch        self.assertEquals(err.get(),
2356c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen                          ["1 test ran as expected, 1 didn't:\n", "\n"])
23621939df44de1705786c545cd1bf519d47250322dBen Murdoch
23721939df44de1705786c545cd1bf519d47250322dBen Murdoch        err.reset()
2385af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke        printer.print_one_line_summary(3, 2, 1)
23921939df44de1705786c545cd1bf519d47250322dBen Murdoch        self.assertEquals(err.get(),
2406c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen                          ["2 tests ran as expected, 1 didn't:\n", "\n"])
24121939df44de1705786c545cd1bf519d47250322dBen Murdoch
2425af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke        err.reset()
2435af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke        printer.print_one_line_summary(3, 2, 0)
2445af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke        self.assertEquals(err.get(),
2455af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke                          ['\n', "2 tests ran as expected (1 didn't run).\n",
2465af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke                           '\n'])
2475af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke
2485af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke
24921939df44de1705786c545cd1bf519d47250322dBen Murdoch    def test_print_test_result(self):
250e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        # Note here that we don't use meaningful exp_str and got_str values;
251e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        # the actual contents of the string are treated opaquely by
252e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        # print_test_result() when tracing, and usually we don't want
253e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        # to test what exactly is printed, just that something
254e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        # was printed (or that nothing was printed).
255e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        #
256e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        # FIXME: this is actually some goofy layering; it would be nice
257e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        # we could refactor it so that the args weren't redundant. Maybe
258e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        # the TestResult should contain what was expected, and the
259e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        # strings could be derived from the TestResult?
26021939df44de1705786c545cd1bf519d47250322dBen Murdoch        printer, err, out = self.get_printer(['--print', 'nothing'])
261e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        result = self.get_result('passes/image.html')
26221939df44de1705786c545cd1bf519d47250322dBen Murdoch        printer.print_test_result(result, expected=False, exp_str='',
26321939df44de1705786c545cd1bf519d47250322dBen Murdoch                                  got_str='')
26421939df44de1705786c545cd1bf519d47250322dBen Murdoch        self.assertTrue(err.empty())
26521939df44de1705786c545cd1bf519d47250322dBen Murdoch
26621939df44de1705786c545cd1bf519d47250322dBen Murdoch        printer, err, out = self.get_printer(['--print', 'unexpected'])
26721939df44de1705786c545cd1bf519d47250322dBen Murdoch        printer.print_test_result(result, expected=True, exp_str='',
26821939df44de1705786c545cd1bf519d47250322dBen Murdoch                                  got_str='')
26921939df44de1705786c545cd1bf519d47250322dBen Murdoch        self.assertTrue(err.empty())
27021939df44de1705786c545cd1bf519d47250322dBen Murdoch        printer.print_test_result(result, expected=False, exp_str='',
27121939df44de1705786c545cd1bf519d47250322dBen Murdoch                                  got_str='')
27221939df44de1705786c545cd1bf519d47250322dBen Murdoch        self.assertEquals(err.get(),
273e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block                          ['  passes/image.html -> unexpected pass\n'])
27421939df44de1705786c545cd1bf519d47250322dBen Murdoch
27521939df44de1705786c545cd1bf519d47250322dBen Murdoch        printer, err, out = self.get_printer(['--print', 'everything'])
27621939df44de1705786c545cd1bf519d47250322dBen Murdoch        printer.print_test_result(result, expected=True, exp_str='',
27721939df44de1705786c545cd1bf519d47250322dBen Murdoch                                  got_str='')
27821939df44de1705786c545cd1bf519d47250322dBen Murdoch        self.assertTrue(err.empty())
27921939df44de1705786c545cd1bf519d47250322dBen Murdoch
28021939df44de1705786c545cd1bf519d47250322dBen Murdoch        printer.print_test_result(result, expected=False, exp_str='',
28121939df44de1705786c545cd1bf519d47250322dBen Murdoch                                  got_str='')
28221939df44de1705786c545cd1bf519d47250322dBen Murdoch        self.assertEquals(err.get(),
283e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block                          ['  passes/image.html -> unexpected pass\n'])
28421939df44de1705786c545cd1bf519d47250322dBen Murdoch
28521939df44de1705786c545cd1bf519d47250322dBen Murdoch        printer, err, out = self.get_printer(['--print', 'nothing'])
28621939df44de1705786c545cd1bf519d47250322dBen Murdoch        printer.print_test_result(result, expected=False, exp_str='',
28721939df44de1705786c545cd1bf519d47250322dBen Murdoch                                  got_str='')
28821939df44de1705786c545cd1bf519d47250322dBen Murdoch        self.assertTrue(err.empty())
28921939df44de1705786c545cd1bf519d47250322dBen Murdoch
29021939df44de1705786c545cd1bf519d47250322dBen Murdoch        printer, err, out = self.get_printer(['--print',
291e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block                                              'trace-unexpected'])
29221939df44de1705786c545cd1bf519d47250322dBen Murdoch        printer.print_test_result(result, expected=True, exp_str='',
29321939df44de1705786c545cd1bf519d47250322dBen Murdoch                                  got_str='')
29421939df44de1705786c545cd1bf519d47250322dBen Murdoch        self.assertTrue(err.empty())
29521939df44de1705786c545cd1bf519d47250322dBen Murdoch
296e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        printer, err, out = self.get_printer(['--print',
297e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block                                              'trace-unexpected'])
298e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        printer.print_test_result(result, expected=False, exp_str='',
299e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block                                  got_str='')
300e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        self.assertFalse(err.empty())
301e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block
302e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        printer, err, out = self.get_printer(['--print',
303e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block                                              'trace-unexpected'])
304e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        result = self.get_result("passes/text.html")
305e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        printer.print_test_result(result, expected=False, exp_str='',
306e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block                                  got_str='')
307e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        self.assertFalse(err.empty())
308e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block
30921939df44de1705786c545cd1bf519d47250322dBen Murdoch        err.reset()
31021939df44de1705786c545cd1bf519d47250322dBen Murdoch        printer.print_test_result(result, expected=False, exp_str='',
31121939df44de1705786c545cd1bf519d47250322dBen Murdoch                                  got_str='')
31221939df44de1705786c545cd1bf519d47250322dBen Murdoch        self.assertFalse(err.empty())
31321939df44de1705786c545cd1bf519d47250322dBen Murdoch
31421939df44de1705786c545cd1bf519d47250322dBen Murdoch        printer, err, out = self.get_printer(['--print', 'trace-everything'])
315bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen        result = self.get_result('passes/image.html')
316bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen        printer.print_test_result(result, expected=True, exp_str='',
317bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen                                  got_str='')
318bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen        result = self.get_result('failures/expected/missing_text.html')
319bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen        printer.print_test_result(result, expected=True, exp_str='',
320bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen                                  got_str='')
321bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen        result = self.get_result('failures/expected/missing_check.html')
322bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen        printer.print_test_result(result, expected=True, exp_str='',
323bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen                                  got_str='')
324bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen        result = self.get_result('failures/expected/missing_image.html')
32521939df44de1705786c545cd1bf519d47250322dBen Murdoch        printer.print_test_result(result, expected=True, exp_str='',
32621939df44de1705786c545cd1bf519d47250322dBen Murdoch                                  got_str='')
32721939df44de1705786c545cd1bf519d47250322dBen Murdoch        self.assertFalse(err.empty())
32821939df44de1705786c545cd1bf519d47250322dBen Murdoch
32921939df44de1705786c545cd1bf519d47250322dBen Murdoch        err.reset()
33021939df44de1705786c545cd1bf519d47250322dBen Murdoch        printer.print_test_result(result, expected=False, exp_str='',
33121939df44de1705786c545cd1bf519d47250322dBen Murdoch                                  got_str='')
33221939df44de1705786c545cd1bf519d47250322dBen Murdoch
33321939df44de1705786c545cd1bf519d47250322dBen Murdoch    def test_print_progress(self):
33421939df44de1705786c545cd1bf519d47250322dBen Murdoch        expectations = ''
33521939df44de1705786c545cd1bf519d47250322dBen Murdoch
33621939df44de1705786c545cd1bf519d47250322dBen Murdoch        # test that we print nothing
33721939df44de1705786c545cd1bf519d47250322dBen Murdoch        printer, err, out = self.get_printer(['--print', 'nothing'])
338e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        tests = ['passes/text.html', 'failures/expected/timeout.html',
339e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block                 'failures/expected/crash.html']
340e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        paths, rs, exp = self.get_result_summary(tests, expectations)
34121939df44de1705786c545cd1bf519d47250322dBen Murdoch
342e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        printer.print_progress(rs, False, paths)
34321939df44de1705786c545cd1bf519d47250322dBen Murdoch        self.assertTrue(out.empty())
34421939df44de1705786c545cd1bf519d47250322dBen Murdoch        self.assertTrue(err.empty())
34521939df44de1705786c545cd1bf519d47250322dBen Murdoch
346e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        printer.print_progress(rs, True, paths)
34721939df44de1705786c545cd1bf519d47250322dBen Murdoch        self.assertTrue(out.empty())
34821939df44de1705786c545cd1bf519d47250322dBen Murdoch        self.assertTrue(err.empty())
34921939df44de1705786c545cd1bf519d47250322dBen Murdoch
35021939df44de1705786c545cd1bf519d47250322dBen Murdoch        # test regular functionality
35121939df44de1705786c545cd1bf519d47250322dBen Murdoch        printer, err, out = self.get_printer(['--print',
35221939df44de1705786c545cd1bf519d47250322dBen Murdoch                                              'one-line-progress'])
353e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        printer.print_progress(rs, False, paths)
35421939df44de1705786c545cd1bf519d47250322dBen Murdoch        self.assertTrue(out.empty())
35521939df44de1705786c545cd1bf519d47250322dBen Murdoch        self.assertFalse(err.empty())
35621939df44de1705786c545cd1bf519d47250322dBen Murdoch
35721939df44de1705786c545cd1bf519d47250322dBen Murdoch        err.reset()
35821939df44de1705786c545cd1bf519d47250322dBen Murdoch        out.reset()
359e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        printer.print_progress(rs, True, paths)
36021939df44de1705786c545cd1bf519d47250322dBen Murdoch        self.assertFalse(err.empty())
36121939df44de1705786c545cd1bf519d47250322dBen Murdoch        self.assertTrue(out.empty())
36221939df44de1705786c545cd1bf519d47250322dBen Murdoch
36321939df44de1705786c545cd1bf519d47250322dBen Murdoch    def test_print_progress__detailed(self):
364e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        tests = ['passes/text.html', 'failures/expected/timeout.html',
365e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block                 'failures/expected/crash.html']
3662fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        expectations = 'BUGX : failures/expected/timeout.html = TIMEOUT'
36721939df44de1705786c545cd1bf519d47250322dBen Murdoch
36821939df44de1705786c545cd1bf519d47250322dBen Murdoch        # first, test that it is disabled properly
36921939df44de1705786c545cd1bf519d47250322dBen Murdoch        # should still print one-line-progress
37021939df44de1705786c545cd1bf519d47250322dBen Murdoch        printer, err, out = self.get_printer(
37121939df44de1705786c545cd1bf519d47250322dBen Murdoch            ['--print', 'detailed-progress'], single_threaded=False)
372e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        paths, rs, exp = self.get_result_summary(tests, expectations)
373e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        printer.print_progress(rs, False, paths)
37421939df44de1705786c545cd1bf519d47250322dBen Murdoch        self.assertFalse(err.empty())
37521939df44de1705786c545cd1bf519d47250322dBen Murdoch        self.assertTrue(out.empty())
37621939df44de1705786c545cd1bf519d47250322dBen Murdoch
37721939df44de1705786c545cd1bf519d47250322dBen Murdoch        # now test the enabled paths
37821939df44de1705786c545cd1bf519d47250322dBen Murdoch        printer, err, out = self.get_printer(
37921939df44de1705786c545cd1bf519d47250322dBen Murdoch            ['--print', 'detailed-progress'], single_threaded=True)
380e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        paths, rs, exp = self.get_result_summary(tests, expectations)
381e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        printer.print_progress(rs, False, paths)
38221939df44de1705786c545cd1bf519d47250322dBen Murdoch        self.assertFalse(err.empty())
38321939df44de1705786c545cd1bf519d47250322dBen Murdoch        self.assertTrue(out.empty())
38421939df44de1705786c545cd1bf519d47250322dBen Murdoch
38521939df44de1705786c545cd1bf519d47250322dBen Murdoch        err.reset()
38621939df44de1705786c545cd1bf519d47250322dBen Murdoch        out.reset()
387e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        printer.print_progress(rs, True, paths)
38821939df44de1705786c545cd1bf519d47250322dBen Murdoch        self.assertFalse(err.empty())
38921939df44de1705786c545cd1bf519d47250322dBen Murdoch        self.assertTrue(out.empty())
39021939df44de1705786c545cd1bf519d47250322dBen Murdoch
391e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        rs.add(self.get_result('passes/text.html', test_expectations.TIMEOUT), False)
392e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        rs.add(self.get_result('failures/expected/timeout.html'), True)
393e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        rs.add(self.get_result('failures/expected/crash.html', test_expectations.CRASH), True)
39421939df44de1705786c545cd1bf519d47250322dBen Murdoch        err.reset()
39521939df44de1705786c545cd1bf519d47250322dBen Murdoch        out.reset()
396e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        printer.print_progress(rs, False, paths)
39721939df44de1705786c545cd1bf519d47250322dBen Murdoch        self.assertFalse(err.empty())
39821939df44de1705786c545cd1bf519d47250322dBen Murdoch        self.assertTrue(out.empty())
39921939df44de1705786c545cd1bf519d47250322dBen Murdoch
40021939df44de1705786c545cd1bf519d47250322dBen Murdoch        # We only clear the meter when retrying w/ detailed-progress.
40121939df44de1705786c545cd1bf519d47250322dBen Murdoch        err.reset()
40221939df44de1705786c545cd1bf519d47250322dBen Murdoch        out.reset()
403e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        printer.print_progress(rs, True, paths)
404e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        self.assertFalse(err.empty())
40521939df44de1705786c545cd1bf519d47250322dBen Murdoch        self.assertTrue(out.empty())
40621939df44de1705786c545cd1bf519d47250322dBen Murdoch
40721939df44de1705786c545cd1bf519d47250322dBen Murdoch        printer, err, out = self.get_printer(
40821939df44de1705786c545cd1bf519d47250322dBen Murdoch            ['--print', 'detailed-progress,unexpected'], single_threaded=True)
409e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        paths, rs, exp = self.get_result_summary(tests, expectations)
410e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        printer.print_progress(rs, False, paths)
41121939df44de1705786c545cd1bf519d47250322dBen Murdoch        self.assertFalse(err.empty())
41221939df44de1705786c545cd1bf519d47250322dBen Murdoch        self.assertTrue(out.empty())
41321939df44de1705786c545cd1bf519d47250322dBen Murdoch
41421939df44de1705786c545cd1bf519d47250322dBen Murdoch        err.reset()
41521939df44de1705786c545cd1bf519d47250322dBen Murdoch        out.reset()
416e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        printer.print_progress(rs, True, paths)
41721939df44de1705786c545cd1bf519d47250322dBen Murdoch        self.assertFalse(err.empty())
41821939df44de1705786c545cd1bf519d47250322dBen Murdoch        self.assertTrue(out.empty())
41921939df44de1705786c545cd1bf519d47250322dBen Murdoch
420e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        rs.add(self.get_result('passes/text.html', test_expectations.TIMEOUT), False)
421e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        rs.add(self.get_result('failures/expected/timeout.html'), True)
422e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        rs.add(self.get_result('failures/expected/crash.html', test_expectations.CRASH), True)
42321939df44de1705786c545cd1bf519d47250322dBen Murdoch        err.reset()
42421939df44de1705786c545cd1bf519d47250322dBen Murdoch        out.reset()
425e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        printer.print_progress(rs, False, paths)
42621939df44de1705786c545cd1bf519d47250322dBen Murdoch        self.assertFalse(err.empty())
42721939df44de1705786c545cd1bf519d47250322dBen Murdoch        self.assertTrue(out.empty())
42821939df44de1705786c545cd1bf519d47250322dBen Murdoch
42921939df44de1705786c545cd1bf519d47250322dBen Murdoch        # We only clear the meter when retrying w/ detailed-progress.
43021939df44de1705786c545cd1bf519d47250322dBen Murdoch        err.reset()
43121939df44de1705786c545cd1bf519d47250322dBen Murdoch        out.reset()
432e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        printer.print_progress(rs, True, paths)
433e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        self.assertFalse(err.empty())
43421939df44de1705786c545cd1bf519d47250322dBen Murdoch        self.assertTrue(out.empty())
43521939df44de1705786c545cd1bf519d47250322dBen Murdoch
4365ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    def test_write_nothing(self):
43721939df44de1705786c545cd1bf519d47250322dBen Murdoch        printer, err, out = self.get_printer(['--print', 'nothing'])
43821939df44de1705786c545cd1bf519d47250322dBen Murdoch        printer.write("foo")
43921939df44de1705786c545cd1bf519d47250322dBen Murdoch        self.assertTrue(err.empty())
44021939df44de1705786c545cd1bf519d47250322dBen Murdoch
4415ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    def test_write_misc(self):
44221939df44de1705786c545cd1bf519d47250322dBen Murdoch        printer, err, out = self.get_printer(['--print', 'misc'])
44321939df44de1705786c545cd1bf519d47250322dBen Murdoch        printer.write("foo")
44421939df44de1705786c545cd1bf519d47250322dBen Murdoch        self.assertFalse(err.empty())
44521939df44de1705786c545cd1bf519d47250322dBen Murdoch        err.reset()
44621939df44de1705786c545cd1bf519d47250322dBen Murdoch        printer.write("foo", "config")
44721939df44de1705786c545cd1bf519d47250322dBen Murdoch        self.assertTrue(err.empty())
44821939df44de1705786c545cd1bf519d47250322dBen Murdoch
4495ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    def test_write_everything(self):
45021939df44de1705786c545cd1bf519d47250322dBen Murdoch        printer, err, out = self.get_printer(['--print', 'everything'])
45121939df44de1705786c545cd1bf519d47250322dBen Murdoch        printer.write("foo")
45221939df44de1705786c545cd1bf519d47250322dBen Murdoch        self.assertFalse(err.empty())
45321939df44de1705786c545cd1bf519d47250322dBen Murdoch        err.reset()
45421939df44de1705786c545cd1bf519d47250322dBen Murdoch        printer.write("foo", "config")
45521939df44de1705786c545cd1bf519d47250322dBen Murdoch        self.assertFalse(err.empty())
45621939df44de1705786c545cd1bf519d47250322dBen Murdoch
4575ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    def test_write_verbose(self):
458e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        printer, err, out = self.get_printer(['--verbose'])
459e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        printer.write("foo")
4605ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen        self.assertTrue(not err.empty() and "foo" in err.get()[0])
461e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        self.assertTrue(out.empty())
462e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block
46321939df44de1705786c545cd1bf519d47250322dBen Murdoch    def test_print_unexpected_results(self):
46421939df44de1705786c545cd1bf519d47250322dBen Murdoch        # This routine is the only one that prints stuff that the bots
46521939df44de1705786c545cd1bf519d47250322dBen Murdoch        # care about.
466e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        #
467e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        # FIXME: there's some weird layering going on here. It seems
468e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        # like we shouldn't be both using an expectations string and
469e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        # having to specify whether or not the result was expected.
470e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        # This whole set of tests should probably be rewritten.
471e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        #
472e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        # FIXME: Plus, the fact that we're having to call into
473e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        # run_webkit_tests is clearly a layering inversion.
47421939df44de1705786c545cd1bf519d47250322dBen Murdoch        def get_unexpected_results(expected, passing, flaky):
475e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block            """Return an unexpected results summary matching the input description.
476e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block
477e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block            There are a lot of different combinations of test results that
478e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block            can be tested; this routine produces various combinations based
479e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block            on the values of the input flags.
480e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block
481e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block            Args
482e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block                expected: whether the tests ran as expected
483e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block                passing: whether the tests should all pass
484e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block                flaky: whether the tests should be flaky (if False, they
485e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block                    produce the same results on both runs; if True, they
486e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block                    all pass on the second run).
487e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block
488e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block            """
489e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block            paths, rs, exp = self.get_result_summary(tests, expectations)
49021939df44de1705786c545cd1bf519d47250322dBen Murdoch            if expected:
491e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block                rs.add(self.get_result('passes/text.html', test_expectations.PASS),
49221939df44de1705786c545cd1bf519d47250322dBen Murdoch                       expected)
493e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block                rs.add(self.get_result('failures/expected/timeout.html',
49421939df44de1705786c545cd1bf519d47250322dBen Murdoch                       test_expectations.TIMEOUT), expected)
495e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block                rs.add(self.get_result('failures/expected/crash.html', test_expectations.CRASH),
49621939df44de1705786c545cd1bf519d47250322dBen Murdoch                   expected)
49721939df44de1705786c545cd1bf519d47250322dBen Murdoch            elif passing:
498e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block                rs.add(self.get_result('passes/text.html'), expected)
499e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block                rs.add(self.get_result('failures/expected/timeout.html'), expected)
500e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block                rs.add(self.get_result('failures/expected/crash.html'), expected)
50121939df44de1705786c545cd1bf519d47250322dBen Murdoch            else:
502e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block                rs.add(self.get_result('passes/text.html', test_expectations.TIMEOUT),
50321939df44de1705786c545cd1bf519d47250322dBen Murdoch                       expected)
504e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block                rs.add(self.get_result('failures/expected/timeout.html',
50521939df44de1705786c545cd1bf519d47250322dBen Murdoch                       test_expectations.CRASH), expected)
506e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block                rs.add(self.get_result('failures/expected/crash.html',
50721939df44de1705786c545cd1bf519d47250322dBen Murdoch                                  test_expectations.TIMEOUT),
50821939df44de1705786c545cd1bf519d47250322dBen Murdoch                   expected)
50921939df44de1705786c545cd1bf519d47250322dBen Murdoch            retry = rs
51021939df44de1705786c545cd1bf519d47250322dBen Murdoch            if flaky:
511e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block                paths, retry, exp = self.get_result_summary(tests,
51221939df44de1705786c545cd1bf519d47250322dBen Murdoch                                                expectations)
513e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block                retry.add(self.get_result('passes/text.html'), True)
514e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block                retry.add(self.get_result('failures/expected/timeout.html'), True)
515e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block                retry.add(self.get_result('failures/expected/crash.html'), True)
51681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch            unexpected_results = test_runner.summarize_results(self._port, exp, rs, retry, test_timings={}, only_unexpected=True)
51721939df44de1705786c545cd1bf519d47250322dBen Murdoch            return unexpected_results
51821939df44de1705786c545cd1bf519d47250322dBen Murdoch
519e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        tests = ['passes/text.html', 'failures/expected/timeout.html',
520e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block                 'failures/expected/crash.html']
52121939df44de1705786c545cd1bf519d47250322dBen Murdoch        expectations = ''
52221939df44de1705786c545cd1bf519d47250322dBen Murdoch
52321939df44de1705786c545cd1bf519d47250322dBen Murdoch        printer, err, out = self.get_printer(['--print', 'nothing'])
52421939df44de1705786c545cd1bf519d47250322dBen Murdoch        ur = get_unexpected_results(expected=False, passing=False, flaky=False)
52521939df44de1705786c545cd1bf519d47250322dBen Murdoch        printer.print_unexpected_results(ur)
52621939df44de1705786c545cd1bf519d47250322dBen Murdoch        self.assertTrue(err.empty())
52721939df44de1705786c545cd1bf519d47250322dBen Murdoch        self.assertTrue(out.empty())
52821939df44de1705786c545cd1bf519d47250322dBen Murdoch
52921939df44de1705786c545cd1bf519d47250322dBen Murdoch        printer, err, out = self.get_printer(['--print',
53021939df44de1705786c545cd1bf519d47250322dBen Murdoch                                              'unexpected-results'])
53121939df44de1705786c545cd1bf519d47250322dBen Murdoch
53221939df44de1705786c545cd1bf519d47250322dBen Murdoch        # test everything running as expected
53321939df44de1705786c545cd1bf519d47250322dBen Murdoch        ur = get_unexpected_results(expected=True, passing=False, flaky=False)
53421939df44de1705786c545cd1bf519d47250322dBen Murdoch        printer.print_unexpected_results(ur)
53521939df44de1705786c545cd1bf519d47250322dBen Murdoch        self.assertTrue(err.empty())
53621939df44de1705786c545cd1bf519d47250322dBen Murdoch        self.assertTrue(out.empty())
53721939df44de1705786c545cd1bf519d47250322dBen Murdoch
53821939df44de1705786c545cd1bf519d47250322dBen Murdoch        # test failures
53921939df44de1705786c545cd1bf519d47250322dBen Murdoch        err.reset()
54021939df44de1705786c545cd1bf519d47250322dBen Murdoch        out.reset()
54121939df44de1705786c545cd1bf519d47250322dBen Murdoch        ur = get_unexpected_results(expected=False, passing=False, flaky=False)
54221939df44de1705786c545cd1bf519d47250322dBen Murdoch        printer.print_unexpected_results(ur)
54321939df44de1705786c545cd1bf519d47250322dBen Murdoch        self.assertTrue(err.empty())
54421939df44de1705786c545cd1bf519d47250322dBen Murdoch        self.assertFalse(out.empty())
54521939df44de1705786c545cd1bf519d47250322dBen Murdoch
54621939df44de1705786c545cd1bf519d47250322dBen Murdoch        # test unexpected flaky results
54721939df44de1705786c545cd1bf519d47250322dBen Murdoch        err.reset()
54821939df44de1705786c545cd1bf519d47250322dBen Murdoch        out.reset()
54921939df44de1705786c545cd1bf519d47250322dBen Murdoch        ur = get_unexpected_results(expected=False, passing=True, flaky=False)
55021939df44de1705786c545cd1bf519d47250322dBen Murdoch        printer.print_unexpected_results(ur)
55121939df44de1705786c545cd1bf519d47250322dBen Murdoch        self.assertTrue(err.empty())
55221939df44de1705786c545cd1bf519d47250322dBen Murdoch        self.assertFalse(out.empty())
55321939df44de1705786c545cd1bf519d47250322dBen Murdoch
55421939df44de1705786c545cd1bf519d47250322dBen Murdoch        # test unexpected passes
55521939df44de1705786c545cd1bf519d47250322dBen Murdoch        err.reset()
55621939df44de1705786c545cd1bf519d47250322dBen Murdoch        out.reset()
55721939df44de1705786c545cd1bf519d47250322dBen Murdoch        ur = get_unexpected_results(expected=False, passing=False, flaky=True)
55821939df44de1705786c545cd1bf519d47250322dBen Murdoch        printer.print_unexpected_results(ur)
55921939df44de1705786c545cd1bf519d47250322dBen Murdoch        self.assertTrue(err.empty())
56021939df44de1705786c545cd1bf519d47250322dBen Murdoch        self.assertFalse(out.empty())
56121939df44de1705786c545cd1bf519d47250322dBen Murdoch
56221939df44de1705786c545cd1bf519d47250322dBen Murdoch        err.reset()
56321939df44de1705786c545cd1bf519d47250322dBen Murdoch        out.reset()
56421939df44de1705786c545cd1bf519d47250322dBen Murdoch        printer, err, out = self.get_printer(['--print', 'everything'])
56521939df44de1705786c545cd1bf519d47250322dBen Murdoch        ur = get_unexpected_results(expected=False, passing=False, flaky=False)
56621939df44de1705786c545cd1bf519d47250322dBen Murdoch        printer.print_unexpected_results(ur)
56721939df44de1705786c545cd1bf519d47250322dBen Murdoch        self.assertTrue(err.empty())
56821939df44de1705786c545cd1bf519d47250322dBen Murdoch        self.assertFalse(out.empty())
56921939df44de1705786c545cd1bf519d47250322dBen Murdoch
570e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        expectations = """
5712fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockBUGX : failures/expected/crash.html = CRASH
5722fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockBUGX : failures/expected/timeout.html = TIMEOUT
573e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block"""
574e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        err.reset()
575e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        out.reset()
576e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        ur = get_unexpected_results(expected=False, passing=False, flaky=False)
577e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        printer.print_unexpected_results(ur)
578e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        self.assertTrue(err.empty())
579e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        self.assertFalse(out.empty())
580e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block
581e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        err.reset()
582e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        out.reset()
583e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        ur = get_unexpected_results(expected=False, passing=True, flaky=False)
584e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        printer.print_unexpected_results(ur)
585e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        self.assertTrue(err.empty())
586e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        self.assertFalse(out.empty())
587e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block
588e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        # Test handling of --verbose as well.
589e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        err.reset()
590e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        out.reset()
591e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        printer, err, out = self.get_printer(['--verbose'])
592e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        ur = get_unexpected_results(expected=False, passing=False, flaky=False)
593e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        printer.print_unexpected_results(ur)
594e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        self.assertTrue(err.empty())
595e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        self.assertFalse(out.empty())
596e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block
59721939df44de1705786c545cd1bf519d47250322dBen Murdoch    def test_print_unexpected_results_buildbot(self):
59821939df44de1705786c545cd1bf519d47250322dBen Murdoch        # FIXME: Test that print_unexpected_results() produces the printer the
59921939df44de1705786c545cd1bf519d47250322dBen Murdoch        # buildbot is expecting.
60021939df44de1705786c545cd1bf519d47250322dBen Murdoch        pass
60121939df44de1705786c545cd1bf519d47250322dBen Murdoch
60221939df44de1705786c545cd1bf519d47250322dBen Murdochif __name__ == '__main__':
60321939df44de1705786c545cd1bf519d47250322dBen Murdoch    unittest.main()
604