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