* Package: dev-util/diff-cover-9.2.0:0 * Repository: gentoo * Maintainer: williamh@gentoo.org * USE: abi_x86_64 amd64 elibc_glibc kernel_linux python_targets_python3_12 test * FEATURES: network-sandbox preserve-libs sandbox test userpriv usersandbox >>> Unpacking source... >>> Unpacking diff-cover-9.2.0.gh.tar.gz to /var/tmp/portage/dev-util/diff-cover-9.2.0/work >>> Source unpacked in /var/tmp/portage/dev-util/diff-cover-9.2.0/work >>> Preparing source in /var/tmp/portage/dev-util/diff-cover-9.2.0/work/diff_cover-9.2.0 ... * Build system packages: * dev-python/gpep517 : 16 * dev-python/installer : 0.7.0 * dev-python/poetry-core : 2.1.1 >>> Source prepared. >>> Configuring source in /var/tmp/portage/dev-util/diff-cover-9.2.0/work/diff_cover-9.2.0 ... >>> Source configured. >>> Compiling source in /var/tmp/portage/dev-util/diff-cover-9.2.0/work/diff_cover-9.2.0 ... * python3_12: running distutils-r1_run_phase distutils-r1_python_compile * Building the wheel for diff_cover-9.2.0 via poetry.core.masonry.api python3.12 -m gpep517 build-wheel --prefix=/usr --backend poetry.core.masonry.api --output-fd 3 --wheel-dir /var/tmp/portage/dev-util/diff-cover-9.2.0/work/diff_cover-9.2.0-python3_12/wheel 2025-02-20 16:19:37,862 gpep517 INFO Building wheel via backend poetry.core.masonry.api 2025-02-20 16:19:37,984 poetry.core.factory WARNING The "poetry.dev-dependencies" section is deprecated and will be removed in a future version. Use "poetry.group.dev.dependencies" instead. 2025-02-20 16:19:38,121 poetry.core.masonry.builders.wheel INFO Building wheel 2025-02-20 16:19:38,185 poetry.core.masonry.builders.wheel INFO Built diff_cover-9.2.0-py3-none-any.whl 2025-02-20 16:19:38,185 gpep517 INFO The backend produced /var/tmp/portage/dev-util/diff-cover-9.2.0/work/diff_cover-9.2.0-python3_12/wheel/diff_cover-9.2.0-py3-none-any.whl * Installing diff_cover-9.2.0-py3-none-any.whl to /var/tmp/portage/dev-util/diff-cover-9.2.0/work/diff_cover-9.2.0-python3_12/install python3.12 -m gpep517 install-wheel --destdir=/var/tmp/portage/dev-util/diff-cover-9.2.0/work/diff_cover-9.2.0-python3_12/install --interpreter=/usr/bin/python3.12 --prefix=/usr --optimize=all /var/tmp/portage/dev-util/diff-cover-9.2.0/work/diff_cover-9.2.0-python3_12/wheel/diff_cover-9.2.0-py3-none-any.whl 2025-02-20 16:19:38,417 gpep517 INFO Installing /var/tmp/portage/dev-util/diff-cover-9.2.0/work/diff_cover-9.2.0-python3_12/wheel/diff_cover-9.2.0-py3-none-any.whl into /var/tmp/portage/dev-util/diff-cover-9.2.0/work/diff_cover-9.2.0-python3_12/install 2025-02-20 16:19:38,537 gpep517 INFO Installation complete >>> Source compiled. >>> Test phase: dev-util/diff-cover-9.2.0 * python3_12: running distutils-r1_run_phase python_test python3.12 -m pytest -vv -ra -l -Wdefault -Werror::pytest.PytestUnhandledCoroutineWarning --color=no -o console_output_style=count -o tmp_path_retention_count=0 -o tmp_path_retention_policy=failed -p no:cov -p no:flake8 -p no:flakes -p no:pylint -p no:markdown -p no:sugar -p no:xvfb -p no:pytest-describe -p no:plus -p no:tavern -p no:salt-factories /usr/lib/python3.12/site-packages/pytest_asyncio/plugin.py:207: PytestDeprecationWarning: The configuration option "asyncio_default_fixture_loop_scope" is unset. The event loop scope for asynchronous fixtures will default to the fixture caching scope. Future versions of pytest-asyncio will default the loop scope for asynchronous fixtures to function scope. Set the default fixture loop scope explicitly in order to avoid unexpected behavior in the future. Valid fixture loop scopes are: "function", "class", "module", "package", "session" warnings.warn(PytestDeprecationWarning(_DEFAULT_FIXTURE_LOOP_SCOPE_UNSET)) ============================= test session starts ============================== platform linux -- Python 3.12.9, pytest-8.3.4, pluggy-1.5.0 -- /var/tmp/portage/dev-util/diff-cover-9.2.0/work/diff_cover-9.2.0-python3_12/install/usr/bin/python3.12 cachedir: .pytest_cache tempdir: /var/tmp/portage/dev-util/diff-cover-9.2.0/temp/diff_cover-9.2.0 hypothesis profile 'default' -> database=DirectoryBasedExampleDatabase(PosixPath('/var/tmp/portage/dev-util/diff-cover-9.2.0/work/diff_cover-9.2.0/.hypothesis/examples')) rootdir: /var/tmp/portage/dev-util/diff-cover-9.2.0/work/diff_cover-9.2.0 configfile: pyproject.toml plugins: mock-3.14.0, xdist-3.6.1, pkgcore-0.12.29, flexmock-0.12.2, anyio-4.8.0, respx-0.22.0, tempdir-2019.10.12, forked-1.6.0, hypothesis-6.125.3, datadir-1.6.1, subtests-0.14.1, httpx-0.35.0, pytest_httpserver-1.1.1, asyncio-0.25.3, betamax-0.9.0, Faker-36.1.1, xprocess-1.0.2, httpbin-2.1.0, flaky-3.8.1, lazy-fixtures-1.1.2, expect-1.1.0, subprocess-1.5.3, jaraco.test-5.5.1, regressions-2.7.0, snapshottest-0.6.0, home-0.6.0, pytest_codeblocks-0.17.0 asyncio: mode=Mode.STRICT, asyncio_default_fixture_loop_scope=None collecting ... collected 299 items tests/test_clover_violations_reporter.py::test_get_src_path_clover PASSED [ 1/299] tests/test_config_parser.py::TestTOMLParser::test_parse_no_toml_file[Tool.DIFF_COVER] PASSED [ 2/299] tests/test_config_parser.py::TestTOMLParser::test_parse_no_toml_file[Tool.DIFF_QUALITY] PASSED [ 3/299] tests/test_config_parser.py::TestTOMLParser::test_parse_but_no_tomli_installed[Tool.DIFF_COVER] PASSED [ 4/299] tests/test_config_parser.py::TestTOMLParser::test_parse_but_no_tomli_installed[Tool.DIFF_QUALITY] PASSED [ 5/299] tests/test_config_parser.py::TestTOMLParser::test_parse_but_no_data[Tool.DIFF_COVER-] PASSED [ 6/299] tests/test_config_parser.py::TestTOMLParser::test_parse_but_no_data[Tool.DIFF_COVER-[tool.diff_quality]] PASSED [ 7/299] tests/test_config_parser.py::TestTOMLParser::test_parse_but_no_data[Tool.DIFF_QUALITY-] PASSED [ 8/299] tests/test_config_parser.py::TestTOMLParser::test_parse_but_no_data[Tool.DIFF_COVER-[tool.diff_cover]] PASSED [ 9/299] tests/test_config_parser.py::TestTOMLParser::test_parse[Tool.DIFF_COVER-[tool.diff_cover]\nquiet=true-expected0] PASSED [ 10/299] tests/test_config_parser.py::TestTOMLParser::test_parse[Tool.DIFF_QUALITY-[tool.diff_quality]\nquiet=true-expected1] PASSED [ 11/299] tests/test_config_parser.py::test_get_config_unrecognized_file[Tool.DIFF_COVER] PASSED [ 12/299] tests/test_config_parser.py::test_get_config_unrecognized_file[Tool.DIFF_QUALITY] PASSED [ 13/299] tests/test_config_parser.py::test_get_config[Tool.DIFF_COVER-cli_config0-defaults0-None-expected0] PASSED [ 14/299] tests/test_config_parser.py::test_get_config[Tool.DIFF_QUALITY-cli_config1-defaults1-None-expected1] PASSED [ 15/299] tests/test_config_parser.py::test_get_config[Tool.DIFF_COVER-cli_config2-defaults2-[tool.diff_cover]\na=1\nd=6-expected2] PASSED [ 16/299] tests/test_diff_cover_main.py::test_parse_coverage_file PASSED [ 17/299] tests/test_diff_cover_main.py::test_parse_range_notation PASSED [ 18/299] tests/test_diff_cover_tool.py::test_parse_with_html_report PASSED [ 19/299] tests/test_diff_cover_tool.py::test_parse_with_no_report PASSED [ 20/299] tests/test_diff_cover_tool.py::test_parse_with_multiple_reports PASSED [ 21/299] tests/test_diff_cover_tool.py::test_parse_with_ignored_unstaged PASSED [ 22/299] tests/test_diff_cover_tool.py::test_parse_invalid_arg PASSED [ 23/299] tests/test_diff_cover_tool.py::test_parse_with_include PASSED [ 24/299] tests/test_diff_cover_tool.py::test_parse_with_exclude PASSED [ 25/299] tests/test_diff_quality_main.py::test_parse_with_html_report PASSED [ 26/299] tests/test_diff_quality_main.py::test_parse_with_no_html_report PASSED [ 27/299] tests/test_diff_quality_main.py::test_parse_with_one_input_report PASSED [ 28/299] tests/test_diff_quality_main.py::test_parse_with_multiple_input_reports PASSED [ 29/299] tests/test_diff_quality_main.py::test_parse_with_options PASSED [ 30/299] tests/test_diff_quality_main.py::test_parse_with_ignored_unstaged PASSED [ 31/299] tests/test_diff_quality_main.py::test_parse_invalid_arg PASSED [ 32/299] tests/test_diff_quality_main.py::test_parse_with_exclude PASSED [ 33/299] tests/test_diff_quality_main.py::test_parse_with_include PASSED [ 34/299] tests/test_diff_quality_main.py::test_parse_diff_range_notation PASSED [ 35/299] tests/test_diff_quality_main.py::test_parse_options PASSED [ 36/299] tests/test_diff_quality_main.py::test_parse_options_without_quotes PASSED [ 37/299] tests/test_diff_reporter.py::test_name PASSED [ 38/299] tests/test_diff_reporter.py::test_name_compare_branch PASSED [ 39/299] tests/test_diff_reporter.py::test_name_ignore_staged PASSED [ 40/299] tests/test_diff_reporter.py::test_name_ignore_unstaged PASSED [ 41/299] tests/test_diff_reporter.py::test_name_ignore_staged_and_unstaged PASSED [ 42/299] tests/test_diff_reporter.py::test_name_include_untracked PASSED [ 43/299] tests/test_diff_reporter.py::test_git_path_selection[include0-exclude0-expected0] PASSED [ 44/299] tests/test_diff_reporter.py::test_git_path_selection[include1-exclude1-expected1] PASSED [ 45/299] tests/test_diff_reporter.py::test_git_path_selection[include2-exclude2-expected2] PASSED [ 46/299] tests/test_diff_reporter.py::test_git_path_selection[include3-exclude3-expected3] PASSED [ 47/299] tests/test_diff_reporter.py::test_git_path_selection[include4-exclude4-expected4] PASSED [ 48/299] tests/test_diff_reporter.py::test_git_source_paths PASSED [ 49/299] tests/test_diff_reporter.py::test_git_source_paths_with_space PASSED [ 50/299] tests/test_diff_reporter.py::test_duplicate_source_paths PASSED [ 51/299] tests/test_diff_reporter.py::test_git_source_paths_with_supported_extensions PASSED [ 52/299] tests/test_diff_reporter.py::test_git_lines_changed PASSED [ 53/299] tests/test_diff_reporter.py::test_ignore_lines_outside_src PASSED [ 54/299] tests/test_diff_reporter.py::test_one_line_file PASSED [ 55/299] tests/test_diff_reporter.py::test_git_deleted_lines PASSED [ 56/299] tests/test_diff_reporter.py::test_git_unicode_filename PASSED [ 57/299] tests/test_diff_reporter.py::test_git_repeat_lines PASSED [ 58/299] tests/test_diff_reporter.py::test_git_overlapping_lines PASSED [ 59/299] tests/test_diff_reporter.py::test_git_line_within_hunk PASSED [ 60/299] tests/test_diff_reporter.py::test_inter_diff_conflict PASSED [ 61/299] tests/test_diff_reporter.py::test_git_no_such_file PASSED [ 62/299] tests/test_diff_reporter.py::test_no_diff PASSED [ 63/299] tests/test_diff_reporter.py::test_git_diff_error PASSED [ 64/299] tests/test_diff_reporter.py::test_plus_sign_in_hunk_bug PASSED [ 65/299] tests/test_diff_reporter.py::test_terminating_chars_in_hunk PASSED [ 66/299] tests/test_diff_reporter.py::test_merge_conflict_diff PASSED [ 67/299] tests/test_diff_reporter.py::test_inclusion_list PASSED [ 68/299] tests/test_diff_reporter.py::test_ignore_staged_inclusion PASSED [ 69/299] tests/test_diff_reporter.py::test_ignore_unstaged_inclusion PASSED [ 70/299] tests/test_diff_reporter.py::test_ignore_staged_and_unstaged_inclusion PASSED [ 71/299] tests/test_diff_reporter.py::test_fnmatch PASSED [ 72/299] tests/test_diff_reporter.py::test_fnmatch_returns_the_default_with_empty_default PASSED [ 73/299] tests/test_diff_reporter.py::test_include_untracked PASSED [ 74/299] tests/test_diff_reporter.py::test_include_untracked__not_valid_path__not_include_it[excluded0-supported_extensions0-file.bin] PASSED [ 75/299] tests/test_diff_reporter.py::test_include_untracked__not_valid_path__not_include_it[excluded1-supported_extensions1-file.bin] PASSED [ 76/299] tests/test_diff_reporter.py::test_name_with_default_range PASSED [ 77/299] tests/test_diff_reporter.py::test_name_different_range PASSED [ 78/299] tests/test_git_diff.py::test_diff_committed PASSED [ 79/299] tests/test_git_diff.py::test_diff_unstaged PASSED [ 80/299] tests/test_git_diff.py::test_diff_staged PASSED [ 81/299] tests/test_git_diff.py::test_diff_missing_branch_error PASSED [ 82/299] tests/test_git_diff.py::test_diff_committed_compare_branch PASSED [ 83/299] tests/test_git_diff.py::test_errors PASSED [ 84/299] tests/test_git_diff.py::test_untracked[-expected0] PASSED [ 85/299] tests/test_git_diff.py::test_untracked[\n-expected1] PASSED [ 86/299] tests/test_git_diff.py::test_untracked[a.py\n-expected2] PASSED [ 87/299] tests/test_git_diff.py::test_untracked[a.py\nb.py\n-expected3] PASSED [ 88/299] tests/test_git_diff_file.py::test_diff_file_not_found PASSED [ 89/299] tests/test_git_diff_file.py::test_large_diff_file PASSED [ 90/299] tests/test_git_diff_file.py::test_diff_committed PASSED [ 91/299] tests/test_git_diff_file.py::test_empty_diff_file PASSED [ 92/299] tests/test_git_path.py::test_project_root_command PASSED [ 93/299] tests/test_git_path.py::test_relative_path PASSED [ 94/299] tests/test_git_path.py::test_absolute_path PASSED [ 95/299] tests/test_git_path.py::test_set_cwd_unicode PASSED [ 96/299] tests/test_git_path.py::test_set_cwd_unicode_byte_passed_in_for_cwd PASSED [ 97/299] tests/test_integration.py::TestDiffCoverIntegration::test_added_file_html PASSED [ 98/299] tests/test_integration.py::TestDiffCoverIntegration::test_added_file_console PASSED [ 99/299] tests/test_integration.py::TestDiffCoverIntegration::test_added_file_console_lcov PASSED [100/299] tests/test_integration.py::TestDiffCoverIntegration::test_lua_coverage PASSED [101/299] tests/test_integration.py::TestDiffCoverIntegration::test_fail_under_console PASSED [102/299] tests/test_integration.py::TestDiffCoverIntegration::test_fail_under_pass_console PASSED [103/299] tests/test_integration.py::TestDiffCoverIntegration::test_deleted_file_html PASSED [104/299] tests/test_integration.py::TestDiffCoverIntegration::test_deleted_file_console PASSED [105/299] tests/test_integration.py::TestDiffCoverIntegration::test_changed_file_html PASSED [106/299] tests/test_integration.py::TestDiffCoverIntegration::test_fail_under_html PASSED [107/299] tests/test_integration.py::TestDiffCoverIntegration::test_fail_under_pass_html PASSED [108/299] tests/test_integration.py::TestDiffCoverIntegration::test_changed_file_console PASSED [109/299] tests/test_integration.py::TestDiffCoverIntegration::test_moved_file_html PASSED [110/299] tests/test_integration.py::TestDiffCoverIntegration::test_moved_file_console PASSED [111/299] tests/test_integration.py::TestDiffCoverIntegration::test_mult_inputs_html PASSED [112/299] tests/test_integration.py::TestDiffCoverIntegration::test_mult_inputs_console PASSED [113/299] tests/test_integration.py::TestDiffCoverIntegration::test_changed_file_lcov_console PASSED [114/299] tests/test_integration.py::TestDiffCoverIntegration::test_subdir_coverage_html PASSED [115/299] tests/test_integration.py::TestDiffCoverIntegration::test_subdir_coverage_console PASSED [116/299] tests/test_integration.py::TestDiffCoverIntegration::test_unicode_console PASSED [117/299] tests/test_integration.py::TestDiffCoverIntegration::test_dot_net_diff PASSED [118/299] tests/test_integration.py::TestDiffCoverIntegration::test_unicode_html PASSED [119/299] tests/test_integration.py::TestDiffCoverIntegration::test_html_with_external_css PASSED [120/299] tests/test_integration.py::TestDiffCoverIntegration::test_git_diff_error PASSED [121/299] tests/test_integration.py::TestDiffCoverIntegration::test_quiet_mode PASSED [122/299] tests/test_integration.py::TestDiffCoverIntegration::test_show_uncovered_lines_console PASSED [123/299] tests/test_integration.py::TestDiffCoverIntegration::test_expand_coverage_report_complete_report PASSED [124/299] tests/test_integration.py::TestDiffCoverIntegration::test_expand_coverage_report_uncomplete_report PASSED [125/299] tests/test_integration.py::TestDiffQualityIntegration::test_git_diff_error_diff_quality PASSED [126/299] tests/test_integration.py::TestDiffQualityIntegration::test_added_file_pycodestyle_html PASSED [127/299] tests/test_integration.py::TestDiffQualityIntegration::test_added_file_pyflakes_html PASSED [128/299] tests/test_integration.py::TestDiffQualityIntegration::test_added_file_pylint_html PASSED [129/299] tests/test_integration.py::TestDiffQualityIntegration::test_fail_under_html PASSED [130/299] tests/test_integration.py::TestDiffQualityIntegration::test_fail_under_pass_html PASSED [131/299] tests/test_integration.py::TestDiffQualityIntegration::test_html_with_external_css FAILED [132/299] tests/test_integration.py::TestDiffQualityIntegration::test_added_file_pycodestyle_console PASSED [133/299] tests/test_integration.py::TestDiffQualityIntegration::test_added_file_pycodestyle_console_exclude_file PASSED [134/299] tests/test_integration.py::TestDiffQualityIntegration::test_fail_under_console PASSED [135/299] tests/test_integration.py::TestDiffQualityIntegration::test_fail_under_pass_console PASSED [136/299] tests/test_integration.py::TestDiffQualityIntegration::test_added_file_pyflakes_console PASSED [137/299] tests/test_integration.py::TestDiffQualityIntegration::test_added_file_pyflakes_console_two_files PASSED [138/299] tests/test_integration.py::TestDiffQualityIntegration::test_added_file_pylint_console PASSED [139/299] tests/test_integration.py::TestDiffQualityIntegration::test_pre_generated_pycodestyle_report PASSED [140/299] tests/test_integration.py::TestDiffQualityIntegration::test_pre_generated_pyflakes_report PASSED [141/299] tests/test_integration.py::TestDiffQualityIntegration::test_pre_generated_pylint_report PASSED [142/299] tests/test_integration.py::TestDiffQualityIntegration::test_pylint_report_with_dup_code_violation PASSED [143/299] tests/test_integration.py::TestDiffQualityIntegration::test_tool_not_recognized PASSED [144/299] tests/test_integration.py::TestDiffQualityIntegration::test_tool_not_installed PASSED [145/299] tests/test_integration.py::TestDiffQualityIntegration::test_do_nothing_reporter PASSED [146/299] tests/test_integration.py::TestDiffQualityIntegration::test_quiet_mode PASSED [147/299] tests/test_java_violations_reporter.py::TestCheckstyleQualityReporterTest::test_no_such_file PASSED [148/299] tests/test_java_violations_reporter.py::TestCheckstyleQualityReporterTest::test_no_java_file PASSED [149/299] tests/test_java_violations_reporter.py::TestCheckstyleQualityReporterTest::test_quality PASSED [150/299] tests/test_java_violations_reporter.py::TestCheckstyleXmlQualityReporterTest::test_no_such_file PASSED [151/299] tests/test_java_violations_reporter.py::TestCheckstyleXmlQualityReporterTest::test_no_java_file PASSED [152/299] tests/test_java_violations_reporter.py::TestCheckstyleXmlQualityReporterTest::test_quality PASSED [153/299] tests/test_java_violations_reporter.py::TestCheckstyleXmlQualityReporterTest::test_quality_error PASSED [154/299] tests/test_java_violations_reporter.py::TestCheckstyleXmlQualityReporterTest::test_quality_pregenerated_report PASSED [155/299] tests/test_java_violations_reporter.py::TestFindbugsQualityReporterTest::test_no_such_file PASSED [156/299] tests/test_java_violations_reporter.py::TestFindbugsQualityReporterTest::test_no_java_file PASSED [157/299] tests/test_java_violations_reporter.py::TestFindbugsQualityReporterTest::test_quality_pregenerated_report PASSED [158/299] tests/test_java_violations_reporter.py::TestPmdXmlQualityReporterTest::test_no_such_file PASSED [159/299] tests/test_java_violations_reporter.py::TestPmdXmlQualityReporterTest::test_no_java_file PASSED [160/299] tests/test_java_violations_reporter.py::TestPmdXmlQualityReporterTest::test_quality_pregenerated_report PASSED [161/299] tests/test_report_generator.py::TestSimpleReportGenerator::test_src_paths PASSED [162/299] tests/test_report_generator.py::TestSimpleReportGenerator::test_coverage_name PASSED [163/299] tests/test_report_generator.py::TestSimpleReportGenerator::test_diff_name PASSED [164/299] tests/test_report_generator.py::TestSimpleReportGenerator::test_percent_covered PASSED [165/299] tests/test_report_generator.py::TestSimpleReportGenerator::test_violation_lines PASSED [166/299] tests/test_report_generator.py::TestSimpleReportGenerator::test_src_with_no_info PASSED [167/299] tests/test_report_generator.py::TestSimpleReportGenerator::test_src_paths_not_measured PASSED [168/299] tests/test_report_generator.py::TestSimpleReportGenerator::test_total_num_lines PASSED [169/299] tests/test_report_generator.py::TestSimpleReportGenerator::test_total_num_missing PASSED [170/299] tests/test_report_generator.py::TestSimpleReportGenerator::test_total_percent_covered PASSED [171/299] tests/test_report_generator.py::TestTemplateReportGenerator::test_combine_adjacent_lines_no_adjacent PASSED [172/299] tests/test_report_generator.py::TestTemplateReportGenerator::test_combine_adjacent_lines PASSED [173/299] tests/test_report_generator.py::TestTemplateReportGenerator::test_empty_list PASSED [174/299] tests/test_report_generator.py::TestTemplateReportGenerator::test_one_number PASSED [175/299] tests/test_report_generator.py::TestJsonReportGenerator::test_generate_report PASSED [176/299] tests/test_report_generator.py::TestJsonReportGenerator::test_hundred_percent PASSED [177/299] tests/test_report_generator.py::TestJsonReportGenerator::test_empty_report PASSED [178/299] tests/test_report_generator.py::TestStringReportGenerator::test_generate_report PASSED [179/299] tests/test_report_generator.py::TestStringReportGenerator::test_hundred_percent PASSED [180/299] tests/test_report_generator.py::TestStringReportGenerator::test_empty_report PASSED [181/299] tests/test_report_generator.py::TestHtmlReportGenerator::test_generate_report PASSED [182/299] tests/test_report_generator.py::TestHtmlReportGenerator::test_empty_report PASSED [183/299] tests/test_report_generator.py::TestHtmlReportGenerator::test_one_snippet PASSED [184/299] tests/test_report_generator.py::TestHtmlReportGenerator::test_multiple_snippets PASSED [185/299] tests/test_report_generator.py::TestMarkdownReportGenerator::test_generate_report PASSED [186/299] tests/test_report_generator.py::TestMarkdownReportGenerator::test_hundred_percent PASSED [187/299] tests/test_report_generator.py::TestMarkdownReportGenerator::test_empty_report PASSED [188/299] tests/test_report_generator.py::TestMarkdownReportGenerator::test_one_snippet PASSED [189/299] tests/test_report_generator.py::TestMarkdownReportGenerator::test_multiple_snippets PASSED [190/299] tests/test_report_generator.py::TestSimpleReportGeneratorWithBatchViolationReporter::test_violation_lines PASSED [191/299] tests/test_snippets.py::test_style_defs FAILED [192/299] tests/test_snippets.py::test_format PASSED [193/299] tests/test_snippets.py::test_format_with_invalid_start_line PASSED [194/299] tests/test_snippets.py::test_format_with_invalid_violation_lines PASSED [195/299] tests/test_snippets.py::test_no_filename_ext PASSED [196/299] tests/test_snippets.py::test_unicode PASSED [197/299] tests/test_snippets.py::test_one_snippet PASSED [198/299] tests/test_snippets.py::test_multiple_snippets PASSED [199/299] tests/test_snippets.py::test_no_lead_line PASSED [200/299] tests/test_snippets.py::test_no_lag_line PASSED [201/299] tests/test_snippets.py::test_one_line_file PASSED [202/299] tests/test_snippets.py::test_empty_file PASSED [203/299] tests/test_snippets.py::test_no_violations PASSED [204/299] tests/test_snippets.py::test_end_range_on_violation PASSED [205/299] tests/test_snippets.py::test_load_snippets_html PASSED [206/299] tests/test_snippets.py::test_load_snippets_markdown PASSED [207/299] tests/test_snippets.py::test_load_utf8_snippets PASSED [208/299] tests/test_snippets.py::test_load_declared_arabic PASSED [209/299] tests/test_snippets.py::test_latin_one_undeclared PASSED [210/299] tests/test_util.py::test_to_unix_path PASSED [211/299] tests/test_violations_reporter.py::TestXmlCoverageReporterTest::test_violations PASSED [212/299] tests/test_violations_reporter.py::TestXmlCoverageReporterTest::test_non_python_violations PASSED [213/299] tests/test_violations_reporter.py::TestXmlCoverageReporterTest::test_non_python_violations_empty_path PASSED [214/299] tests/test_violations_reporter.py::TestXmlCoverageReporterTest::test_two_inputs_first_violate PASSED [215/299] tests/test_violations_reporter.py::TestXmlCoverageReporterTest::test_two_inputs_second_violate PASSED [216/299] tests/test_violations_reporter.py::TestXmlCoverageReporterTest::test_three_inputs PASSED [217/299] tests/test_violations_reporter.py::TestXmlCoverageReporterTest::test_different_files_in_inputs PASSED [218/299] tests/test_violations_reporter.py::TestXmlCoverageReporterTest::test_empty_violations PASSED [219/299] tests/test_violations_reporter.py::TestXmlCoverageReporterTest::test_no_such_file PASSED [220/299] tests/test_violations_reporter.py::TestXmlCoverageReporterTest::test_expand_unreported_lines_when_configured PASSED [221/299] tests/test_violations_reporter.py::TestXmlCoverageReporterTest::test_expand_unreported_lines_without_violations PASSED [222/299] tests/test_violations_reporter.py::TestXmlCoverageReporterTest::test_expand_unreported_lines_without_measured PASSED [223/299] tests/test_violations_reporter.py::TestCloverXmlCoverageReporterTest::test_violations PASSED [224/299] tests/test_violations_reporter.py::TestCloverXmlCoverageReporterTest::test_two_inputs_first_violate PASSED [225/299] tests/test_violations_reporter.py::TestCloverXmlCoverageReporterTest::test_two_inputs_second_violate PASSED [226/299] tests/test_violations_reporter.py::TestCloverXmlCoverageReporterTest::test_three_inputs PASSED [227/299] tests/test_violations_reporter.py::TestCloverXmlCoverageReporterTest::test_different_files_in_inputs PASSED [228/299] tests/test_violations_reporter.py::TestCloverXmlCoverageReporterTest::test_empty_violations PASSED [229/299] tests/test_violations_reporter.py::TestCloverXmlCoverageReporterTest::test_no_such_file PASSED [230/299] tests/test_violations_reporter.py::TestJacocoXmlCoverageReporterTest::test_violations PASSED [231/299] tests/test_violations_reporter.py::TestJacocoXmlCoverageReporterTest::test_two_inputs_first_violate PASSED [232/299] tests/test_violations_reporter.py::TestJacocoXmlCoverageReporterTest::test_two_inputs_second_violate PASSED [233/299] tests/test_violations_reporter.py::TestJacocoXmlCoverageReporterTest::test_three_inputs PASSED [234/299] tests/test_violations_reporter.py::TestJacocoXmlCoverageReporterTest::test_different_files_in_inputs PASSED [235/299] tests/test_violations_reporter.py::TestJacocoXmlCoverageReporterTest::test_empty_violations PASSED [236/299] tests/test_violations_reporter.py::TestJacocoXmlCoverageReporterTest::test_no_such_file PASSED [237/299] tests/test_violations_reporter.py::TestPycodestyleQualityReporterTest::test_quality PASSED [238/299] tests/test_violations_reporter.py::TestPycodestyleQualityReporterTest::test_no_quality_issues_newline PASSED [239/299] tests/test_violations_reporter.py::TestPycodestyleQualityReporterTest::test_no_quality_issues_emptystring PASSED [240/299] tests/test_violations_reporter.py::TestPycodestyleQualityReporterTest::test_quality_error PASSED [241/299] tests/test_violations_reporter.py::TestPycodestyleQualityReporterTest::test_no_such_file PASSED [242/299] tests/test_violations_reporter.py::TestPycodestyleQualityReporterTest::test_no_python_file PASSED [243/299] tests/test_violations_reporter.py::TestPycodestyleQualityReporterTest::test_quality_pregenerated_report PASSED [244/299] tests/test_violations_reporter.py::TestPyflakesQualityReporterTest::test_quality PASSED [245/299] tests/test_violations_reporter.py::TestPyflakesQualityReporterTest::test_no_quality_issues_newline PASSED [246/299] tests/test_violations_reporter.py::TestPyflakesQualityReporterTest::test_no_quality_issues_emptystring PASSED [247/299] tests/test_violations_reporter.py::TestPyflakesQualityReporterTest::test_quality_error PASSED [248/299] tests/test_violations_reporter.py::TestPyflakesQualityReporterTest::test_no_such_file PASSED [249/299] tests/test_violations_reporter.py::TestPyflakesQualityReporterTest::test_no_python_file PASSED [250/299] tests/test_violations_reporter.py::TestPyflakesQualityReporterTest::test_quality_pregenerated_report PASSED [251/299] tests/test_violations_reporter.py::TestFlake8QualityReporterTest::test_quality PASSED [252/299] tests/test_violations_reporter.py::TestFlake8QualityReporterTest::test_no_quality_issues_newline PASSED [253/299] tests/test_violations_reporter.py::TestFlake8QualityReporterTest::test_no_quality_issues_emptystring PASSED [254/299] tests/test_violations_reporter.py::TestFlake8QualityReporterTest::test_quality_error PASSED [255/299] tests/test_violations_reporter.py::TestFlake8QualityReporterTest::test_no_such_file PASSED [256/299] tests/test_violations_reporter.py::TestFlake8QualityReporterTest::test_no_python_file PASSED [257/299] tests/test_violations_reporter.py::TestFlake8QualityReporterTest::test_file_does_not_exist PASSED [258/299] tests/test_violations_reporter.py::TestFlake8QualityReporterTest::test_quality_pregenerated_report PASSED [259/299] tests/test_violations_reporter.py::TestPydocstlyeQualityReporterTest::test_no_such_file PASSED [260/299] tests/test_violations_reporter.py::TestPydocstlyeQualityReporterTest::test_no_python_file PASSED [261/299] tests/test_violations_reporter.py::TestPydocstlyeQualityReporterTest::test_quality PASSED [262/299] tests/test_violations_reporter.py::TestPylintQualityReporterTest::test_no_such_file PASSED [263/299] tests/test_violations_reporter.py::TestPylintQualityReporterTest::test_no_python_file PASSED [264/299] tests/test_violations_reporter.py::TestPylintQualityReporterTest::test_quality PASSED [265/299] tests/test_violations_reporter.py::TestPylintQualityReporterTest::test_unicode PASSED [266/299] tests/test_violations_reporter.py::TestPylintQualityReporterTest::test_unicode_continuation_char PASSED [267/299] tests/test_violations_reporter.py::TestPylintQualityReporterTest::test_non_integer_line_num PASSED [268/299] tests/test_violations_reporter.py::TestPylintQualityReporterTest::test_quality_deprecation_warning PASSED [269/299] tests/test_violations_reporter.py::TestPylintQualityReporterTest::test_quality_error PASSED [270/299] tests/test_violations_reporter.py::TestPylintQualityReporterTest::test_no_quality_issues_newline PASSED [271/299] tests/test_violations_reporter.py::TestPylintQualityReporterTest::test_no_quality_issues_emptystring PASSED [272/299] tests/test_violations_reporter.py::TestPylintQualityReporterTest::test_quality_pregenerated_report PASSED [273/299] tests/test_violations_reporter.py::TestPylintQualityReporterTest::test_quality_pregenerated_report_continuation_char PASSED [274/299] tests/test_violations_reporter.py::TestPylintQualityReporterTest::test_windows_paths PASSED [275/299] tests/test_violations_reporter.py::TestJsHintQualityReporterTest::test_quality PASSED [276/299] tests/test_violations_reporter.py::TestJsHintQualityReporterTest::test_no_quality_issues_newline PASSED [277/299] tests/test_violations_reporter.py::TestJsHintQualityReporterTest::test_no_quality_issues_emptystring PASSED [278/299] tests/test_violations_reporter.py::TestJsHintQualityReporterTest::test_quality_error PASSED [279/299] tests/test_violations_reporter.py::TestJsHintQualityReporterTest::test_no_such_file PASSED [280/299] tests/test_violations_reporter.py::TestJsHintQualityReporterTest::test_no_js_file PASSED [281/299] tests/test_violations_reporter.py::TestJsHintQualityReporterTest::test_quality_pregenerated_report PASSED [282/299] tests/test_violations_reporter.py::TestJsHintQualityReporterTest::test_not_installed PASSED [283/299] tests/test_violations_reporter.py::TestESLintQualityReporterTest::test_quality PASSED [284/299] tests/test_violations_reporter.py::TestESLintQualityReporterTest::test_no_quality_issues_newline PASSED [285/299] tests/test_violations_reporter.py::TestESLintQualityReporterTest::test_no_quality_issues_emptystring PASSED [286/299] tests/test_violations_reporter.py::TestESLintQualityReporterTest::test_quality_error PASSED [287/299] tests/test_violations_reporter.py::TestESLintQualityReporterTest::test_no_such_file PASSED [288/299] tests/test_violations_reporter.py::TestESLintQualityReporterTest::test_no_js_file PASSED [289/299] tests/test_violations_reporter.py::TestESLintQualityReporterTest::test_quality_pregenerated_report PASSED [290/299] tests/test_violations_reporter.py::TestESLintQualityReporterTest::test_not_installed PASSED [291/299] tests/test_violations_reporter.py::TestESLintQualityReporterTest::test_report_root_path PASSED [292/299] tests/test_violations_reporter.py::TestShellCheckQualityReporterTest::test_no_such_file PASSED [293/299] tests/test_violations_reporter.py::TestShellCheckQualityReporterTest::test_no_shell_file PASSED [294/299] tests/test_violations_reporter.py::TestShellCheckQualityReporterTest::test_quality PASSED [295/299] tests/test_violations_reporter.py::TestSimpleCommandTestCase::test_run_simple_failure PASSED [296/299] tests/test_violations_reporter.py::TestSimpleCommandTestCase::test_run_simple_success PASSED [297/299] tests/test_violations_reporter.py::TestSubprocessErrorTestCase::test_quality_reporter PASSED [298/299] tests/test_violations_reporter.py::TestCppcheckQualityDriverTest::test_parse_report PASSED [299/299] =================================== FAILURES =================================== ____________ TestDiffQualityIntegration.test_html_with_external_css ____________ self = def test_html_with_external_css(self): > temp_dir = self._check_html_report( "git_diff_violations.txt", "pycodestyle_violations_report_external_css.html", ["diff-quality", "--violations=pycodestyle"], css_file="external_style.css", ) self = /var/tmp/portage/dev-util/diff-cover-9.2.0/work/diff_cover-9.2.0/tests/test_integration.py:483: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = git_diff_path = 'git_diff_violations.txt' expected_html_path = 'pycodestyle_violations_report_external_css.html' tool_args = ['diff-quality', '--violations=pycodestyle'], expected_status = 0 css_file = '/var/tmp/portage/dev-util/diff-cover-9.2.0/temp/pytest-of-portage/pytest-0/test_html_with_external_css0/dummy/external_style.css' def _check_html_report( self, git_diff_path, expected_html_path, tool_args, expected_status=0, css_file=None, ): """ Verify that the tool produces the expected HTML report. `git_diff_path` is a path to a fixture containing the (patched) output of the call to `git diff`. `expected_console_path` is a path to the fixture containing the expected HTML output of the tool. `tool_args` is a list of command line arguments to pass to the tool. You should include the name of the tool as the first argument. """ # Patch the output of `git diff` with open(git_diff_path, encoding="utf-8") as git_diff_file: self._set_git_diff_output(git_diff_file.read(), "") # Create a temporary directory to hold the output HTML report # Add a cleanup to ensure the directory gets deleted temp_dir = self.tmp_path / "dummy" temp_dir.mkdir() html_report_path = os.path.join(temp_dir, "diff_coverage.html") args = tool_args + ["--html-report", html_report_path] if css_file: css_file = os.path.join(temp_dir, css_file) args += ["--external-css-file", css_file] # Execute the tool if "diff-cover" in args[0]: code = diff_cover_tool.main(args) else: code = diff_quality_tool.main(args) assert code == expected_status # Check the HTML report with open(expected_html_path, encoding="utf-8") as expected_file: with open(html_report_path, encoding="utf-8") as html_report: html = html_report.read() expected = expected_file.read() if css_file is None: html = self._clear_css(html) expected = self._clear_css(expected) > assert expected.strip() == html.strip() E assert '\n\n \n \n Diff Quality\n \n \n \n

