133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org# Copyright 2012 the V8 project authors. All rights reserved. 233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org# Redistribution and use in source and binary forms, with or without 333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org# modification, are permitted provided that the following conditions are 433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org# met: 533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org# 633e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org# * Redistributions of source code must retain the above copyright 733e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org# notice, this list of conditions and the following disclaimer. 833e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org# * Redistributions in binary form must reproduce the above 933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org# copyright notice, this list of conditions and the following 1033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org# disclaimer in the documentation and/or other materials provided 1133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org# with the distribution. 1233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org# * Neither the name of Google Inc. nor the names of its 1333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org# contributors may be used to endorse or promote products derived 1433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org# from this software without specific prior written permission. 1533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org# 1633e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1733e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 1833e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 1933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2633e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2733e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 2833e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 2933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgimport sys 3033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgimport time 3133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 3233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgfrom . import statusfile 3333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 3433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 3533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgREPORT_TEMPLATE = ( 3633e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org"""Total: %(total)i tests 3733e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org * %(skipped)4d tests will be skipped 3833e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org * %(timeout)4d tests are expected to timeout sometimes 3933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org * %(nocrash)4d tests are expected to be flaky but not crash 4033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org * %(pass)4d tests are expected to pass 4133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org * %(fail_ok)4d tests are expected to fail that we won't fix 4233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org * %(fail)4d tests are expected to fail that we should fix""") 4333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 4433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 4533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgdef PrintReport(tests): 4633e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org total = len(tests) 4733e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org skipped = timeout = nocrash = passes = fail_ok = fail = 0 4833e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org for t in tests: 4933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org if "outcomes" not in dir(t) or not t.outcomes: 5033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org passes += 1 5133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org continue 5233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org o = t.outcomes 5333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org if statusfile.DoSkip(o): 5433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org skipped += 1 5533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org continue 5633e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org if statusfile.TIMEOUT in o: timeout += 1 57594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org if statusfile.IsPassOrFail(o): nocrash += 1 5833e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org if list(o) == [statusfile.PASS]: passes += 1 5933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org if statusfile.IsFailOk(o): fail_ok += 1 6033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org if list(o) == [statusfile.FAIL]: fail += 1 6133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org print REPORT_TEMPLATE % { 6233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org "total": total, 6333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org "skipped": skipped, 6433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org "timeout": timeout, 6533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org "nocrash": nocrash, 6633e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org "pass": passes, 6733e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org "fail_ok": fail_ok, 6833e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org "fail": fail 6933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org } 7033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 7133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 7233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgdef PrintTestSource(tests): 7333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org for test in tests: 7433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org suite = test.suite 7533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org source = suite.GetSourceForTest(test).strip() 7633e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org if len(source) > 0: 7733e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org print "--- begin source: %s/%s ---" % (suite.name, test.path) 7833e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org print source 7933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org print "--- end source: %s/%s ---" % (suite.name, test.path) 8033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 8133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 8233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgdef FormatTime(d): 8333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org millis = round(d * 1000) % 1000 8433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org return time.strftime("%M:%S.", time.gmtime(d)) + ("%03i" % millis) 8533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 8633e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 8733e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgdef PrintTestDurations(suites, overall_time): 8833e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org # Write the times to stderr to make it easy to separate from the 8933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org # test output. 9033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org print 9133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org sys.stderr.write("--- Total time: %s ---\n" % FormatTime(overall_time)) 9233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org timed_tests = [ t for s in suites for t in s.tests 9333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org if t.duration is not None ] 9433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org timed_tests.sort(lambda a, b: cmp(b.duration, a.duration)) 9533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org index = 1 9633e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org for entry in timed_tests[:20]: 9733e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org t = FormatTime(entry.duration) 9833e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org sys.stderr.write("%4i (%s) %s\n" % (index, t, entry.GetLabel())) 9933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org index += 1 100