| #!/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>" | |
| ) |