(
dt: float,
serious: bool,
messages_by_file: dict[str | None, list[str]],
version: str,
platform: str,
)
| 264 | |
| 265 | |
| 266 | def _generate_junit_contents( |
| 267 | dt: float, |
| 268 | serious: bool, |
| 269 | messages_by_file: dict[str | None, list[str]], |
| 270 | version: str, |
| 271 | platform: str, |
| 272 | ) -> str: |
| 273 | from xml.sax.saxutils import escape |
| 274 | |
| 275 | if serious: |
| 276 | failures = 0 |
| 277 | errors = len(messages_by_file) |
| 278 | else: |
| 279 | failures = len(messages_by_file) |
| 280 | errors = 0 |
| 281 | |
| 282 | xml = JUNIT_HEADER_TEMPLATE.format( |
| 283 | errors=errors, |
| 284 | failures=failures, |
| 285 | time=dt, |
| 286 | # If there are no messages, we still write one "test" indicating success. |
| 287 | tests=len(messages_by_file) or 1, |
| 288 | ) |
| 289 | |
| 290 | if not messages_by_file: |
| 291 | xml += JUNIT_TESTCASE_PASS_TEMPLATE.format(time=dt, ver=version, platform=platform) |
| 292 | else: |
| 293 | for filename, messages in messages_by_file.items(): |
| 294 | if filename is not None: |
| 295 | xml += JUNIT_TESTCASE_FAIL_TEMPLATE.format( |
| 296 | text=escape("\n".join(messages)), |
| 297 | filename=filename, |
| 298 | time=dt, |
| 299 | name="mypy-py{ver}-{platform} {filename}".format( |
| 300 | ver=version, platform=platform, filename=filename |
| 301 | ), |
| 302 | ) |
| 303 | else: |
| 304 | xml += JUNIT_TESTCASE_FAIL_TEMPLATE.format( |
| 305 | text=escape("\n".join(messages)), |
| 306 | filename="mypy", |
| 307 | time=dt, |
| 308 | name=f"mypy-py{version}-{platform}", |
| 309 | ) |
| 310 | |
| 311 | xml += JUNIT_FOOTER |
| 312 | |
| 313 | return xml |
| 314 | |
| 315 | |
| 316 | def write_junit_xml( |
searching dependent graphs…