| #!/usr/bin/env python3 |
| # Copyright (c) 2023, the R8 project authors. Please see the AUTHORS file |
| # for details. All rights reserved. Use of this source code is governed by a |
| # BSD-style license that can be found in the LICENSE file. |
| |
| import utils |
| |
| import datetime |
| import os |
| |
| CHOICES = ["all", "failing", "past-failing", "outstanding"] |
| DEFAULT_REPORTS_ROOT = os.path.join(utils.BUILD, "testing-state") |
| |
| |
| def set_up_test_state(gradle_args, testing_state_mode, testing_state_path): |
| if not testing_state_mode: |
| return |
| if not testing_state_path: |
| testing_state_path = os.path.join(DEFAULT_REPORTS_ROOT, |
| utils.get_HEAD_branch()) |
| testing_state_path = os.path.abspath(testing_state_path) |
| gradle_args.append('-Ptesting-state-mode=%s' % testing_state_mode) |
| gradle_args.append('-Ptesting-state-path=%s' % testing_state_path) |
| prepare_testing_index(testing_state_mode, testing_state_path) |
| |
| |
| def fresh_testing_index(testing_state_dir): |
| number = 0 |
| while True: |
| freshIndex = os.path.join(testing_state_dir, "index.%d.html" % number) |
| number += 1 |
| if not os.path.exists(freshIndex): |
| return freshIndex |
| |
| |
| def prepare_testing_index(testing_state_mode, testing_state_dir): |
| if not os.path.exists(testing_state_dir): |
| os.makedirs(testing_state_dir) |
| index_path = os.path.join(testing_state_dir, "index.html") |
| parent_report = None |
| resuming = os.path.exists(index_path) |
| mode = testing_state_mode if resuming else f"starting (flag: {testing_state_mode})" |
| if (resuming): |
| parent_report = fresh_testing_index(testing_state_dir) |
| os.rename(index_path, parent_report) |
| index = open(index_path, "a") |
| title = f"Testing: {os.path.basename(testing_state_dir)}" |
| # Print a console link to the test report for easy access. |
| print("=" * 70) |
| print("Test report written to:") |
| print(f" file://{index_path}") |
| print("=" * 70) |
| # Print the new index content. |
| index.write(f"<html><head><title>{title}</title>") |
| index.write("<style> * { font-family: monospace; }</style>") |
| index.write("<meta http-equiv='refresh' content='10' />") |
| index.write(f"</head><body><h1>{title}</h1>") |
| index.write(f"<h2>Mode: {mode}</h2>") |
| # write index links first to avoid jumping when browsing. |
| if parent_report: |
| index.write( |
| f"<p><a href=\"file://{parent_report}\">Previous result index</a></p>" |
| ) |
| index.write( |
| f"<p><a href=\"file://{index_path}\">Most recent result index</a></p>") |
| index.write( |
| f"<p><a href=\"file://{testing_state_dir}\">Test directories</a></p>") |
| # git branch/hash and diff for future reference |
| index.write(f"<p>Run on: {datetime.datetime.now()}</p>") |
| index.write(f"<p>State path: {testing_state_dir}</p>") |
| index.write(f"<p>Git branch: {utils.get_HEAD_branch()}") |
| index.write(f"</br>Git SHA: {utils.get_HEAD_sha1()}") |
| index.write(f'</br>Git diff summary:\n') |
| index.write( |
| f'<pre style="background-color: lightgray">{utils.get_HEAD_diff_stat()}</pre></p>' |
| ) |
| # header for the failing tests |
| index.write( |
| "<h2>Failing tests (refreshing automatically every 10 seconds)</h2><ul>" |
| ) |