# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. # See https://llvm.org/LICENSE.txt for license information. # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception # To run these tests: # python -m unittest generate_test_report_lib_test.py import unittest from io import StringIO from textwrap import dedent from junitparser import JUnitXml import generate_test_report_lib def junit_from_xml(xml): return JUnitXml.fromfile(StringIO(xml)) class TestReports(unittest.TestCase): def test_title_only(self): self.assertEqual( generate_test_report_lib.generate_report("Foo", 0, []), ("", "success") ) def test_no_tests_in_testsuite(self): self.assertEqual( generate_test_report_lib.generate_report( "Foo", 1, [ junit_from_xml( dedent( """\ """ ) ) ], ), ("", None), ) def test_no_failures(self): self.assertEqual( generate_test_report_lib.generate_report( "Foo", 0, [ junit_from_xml( dedent( """\ """ ) ) ], ), ( dedent( """\ # Foo * 1 test passed""" ), "success", ), ) def test_no_failures_build_failed(self): self.assertEqual( generate_test_report_lib.generate_report( "Foo", 1, [ junit_from_xml( dedent( """\ """ ) ) ], buildkite_info={ "BUILDKITE_ORGANIZATION_SLUG": "organization_slug", "BUILDKITE_PIPELINE_SLUG": "pipeline_slug", "BUILDKITE_BUILD_NUMBER": "build_number", "BUILDKITE_JOB_ID": "job_id", }, ), ( dedent( """\ # Foo * 1 test passed All tests passed but another part of the build **failed**. [Download](https://buildkite.com/organizations/organization_slug/pipelines/pipeline_slug/builds/build_number/jobs/job_id/download.txt) the build's log file to see the details.""" ), "error", ), ) def test_report_single_file_single_testsuite(self): self.assertEqual( generate_test_report_lib.generate_report( "Foo", 1, [ junit_from_xml( dedent( """\ """ ) ) ], ), ( dedent( """\ # Foo * 1 test passed * 1 test skipped * 2 tests failed ## Failed Tests (click on a test name to see its output) ### Bar
Bar/test_3/test_3 ``` Output goes here ```
Bar/test_4/test_4 ``` Other output goes here ```
""" ), "error", ), ) MULTI_SUITE_OUTPUT = ( dedent( """\ # ABC and DEF * 1 test passed * 1 test skipped * 2 tests failed ## Failed Tests (click on a test name to see its output) ### ABC
ABC/test_2/test_2 ``` ABC/test_2 output goes here ```
### DEF
DEF/test_2/test_2 ``` DEF/test_2 output goes here ```
""" ), "error", ) def test_report_single_file_multiple_testsuites(self): self.assertEqual( generate_test_report_lib.generate_report( "ABC and DEF", 1, [ junit_from_xml( dedent( """\ """ ) ) ], ), self.MULTI_SUITE_OUTPUT, ) def test_report_multiple_files_multiple_testsuites(self): self.assertEqual( generate_test_report_lib.generate_report( "ABC and DEF", 1, [ junit_from_xml( dedent( """\ """ ) ), junit_from_xml( dedent( """\ """ ) ), ], ), self.MULTI_SUITE_OUTPUT, ) def test_report_dont_list_failures(self): self.assertEqual( generate_test_report_lib.generate_report( "Foo", 1, [ junit_from_xml( dedent( """\ """ ) ) ], list_failures=False, ), ( dedent( """\ # Foo * 1 test failed Failed tests and their output was too large to report. Download the build's log file to see the details.""" ), "error", ), ) def test_report_dont_list_failures_link_to_log(self): self.assertEqual( generate_test_report_lib.generate_report( "Foo", 1, [ junit_from_xml( dedent( """\ """ ) ) ], list_failures=False, buildkite_info={ "BUILDKITE_ORGANIZATION_SLUG": "organization_slug", "BUILDKITE_PIPELINE_SLUG": "pipeline_slug", "BUILDKITE_BUILD_NUMBER": "build_number", "BUILDKITE_JOB_ID": "job_id", }, ), ( dedent( """\ # Foo * 1 test failed Failed tests and their output was too large to report. [Download](https://buildkite.com/organizations/organization_slug/pipelines/pipeline_slug/builds/build_number/jobs/job_id/download.txt) the build's log file to see the details.""" ), "error", ), ) def test_report_size_limit(self): self.assertEqual( generate_test_report_lib.generate_report( "Foo", 1, [ junit_from_xml( dedent( """\ """ ) ) ], size_limit=128, ), ( dedent( """\ # Foo * 1 test failed Failed tests and their output was too large to report. Download the build's log file to see the details.""" ), "error", ), )