1 # Copyright (C) 2012 Google Inc. All rights reserved.
3 # Redistribution and use in source and binary forms, with or without
4 # modification, are permitted provided that the following conditions are
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
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.
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.
32 from webkitpy.common.host_mock import MockHost
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
42 class BuildBotPrinterTests(unittest.TestCase):
43 def assertEmpty(self, stream):
44 self.assertFalse(stream.getvalue())
46 def assertNotEmpty(self, stream):
47 self.assertTrue(stream.getvalue())
49 def get_printer(self):
50 stream = StringIO.StringIO()
51 printer = buildbot_results.BuildBotPrinter(stream, debug_logging=True)
52 return printer, stream
54 def test_print_unexpected_results(self):
55 port = MockHost().port_factory.get('test')
56 printer, out = self.get_printer()
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)
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)
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)
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)
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)
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)
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)