Diff Quality

\n

Quality Report: pycodestyle

\n

Diff: origin/main...HEAD, staged and unstaged changes

\n \n \n \n \n \n \n \n \n \n \n \n
Source FileDiff Quality (%)Lines in violation
violations_test_file.py66.7%\n
    \n
  • 2: E225 missing whitespace around operator
  • \n
  • 6: E302 expected 2 blank lines, found 0
  • \n
  • 11: E225 missing whitespace around operator
  • \n
\n
\n
    \n
  • Total: 9 lines
  • \n
  • Violation: 3 lines
  • \n
  • % Quality: 66%
  • \n
\n
\n
violations_test_file.py
\n
\n
 1\n 2\n 3\n 4\n 5\n 6\n 7\n 8\n 9\n10\n11\n12
def func_1(apple, my_list):\n    if apple<10:\n        # Do something \n        my_list.append(apple)\n    return my_list[1:]\ndef func_2(spongebob, squarepants):\n    """A less messy function"""\n    for char in spongebob:\n        if char in squarepants:\n            return char\n    unused=1\n    return None\n
\n\n
\n
\n \n' == '\n\n \n \n Diff Quality\n \n \n \n

Diff Quality

\n

Quality Report: pycodestyle

\n

Diff: origin/main...HEAD, staged and unstaged changes

