Home | History | Annotate | Download | only in views
      1 # Copyright (C) 2012 Google Inc. All rights reserved.
      2 #
      3 # Redistribution and use in source and binary forms, with or without
      4 # modification, are permitted provided that the following conditions are
      5 # met:
      6 #
      7 #     * Redistributions of source code must retain the above copyright
      8 # notice, this list of conditions and the following disclaimer.
      9 #     * Redistributions in binary form must reproduce the above
     10 # copyright notice, this list of conditions and the following disclaimer
     11 # in the documentation and/or other materials provided with the
     12 # distribution.
     13 #     * Neither the name of Google Inc. nor the names of its
     14 # contributors may be used to endorse or promote products derived from
     15 # this software without specific prior written permission.
     16 #
     17 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     18 # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     19 # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
     20 # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
     21 # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     22 # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     23 # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     24 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     25 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     26 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     27 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     28 
     29 import StringIO
     30 import unittest
     31 
     32 from webkitpy.common.host_mock import MockHost
     33 
     34 from webkitpy.layout_tests.models import test_expectations
     35 from webkitpy.layout_tests.models import test_failures
     36 from webkitpy.layout_tests.models import test_run_results
     37 from webkitpy.layout_tests.models import test_run_results
     38 from webkitpy.layout_tests.models import test_run_results_unittest
     39 from webkitpy.layout_tests.views import buildbot_results
     40 
     41 
     42 class BuildBotPrinterTests(unittest.TestCase):
     43     def assertEmpty(self, stream):
     44         self.assertFalse(stream.getvalue())
     45 
     46     def assertNotEmpty(self, stream):
     47         self.assertTrue(stream.getvalue())
     48 
     49     def get_printer(self):
     50         stream = StringIO.StringIO()
     51         printer = buildbot_results.BuildBotPrinter(stream, debug_logging=True)
     52         return printer, stream
     53 
     54     def test_print_unexpected_results(self):
     55         port = MockHost().port_factory.get('test')
     56         printer, out = self.get_printer()
     57 
     58         # test everything running as expected
     59         DASHED_LINE = "-" * 78 + "\n"
     60         summary = test_run_results_unittest.summarized_results(port, expected=True, passing=False, flaky=False)
     61         printer.print_unexpected_results(summary)
     62         self.assertEqual(out.getvalue(), DASHED_LINE)
     63 
     64         # test failures
     65         printer, out = self.get_printer()
     66         summary = test_run_results_unittest.summarized_results(port, expected=False, passing=False, flaky=False)
     67         printer.print_unexpected_results(summary)
     68         self.assertNotEmpty(out)
     69 
     70         # test unexpected flaky
     71         printer, out = self.get_printer()
     72         summary = test_run_results_unittest.summarized_results(port, expected=False, passing=False, flaky=True)
     73         printer.print_unexpected_results(summary)
     74         self.assertNotEmpty(out)
     75 
     76         printer, out = self.get_printer()
     77         summary = test_run_results_unittest.summarized_results(port, expected=False, passing=False, flaky=False)
     78         printer.print_unexpected_results(summary)
     79         self.assertNotEmpty(out)
     80 
     81         printer, out = self.get_printer()
     82         summary = test_run_results_unittest.summarized_results(port, expected=False, passing=False, flaky=False)
     83         printer.print_unexpected_results(summary)
     84         self.assertNotEmpty(out)
     85 
     86         printer, out = self.get_printer()
     87         summary = test_run_results_unittest.summarized_results(port, expected=False, passing=True, flaky=False)
     88         printer.print_unexpected_results(summary)
     89         output = out.getvalue()
     90         self.assertTrue(output)
     91         self.assertTrue(output.find('Skip') == -1)
     92 
     93     def test_print_results(self):
     94         port = MockHost().port_factory.get('test')
     95         printer, out = self.get_printer()
     96         initial_results = test_run_results_unittest.run_results(port)
     97         full_summary = test_run_results_unittest.summarized_results(port, expected=False, passing=True, flaky=False)
     98         failing_summary = test_run_results_unittest.summarized_results(port, expected=False, passing=True, flaky=False, only_include_failing=True)
     99         details = test_run_results.RunDetails(failing_summary['num_regressions'], full_summary, failing_summary, initial_results, None)
    100         printer.print_results(details)
    101         self.assertTrue(out.getvalue().find('but passed') != -1)
    102