\n \n \n \n \n \n \n \n \n \n \n \n
Source FileDiff Quality (%)Lines in violation
violations_test_file.py66.7%\n
    \n
  • 2: E225 missing whitespace around operator
  • \n
  • 6: E302 expected 2 blank lines, found 0
  • \n
  • 11: E225 missing whitespace around operator
  • \n
\n
\n
    \n
  • Total: 9 lines
  • \n
  • Violation: 3 lines
  • \n
  • % Quality: 66%
  • \n
\n
\n
violations_test_file.py
\n
\n
 1\n 2\n 3\n 4\n 5\n 6\n 7\n 8\n 9\n10\n11\n12
def func_1(apple, my_list):\n    if apple<10:\n        # Do something \n        my_list.append(apple)\n    return my_list[1:]\ndef func_2(spongebob, squarepants):\n    """A less messy function"""\n    for char in spongebob:\n        if char in squarepants:\n            return char\n    unused=1\n    return None\n
\n\n
\n
\n \n' E E E E E E Diff Quality E E E E

Diff Quality

E

Quality Report: pycodestyle

E

Diff: origin/main...HEAD, staged and unstaged changes

E E E E E E E E E E E E
Source FileDiff Quality (%)Lines in violation
violations_test_file.py66.7% E
    E
  • 2: E225 missing whitespace around operator
  • E
  • 6: E302 expected 2 blank lines, found 0
  • E
  • 11: E225 missing whitespace around operator
  • E
E
E
    E
  • Total: 9 lines
  • E
  • Violation: 3 lines
  • E
  • % Quality: 66%
  • E
E
E
violations_test_file.py
E
E
 1
E                    2
E                    3
E                    4
E                    5
E                    6
E                    7
E                    8
E                    9
E                   10
E                   11
E                 - 12
def func_1(apple, my_list):
E                 ?                                                                                                                                                                                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
E                 + 12
def func_1(apple, my_list):
E                 ?                                                                                                                                                                                         ^^^^^^
E                       if apple<10:
E                           # Do something 
E                           my_list.append(apple)
E                       return my_list[1:]
E                 - def func_2(spongebob, squarepants):
E                 ?                                                                                                                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
E                 + def func_2(spongebob, squarepants):
E                 ?                                                                                                                    ^^^^^^
E                       """A less messy function"""
E                       for char in spongebob:
E                           if char in squarepants:
E                               return char
E                       unused=1
E                       return None
E                   
E E
E
E E args = ['diff-quality', '--violations=pycodestyle', '--html-report', '/var/tmp/portage/dev-util/diff-cover-9.2.0/temp/pytest-of-portage/pytest-0/test_html_with_external_css0/dummy/diff_coverage.html', '--external-css-file', '/var/tmp/portage/dev-util/diff-cover-9.2.0/temp/pytest-of-portage/pytest-0/test_html_with_external_css0/dummy/external_style.css'] code = 0 css_file = '/var/tmp/portage/dev-util/diff-cover-9.2.0/temp/pytest-of-portage/pytest-0/test_html_with_external_css0/dummy/external_style.css' expected = ('\n' '\n' ' \n' " \n" ' Diff Quality\n' ' \n' ' \n' ' \n' '

Diff Quality

\n' '

Quality Report: pycodestyle

\n' '

Diff: origin/main...HEAD, staged and unstaged changes

\n' ' \n' ' \n' ' \n' ' \n' ' \n' ' \n' ' \n' ' \n' ' \n' ' \n' ' \n' '
Source FileDiff Quality (%)Lines in violation
violations_test_file.py66.7%\n' '
    \n' '
  • 2: E225 missing whitespace around operator
  • \n' '
  • 6: E302 expected 2 blank lines, found 0
  • \n' '
  • 11: E225 missing whitespace around ' 'operator
  • \n' '
\n' '
\n' '
    \n' '
  • Total: 9 lines
  • \n' '
  • Violation: 3 lines
  • \n' '
  • % Quality: 66%
  • \n' '
\n' '
\n' '
violations_test_file.py
\n' '
\n' '
 1\n'
 ' 2\n'
 ' 3\n'
 ' 4\n'
 ' 5\n'
 ' 6\n'
 ' 7\n'
 ' 8\n'
 ' 9\n'
 '10\n'
 '11\n'
 '12
def func_1(apple, my_list):\n'
 '    if apple<10:\n'
 '        # Do something '
 '\n'
 '        my_list.append(apple)\n'
 '    '
 'return my_list[1:]\n'
 'def func_2(spongebob, '
 'squarepants):\n'
 '    """A less messy function"""\n'
 '    '
 'for char in spongebob:\n'
 '        if char in squarepants:\n'
 '            return char\n'
 '    unused=1\n'
 '    return '
 'None\n'
 '
\n' '\n' '
\n' '
\n' ' \n' '') expected_file = <_io.TextIOWrapper name='pycodestyle_violations_report_external_css.html' mode='r' encoding='utf-8'> expected_html_path = 'pycodestyle_violations_report_external_css.html' expected_status = 0 git_diff_file = <_io.TextIOWrapper name='git_diff_violations.txt' mode='r' encoding='utf-8'> git_diff_path = 'git_diff_violations.txt' html = ('\n' '\n' ' \n' " \n" ' Diff Quality\n' ' \n' ' \n' ' \n' '

Diff Quality

\n' '

Quality Report: pycodestyle

\n' '

Diff: origin/main...HEAD, staged and unstaged changes

\n' ' \n' ' \n' ' \n' ' \n' ' \n' ' \n' ' \n' ' \n' ' \n' ' \n' ' \n' '
Source FileDiff Quality (%)Lines in violation
violations_test_file.py66.7%\n' '
    \n' '
  • 2: E225 missing whitespace around operator
  • \n' '
  • 6: E302 expected 2 blank lines, found 0
  • \n' '
  • 11: E225 missing whitespace around ' 'operator
  • \n' '
\n' '
\n' '
    \n' '
  • Total: 9 lines
  • \n' '
  • Violation: 3 lines
  • \n' '
  • % Quality: 66%
  • \n' '
\n' '
\n' '
violations_test_file.py
\n' '
\n' '
 1\n'
 ' 2\n'
 ' 3\n'
 ' 4\n'
 ' 5\n'
 ' 6\n'
 ' 7\n'
 ' 8\n'
 ' 9\n'
 '10\n'
 '11\n'
 '12
def func_1(apple, my_list):\n'
 '    if apple<10:\n'
 '        # Do something '
 '\n'
 '        my_list.append(apple)\n'
 '    '
 'return my_list[1:]\n'
 'def func_2(spongebob, squarepants):\n'
 '    """A less messy function"""\n'
 '    '
 'for char in spongebob:\n'
 '        if char in squarepants:\n'
 '            return char\n'
 '    unused=1\n'
 '    return '
 'None\n'
 '
\n' '\n' '
\n' '
\n' ' \n' '') html_report = <_io.TextIOWrapper name='/var/tmp/portage/dev-util/diff-cover-9.2.0/temp/pytest-of-portage/pytest-0/test_html_with_external_css0/dummy/diff_coverage.html' mode='r' encoding='utf-8'> html_report_path = '/var/tmp/portage/dev-util/diff-cover-9.2.0/temp/pytest-of-portage/pytest-0/test_html_with_external_css0/dummy/diff_coverage.html' self = temp_dir = PosixPath('/var/tmp/portage/dev-util/diff-cover-9.2.0/temp/pytest-of-portage/pytest-0/test_html_with_external_css0/dummy') tool_args = ['diff-quality', '--violations=pycodestyle'] /var/tmp/portage/dev-util/diff-cover-9.2.0/work/diff_cover-9.2.0/tests/test_integration.py:121: AssertionError _______________________________ test_style_defs ________________________________ def test_style_defs(): style_str = Snippet.style_defs() expected_styles = load_fixture("snippet.css").strip() # Check that a sample of the styles are present # (use only a sample to make the test more robust # against Pygments changes). for expect_line in expected_styles.split("\n"): > assert expect_line in style_str E AssertionError: assert '.o { color: #666666 } /* Operator */' in 'pre { line-height: 125%; }\ntd.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }\nspan.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }\ntd.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }\nspan.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }\n.hll { background-color: #ffcccc }\n.c { color: #3D7B7B; font-style: italic } /* Comment */\n.err { border: 1px solid #F00 } /* Error */\n.k { color: #008000; font-weight: bold } /* Keyword */\n.o { color: #666 } /* Operator */\n.ch { color: #3D7B7B; font-style: italic } /* Comment.Hashbang */\n.cm { color: #3D7B7B; font-style: italic } /* Comment.Multiline */\n.cp { color: #9C6500 } /* Comment.Preproc */\n.cpf { color: #3D7B7B; font-style: italic } /* Comment.PreprocFile */\n.c1 { color: #3D7B7B; font-style: italic } /* Comment.Single */\n.cs { color: #3D7B7B; font-style: italic } /* Comment.Special */\n.gd { color: #A00000 } /* Generic.Deleted */\n.ge { font-style: italic } /* Generic.Emph */\n.ges { font-weight: bold; font-style: italic } /* Generic.EmphStrong */\n.gr { color: #E40000 } /* Generic.Error */\n.gh { color: #000080; font-weight: bold } /* Generic.Heading */\n.gi { color: #008400 } /* Generic.Inserted */\n.go { color: #717171 } /* Generic.Output */\n.gp { color: #000080; font-weight: bold } /* Generic.Prompt */\n.gs { font-weight: bold } /* Generic.Strong */\n.gu { color: #800080; font-weight: bold } /* Generic.Subheading */\n.gt { color: #04D } /* Generic.Traceback */\n.kc { color: #008000; font-weight: bold } /* Keyword.Constant */\n.kd { color: #008000; font-weight: bold } /* Keyword.Declaration */\n.kn { color: #008000; font-weight: bold } /* Keyword.Namespace */\n.kp { color: #008000 } /* Keyword.Pseudo */\n.kr { color: #008000; font-weight: bold } /* Keyword.Reserved */\n.kt { color: #B00040 } /* Keyword.Type */\n.m { color: #666 } /* Literal.Number */\n.s { color: #BA2121 } /* Literal.String */\n.na { color: #687822 } /* Name.Attribute */\n.nb { color: #008000 } /* Name.Builtin */\n.nc { color: #00F; font-weight: bold } /* Name.Class */\n.no { color: #800 } /* Name.Constant */\n.nd { color: #A2F } /* Name.Decorator */\n.ni { color: #717171; font-weight: bold } /* Name.Entity */\n.ne { color: #CB3F38; font-weight: bold } /* Name.Exception */\n.nf { color: #00F } /* Name.Function */\n.nl { color: #767600 } /* Name.Label */\n.nn { color: #00F; font-weight: bold } /* Name.Namespace */\n.nt { color: #008000; font-weight: bold } /* Name.Tag */\n.nv { color: #19177C } /* Name.Variable */\n.ow { color: #A2F; font-weight: bold } /* Operator.Word */\n.w { color: #BBB } /* Text.Whitespace */\n.mb { color: #666 } /* Literal.Number.Bin */\n.mf { color: #666 } /* Literal.Number.Float */\n.mh { color: #666 } /* Literal.Number.Hex */\n.mi { color: #666 } /* Literal.Number.Integer */\n.mo { color: #666 } /* Literal.Number.Oct */\n.sa { color: #BA2121 } /* Literal.String.Affix */\n.sb { color: #BA2121 } /* Literal.String.Backtick */\n.sc { color: #BA2121 } /* Literal.String.Char */\n.dl { color: #BA2121 } /* Literal.String.Delimiter */\n.sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */\n.s2 { color: #BA2121 } /* Literal.String.Double */\n.se { color: #AA5D1F; font-weight: bold } /* Literal.String.Escape */\n.sh { color: #BA2121 } /* Literal.String.Heredoc */\n.si { color: #A45A77; font-weight: bold } /* Literal.String.Interpol */\n.sx { color: #008000 } /* Literal.String.Other */\n.sr { color: #A45A77 } /* Literal.String.Regex */\n.s1 { color: #BA2121 } /* Literal.String.Single */\n.ss { color: #19177C } /* Literal.String.Symbol */\n.bp { color: #008000 } /* Name.Builtin.Pseudo */\n.fm { color: #00F } /* Name.Function.Magic */\n.vc { color: #19177C } /* Name.Variable.Class */\n.vg { color: #19177C } /* Name.Variable.Global */\n.vi { color: #19177C } /* Name.Variable.Instance */\n.vm { color: #19177C } /* Name.Variable.Magic */\n.il { color: #666 } /* Literal.Number.Integer.Long */' expect_line = '.o { color: #666666 } /* Operator */' expected_styles = ('.hll { background-color: #ffcccc }\n' '.c { color: #3D7B7B; font-style: italic } /* Comment */\n' '.k { color: #008000; font-weight: bold } /* Keyword */\n' '.o { color: #666666 } /* Operator */\n' '.m { color: #666666 } /* Literal.Number */\n' '.s { color: #BA2121 } /* Literal.String */\n' '.na { color: #687822 } /* Name.Attribute */\n' '.nb { color: #008000 } /* Name.Builtin */') style_str = ('pre { line-height: 125%; }\n' 'td.linenos .normal { color: inherit; background-color: transparent; ' 'padding-left: 5px; padding-right: 5px; }\n' 'span.linenos { color: inherit; background-color: transparent; padding-left: ' '5px; padding-right: 5px; }\n' 'td.linenos .special { color: #000000; background-color: #ffffc0; ' 'padding-left: 5px; padding-right: 5px; }\n' 'span.linenos.special { color: #000000; background-color: #ffffc0; ' 'padding-left: 5px; padding-right: 5px; }\n' '.hll { background-color: #ffcccc }\n' '.c { color: #3D7B7B; font-style: italic } /* Comment */\n' '.err { border: 1px solid #F00 } /* Error */\n' '.k { color: #008000; font-weight: bold } /* Keyword */\n' '.o { color: #666 } /* Operator */\n' '.ch { color: #3D7B7B; font-style: italic } /* Comment.Hashbang */\n' '.cm { color: #3D7B7B; font-style: italic } /* Comment.Multiline */\n' '.cp { color: #9C6500 } /* Comment.Preproc */\n' '.cpf { color: #3D7B7B; font-style: italic } /* Comment.PreprocFile */\n' '.c1 { color: #3D7B7B; font-style: italic } /* Comment.Single */\n' '.cs { color: #3D7B7B; font-style: italic } /* Comment.Special */\n' '.gd { color: #A00000 } /* Generic.Deleted */\n' '.ge { font-style: italic } /* Generic.Emph */\n' '.ges { font-weight: bold; font-style: italic } /* Generic.EmphStrong */\n' '.gr { color: #E40000 } /* Generic.Error */\n' '.gh { color: #000080; font-weight: bold } /* Generic.Heading */\n' '.gi { color: #008400 } /* Generic.Inserted */\n' '.go { color: #717171 } /* Generic.Output */\n' '.gp { color: #000080; font-weight: bold } /* Generic.Prompt */\n' '.gs { font-weight: bold } /* Generic.Strong */\n' '.gu { color: #800080; font-weight: bold } /* Generic.Subheading */\n' '.gt { color: #04D } /* Generic.Traceback */\n' '.kc { color: #008000; font-weight: bold } /* Keyword.Constant */\n' '.kd { color: #008000; font-weight: bold } /* Keyword.Declaration */\n' '.kn { color: #008000; font-weight: bold } /* Keyword.Namespace */\n' '.kp { color: #008000 } /* Keyword.Pseudo */\n' '.kr { color: #008000; font-weight: bold } /* Keyword.Reserved */\n' '.kt { color: #B00040 } /* Keyword.Type */\n' '.m { color: #666 } /* Literal.Number */\n' '.s { color: #BA2121 } /* Literal.String */\n' '.na { color: #687822 } /* Name.Attribute */\n' '.nb { color: #008000 } /* Name.Builtin */\n' '.nc { color: #00F; font-weight: bold } /* Name.Class */\n' '.no { color: #800 } /* Name.Constant */\n' '.nd { color: #A2F } /* Name.Decorator */\n' '.ni { color: #717171; font-weight: bold } /* Name.Entity */\n' '.ne { color: #CB3F38; font-weight: bold } /* Name.Exception */\n' '.nf { color: #00F } /* Name.Function */\n' '.nl { color: #767600 } /* Name.Label */\n' '.nn { color: #00F; font-weight: bold } /* Name.Namespace */\n' '.nt { color: #008000; font-weight: bold } /* Name.Tag */\n' '.nv { color: #19177C } /* Name.Variable */\n' '.ow { color: #A2F; font-weight: bold } /* Operator.Word */\n' '.w { color: #BBB } /* Text.Whitespace */\n' '.mb { color: #666 } /* Literal.Number.Bin */\n' '.mf { color: #666 } /* Literal.Number.Float */\n' '.mh { color: #666 } /* Literal.Number.Hex */\n' '.mi { color: #666 } /* Literal.Number.Integer */\n' '.mo { color: #666 } /* Literal.Number.Oct */\n' '.sa { color: #BA2121 } /* Literal.String.Affix */\n' '.sb { color: #BA2121 } /* Literal.String.Backtick */\n' '.sc { color: #BA2121 } /* Literal.String.Char */\n' '.dl { color: #BA2121 } /* Literal.String.Delimiter */\n' '.sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */\n' '.s2 { color: #BA2121 } /* Literal.String.Double */\n' '.se { color: #AA5D1F; font-weight: bold } /* Literal.String.Escape */\n' '.sh { color: #BA2121 } /* Literal.String.Heredoc */\n' '.si { color: #A45A77; font-weight: bold } /* Literal.String.Interpol */\n' '.sx { color: #008000 } /* Literal.String.Other */\n' '.sr { color: #A45A77 } /* Literal.String.Regex */\n' '.s1 { color: #BA2121 } /* Literal.String.Single */\n' '.ss { color: #19177C } /* Literal.String.Symbol */\n' '.bp { color: #008000 } /* Name.Builtin.Pseudo */\n' '.fm { color: #00F } /* Name.Function.Magic */\n' '.vc { color: #19177C } /* Name.Variable.Class */\n' '.vg { color: #19177C } /* Name.Variable.Global */\n' '.vi { color: #19177C } /* Name.Variable.Instance */\n' '.vm { color: #19177C } /* Name.Variable.Magic */\n' '.il { color: #666 } /* Literal.Number.Integer.Long */') tests/test_snippets.py:154: AssertionError =========================== short test summary info ============================ FAILED tests/test_integration.py::TestDiffQualityIntegration::test_html_with_external_css - assert '\n\n \n \n Diff Quality\n \n \n \n

Diff Quality

\n

Quality Report: pycodestyle

\n

Diff: origin/main...HEAD, staged and unstaged changes

\n \n \n \n \n \n \n \n \n \n \n \n
Source FileDiff Quality (%)Lines in violation
violations_test_file.py66.7%\n
    \n
  • 2: E225 missing whitespace around operator
  • \n
  • 6: E302 expected 2 blank lines, found 0
  • \n
  • 11: E225 missing whitespace around operator
  • \n
\n
\n
    \n
  • Total: 9 lines
  • \n
  • Violation: 3 lines
  • \n
  • % Quality: 66%
  • \n
\n
\n
violations_test_file.py
\n
\n
 1\n 2\n 3\n 4\n 5\n 6\n 7\n 8\n 9\n10\n11\n12
def func_1(apple, my_list):\n    if apple<10:\n        # Do something \n        my_list.append(apple)\n    return my_list[1:]\ndef func_2(spongebob, squarepants):\n    """A less messy function"""\n    for char in spongebob:\n        if char in squarepants:\n            return char\n    unused=1\n    return None\n
\n\n
\n
\n \n' == '\n\n \n \n Diff Quality\n \n \n \n

Diff Quality

\n

Quality Report: pycodestyle

\n

Diff: origin/main...HEAD, staged and unstaged changes

\n \n \n \n \n \n \n \n \n \n \n \n
Source FileDiff Quality (%)Lines in violation
violations_test_file.py66.7%\n
    \n
  • 2: E225 missing whitespace around operator
  • \n
  • 6: E302 expected 2 blank lines, found 0
  • \n
  • 11: E225 missing whitespace around operator
  • \n
\n
\n
    \n
  • Total: 9 lines
  • \n
  • Violation: 3 lines
  • \n
  • % Quality: 66%
  • \n
\n
\n
violations_test_file.py
\n
\n
 1\n 2\n 3\n 4\n 5\n 6\n 7\n 8\n 9\n10\n11\n12
def func_1(apple, my_list):\n    if apple<10:\n        # Do something \n        my_list.append(apple)\n    return my_list[1:]\ndef func_2(spongebob, squarepants):\n    """A less messy function"""\n    for char in spongebob:\n        if char in squarepants:\n            return char\n    unused=1\n    return None\n
\n\n
\n
\n \n' Diff Quality

Diff Quality

Quality Report: pycodestyle

Diff: origin/main...HEAD, staged and unstaged changes

Source File Diff Quality (%) Lines in violation
violations_test_file.py 66.7%
  • 2: E225 missing whitespace around operator
  • 6: E302 expected 2 blank lines, found 0
  • 11: E225 missing whitespace around operator
  • Total: 9 lines
  • Violation: 3 lines
  • % Quality: 66%
violations_test_file.py
 1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
  - 12
def func_1(apple, my_list):
  ?                                                                                                                                                                                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  + 12
def func_1(apple, my_list):
  ?                                                                                                                                                                                         ^^^^^^
        if apple<10:
            # Do something 
            my_list.append(apple)
        return my_list[1:]
  - def func_2(spongebob, squarepants):
  ?                                                                                                                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  + def func_2(spongebob, squarepants):
  ?                                                                                                                    ^^^^^^
        """A less messy function"""
        for char in spongebob:
            if char in squarepants:
                return char
        unused=1
        return None
    
FAILED tests/test_snippets.py::test_style_defs - AssertionError: assert '.o { color: #666666 } /* Operator */' in 'pre { line-height: 125%; }\ntd.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }\nspan.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }\ntd.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }\nspan.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }\n.hll { background-color: #ffcccc }\n.c { color: #3D7B7B; font-style: italic } /* Comment */\n.err { border: 1px solid #F00 } /* Error */\n.k { color: #008000; font-weight: bold } /* Keyword */\n.o { color: #666 } /* Operator */\n.ch { color: #3D7B7B; font-style: italic } /* Comment.Hashbang */\n.cm { color: #3D7B7B; font-style: italic } /* Comment.Multiline */\n.cp { color: #9C6500 } /* Comment.Preproc */\n.cpf { color: #3D7B7B; font-style: italic } /* Comment.PreprocFile */\n.c1 { color: #3D7B7B; font-style: italic } /* Comment.Single */\n.cs { color: #3D7B7B; font-style: italic } /* Comment.Special */\n.gd { color: #A00000 } /* Generic.Deleted */\n.ge { font-style: italic } /* Generic.Emph */\n.ges { font-weight: bold; font-style: italic } /* Generic.EmphStrong */\n.gr { color: #E40000 } /* Generic.Error */\n.gh { color: #000080; font-weight: bold } /* Generic.Heading */\n.gi { color: #008400 } /* Generic.Inserted */\n.go { color: #717171 } /* Generic.Output */\n.gp { color: #000080; font-weight: bold } /* Generic.Prompt */\n.gs { font-weight: bold } /* Generic.Strong */\n.gu { color: #800080; font-weight: bold } /* Generic.Subheading */\n.gt { color: #04D } /* Generic.Traceback */\n.kc { color: #008000; font-weight: bold } /* Keyword.Constant */\n.kd { color: #008000; font-weight: bold } /* Keyword.Declaration */\n.kn { color: #008000; font-weight: bold } /* Keyword.Namespace */\n.kp { color: #008000 } /* Keyword.Pseudo */\n.kr { color: #008000; font-weight: bold } /* Keyword.Reserved */\n.kt { color: #B00040 } /* Keyword.Type */\n.m { color: #666 } /* Literal.Number */\n.s { color: #BA2121 } /* Literal.String */\n.na { color: #687822 } /* Name.Attribute */\n.nb { color: #008000 } /* Name.Builtin */\n.nc { color: #00F; font-weight: bold } /* Name.Class */\n.no { color: #800 } /* Name.Constant */\n.nd { color: #A2F } /* Name.Decorator */\n.ni { color: #717171; font-weight: bold } /* Name.Entity */\n.ne { color: #CB3F38; font-weight: bold } /* Name.Exception */\n.nf { color: #00F } /* Name.Function */\n.nl { color: #767600 } /* Name.Label */\n.nn { color: #00F; font-weight: bold } /* Name.Namespace */\n.nt { color: #008000; font-weight: bold } /* Name.Tag */\n.nv { color: #19177C } /* Name.Variable */\n.ow { color: #A2F; font-weight: bold } /* Operator.Word */\n.w { color: #BBB } /* Text.Whitespace */\n.mb { color: #666 } /* Literal.Number.Bin */\n.mf { color: #666 } /* Literal.Number.Float */\n.mh { color: #666 } /* Literal.Number.Hex */\n.mi { color: #666 } /* Literal.Number.Integer */\n.mo { color: #666 } /* Literal.Number.Oct */\n.sa { color: #BA2121 } /* Literal.String.Affix */\n.sb { color: #BA2121 } /* Literal.String.Backtick */\n.sc { color: #BA2121 } /* Literal.String.Char */\n.dl { color: #BA2121 } /* Literal.String.Delimiter */\n.sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */\n.s2 { color: #BA2121 } /* Literal.String.Double */\n.se { color: #AA5D1F; font-weight: bold } /* Literal.String.Escape */\n.sh { color: #BA2121 } /* Literal.String.Heredoc */\n.si { color: #A45A77; font-weight: bold } /* Literal.String.Interpol */\n.sx { color: #008000 } /* Literal.String.Other */\n.sr { color: #A45A77 } /* Literal.String.Regex */\n.s1 { color: #BA2121 } /* Literal.String.Single */\n.ss { color: #19177C } /* Literal.String.Symbol */\n.bp { color: #008000 } /* Name.Builtin.Pseudo */\n.fm { color: #00F } /* Name.Function.Magic */\n.vc { color: #19177C } /* Name.Variable.Class */\n.vg { color: #19177C } /* Name.Variable.Global */\n.vi { color: #19177C } /* Name.Variable.Instance */\n.vm { color: #19177C } /* Name.Variable.Magic */\n.il { color: #666 } /* Literal.Number.Integer.Long */' ======================== 2 failed, 297 passed in 16.06s ======================== pytest-xprocess reminder::Be sure to terminate the started process by running 'pytest --xkill' if you have not explicitly done so in your fixture with 'xprocess.getinfo().terminate()'. * ERROR: dev-util/diff-cover-9.2.0::gentoo failed (test phase): * pytest failed with python3.12 * * Call stack: * ebuild.sh, line 136: Called src_test * environment, line 3735: Called distutils-r1_src_test * environment, line 1899: Called _distutils-r1_run_foreach_impl 'python_test' * environment, line 658: Called python_foreach_impl 'distutils-r1_run_phase' 'python_test' * environment, line 3325: Called multibuild_foreach_variant '_python_multibuild_wrapper' 'distutils-r1_run_phase' 'python_test' * environment, line 2850: Called _multibuild_run '_python_multibuild_wrapper' 'distutils-r1_run_phase' 'python_test' * environment, line 2848: Called _python_multibuild_wrapper 'distutils-r1_run_phase' 'python_test' * environment, line 1098: Called distutils-r1_run_phase 'python_test' * environment, line 1822: Called python_test * environment, line 3614: Called distutils-r1_python_test * environment, line 1768: Called epytest * environment, line 2295: Called die * The specific snippet of code: * [[ ${ret} -ne 0 ]] && die -n "pytest failed with ${EPYTHON}"; * * If you need support, post the output of `emerge --info '=dev-util/diff-cover-9.2.0::gentoo'`, * the complete build log and the output of `emerge -pqv '=dev-util/diff-cover-9.2.0::gentoo'`. * The complete build log is located at '/var/log/portage/dev-util:diff-cover-9.2.0:20250220-161844.log'. * For convenience, a symlink to the build log is located at '/var/tmp/portage/dev-util/diff-cover-9.2.0/temp/build.log'. * The ebuild environment file is located at '/var/tmp/portage/dev-util/diff-cover-9.2.0/temp/environment'. * Working directory: '/var/tmp/portage/dev-util/diff-cover-9.2.0/work/diff_cover-9.2.0' * S: '/var/tmp/portage/dev-util/diff-cover-9.2.0/work/diff_cover-9.2.0'